From 434d3c8e6e142766742f1513c9d415e13efb8d81 Mon Sep 17 00:00:00 2001 From: Brice Jaglin Date: Fri, 14 May 2021 22:35:26 +0200 Subject: [PATCH 1/7] remove unused property --- src/main/g8/default.properties | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/g8/default.properties b/src/main/g8/default.properties index ff1f0a8..0eded98 100644 --- a/src/main/g8/default.properties +++ b/src/main/g8/default.properties @@ -1,3 +1,2 @@ repo = My Repo -scalameta_version = maven(org.scalameta, scalameta_2.13) scalafix_version = maven(ch.epfl.scala, sbt-scalafix) From a74c1f49bf334704c82035811ebc83a379ff8f5c Mon Sep 17 00:00:00 2001 From: Brice Jaglin Date: Fri, 14 May 2021 22:41:07 +0200 Subject: [PATCH 2/7] use sbt 1.3+ SemanticdbPlugin to get semanticdb output --- src/main/g8/scalafix/build.sbt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/g8/scalafix/build.sbt b/src/main/g8/scalafix/build.sbt index da22c79..2c110e6 100644 --- a/src/main/g8/scalafix/build.sbt +++ b/src/main/g8/scalafix/build.sbt @@ -14,9 +14,9 @@ inThisBuild( url("https://example.com") ) ), - addCompilerPlugin(scalafixSemanticdb), + semanticdbEnabled := true, + semanticdbVersion := scalafixSemanticdb.revision, scalacOptions ++= List( - "-Yrangepos", "-P:semanticdb:synthetics:on" ) ) @@ -49,6 +49,10 @@ lazy val tests = project (input / Compile / unmanagedSourceDirectories).value, scalafixTestkitInputClasspath := (input / Compile / fullClasspath).value, + scalafixTestkitInputScalacOptions := + (input / Compile / scalacOptions).value, + scalafixTestkitInputScalaVersion := + (input / Compile / scalaVersion).value ) .dependsOn(rules) .enablePlugins(ScalafixTestkitPlugin) From 72cdd7c94b5dcae4201b22e94eff0c85bd89bb05 Mon Sep 17 00:00:00 2001 From: Brice Jaglin Date: Fri, 14 May 2021 22:46:54 +0200 Subject: [PATCH 3/7] scalafmt 1.5.1 -> 2.7.5 --- .scalafmt.conf | 1 + build.sbt | 9 ++-- .../src/main/scala/fix/Scalafixg8_v0_6.scala | 42 +++++++++++------- .../rules/src/main/scala/fix/v0_9_28.scala | 3 +- scalafmt | Bin 28226 -> 20543 bytes 5 files changed, 36 insertions(+), 19 deletions(-) diff --git a/.scalafmt.conf b/.scalafmt.conf index 92375c8..56b02b3 100644 --- a/.scalafmt.conf +++ b/.scalafmt.conf @@ -1,3 +1,4 @@ +version = 2.7.5 project.git = true assumeStandardLibraryStripMargin = true project.excludeFilters = [ diff --git a/build.sbt b/build.sbt index 5a5d27c..c13715b 100644 --- a/build.sbt +++ b/build.sbt @@ -7,9 +7,12 @@ lazy val root = (project in file(".")) val _ = (Test / g8Test).toTask("").value val s = streams.value s.log.info( - "running our own sbt in the copied directory to mimic the scripted test") - val p = Process(Seq("sbt", "tests/test"), - (Test / g8 / target).value / "scalafix").run() + "running our own sbt in the copied directory to mimic the scripted test" + ) + val p = Process( + Seq("sbt", "tests/test"), + (Test / g8 / target).value / "scalafix" + ).run() assert(p.exitValue() == 0, "Non-zero exit from sbt tests/test") }, scriptedLaunchOpts ++= List( diff --git a/migration-rules/v0.6.x/rules/src/main/scala/fix/Scalafixg8_v0_6.scala b/migration-rules/v0.6.x/rules/src/main/scala/fix/Scalafixg8_v0_6.scala index 2d956cf..26dcccf 100644 --- a/migration-rules/v0.6.x/rules/src/main/scala/fix/Scalafixg8_v0_6.scala +++ b/migration-rules/v0.6.x/rules/src/main/scala/fix/Scalafixg8_v0_6.scala @@ -50,19 +50,26 @@ class Scalafixg8_v0_6 extends SyntacticRule("Scalafixg8_v0_6") { doc.tree.traverse { case Init(rule @ Type.Name("Rule"), _, List(List(Lit.String(_)))) => patch += Patch.replaceTree(rule, "SyntacticRule") - case init @ Init(Type.Name("SemanticRule"), - _, - List(List(Term.Name("index"), Lit.String(ruleName)))) => + case init @ Init( + Type.Name("SemanticRule"), + _, + List(List(Term.Name("index"), Lit.String(ruleName))) + ) => patch += Patch.replaceTree(init, s"""SemanticRule("$ruleName")""") case Ctor.Primary( - _, - _, - List( + _, + _, List( - param @ Term.Param(Nil, - Term.Name("index"), - Some(Type.Name("SemanticdbIndex")), - _)))) => + List( + param @ Term.Param( + Nil, + Term.Name("index"), + Some(Type.Name("SemanticdbIndex")), + _ + ) + ) + ) + ) => patch += Patch.removeTokens(param.tokens) case defn @ Defn.Def( _, @@ -75,7 +82,8 @@ class Scalafixg8_v0_6 extends SyntacticRule("Scalafixg8_v0_6") { ctx @ Term.Name("ctx"), Some(ruleCtx @ Type.Name("RuleCtx")), None - )) + ) + ) ), Some(Type.Name("Patch")), _ @@ -151,11 +159,15 @@ class Scalafixg8_v0_6 extends SyntacticRule("Scalafixg8_v0_6") { ) case Importer(ref, importees) => val syntax = ref.syntax - if (syntax.startsWith("scala.meta.contrib") || - syntax.startsWith("scalafix.syntax")) { + if ( + syntax.startsWith("scala.meta.contrib") || + syntax.startsWith("scalafix.syntax") + ) { // do nothing - } else if (syntax.startsWith("org.langmeta.") || - syntax.startsWith("scala.meta.")) { + } else if ( + syntax.startsWith("org.langmeta.") || + syntax.startsWith("scala.meta.") + ) { addImporter(importer"scala.meta._", importees) } else if (syntax.startsWith("scalafix")) { addImporter(importer"scalafix.v1._", importees) diff --git a/migration-rules/v0.9.28/rules/src/main/scala/fix/v0_9_28.scala b/migration-rules/v0.9.28/rules/src/main/scala/fix/v0_9_28.scala index b7206d2..24cbb8f 100644 --- a/migration-rules/v0.9.28/rules/src/main/scala/fix/v0_9_28.scala +++ b/migration-rules/v0.9.28/rules/src/main/scala/fix/v0_9_28.scala @@ -11,7 +11,8 @@ class v0_9_28 extends SemanticRule("v0_9_28") { case t @ Importee.Name(Name("SemanticRuleSuite")) => Patch.removeImportee(t) + Patch.addGlobalImport( - importer"scalafix.testkit.AbstractSemanticRuleSuite") + importer"scalafix.testkit.AbstractSemanticRuleSuite" + ) case t @ init"SemanticRuleSuite(..$_)" => Patch.addGlobalImport(importer"org.scalatest.FunSuiteLike") + Patch.replaceTree(t, "AbstractSemanticRuleSuite with FunSuiteLike") diff --git a/scalafmt b/scalafmt index 3ba5a0ae1d1c6db5276163bf43ca01ea046f2748..872bb01cff4c5c8af54e07487e6c976e097d0530 100755 GIT binary patch literal 20543 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 XA;6mzSkN*s2m#?ERtAPT4-gLk7Wx>A literal 28226 zcmaHS19WD=mTo%i*tTukw(b0}`Ny`Cj%{>o+qRRAZKpeUedo@bd3R>Ld)7K@?NjU9 zRcF^er|PR+yGV%{-CUd*O|0x00ru`hE|xGZo-T&Q&K55GBqT7#j*kB&Tk$jV5_wo! z*#d}kiAcz-NQmhFie#ij`n*JD4lqPS0C!_sqQ9E_dSu>YR=$5rOpRUsBK{T;S=s-6 zBqE}hp{Jq#4~dBAzuO`EzakNt_g^q6y^Jr(e}Z^<|3mmMrT=~*vi~doM+5(Y2e=rU z{#CQ$C!?aWBBCW?rly85bFc@%zyN>%QzC0)cVnXeZj;{H*!izLOeB9R`cHFVlw`rc z(Lg}He+RM3YL>&b8V}6{0ReIP1_FWx0uCZCt|m+`tsucDFRUOfA+D;%ATRMb0Rj>m z&x;Vuge2xocD)O`rckWLkPJi3cDRV!*eA2we0lUq3_(I7CC!`p;@;9kpesd}hlHBM zxnGXpsS#rwfXt_xE9xmp&=-*zfhvjH14H;YHF^KTq7?)|*HyNk6D?Lq1;5UfZ5m|A z?kZl?A)YQXuQEp(ceSVkXP!0Otm!)8PlZODL^sw`<&J(mYeCcL5ulD5yT16m%P-l2 z@gFw9{Iv<>KWzGI&VOCde?XxRZi{BZ&)3zx0+g z2{dvPY;rnE;$acZZZWKzk1zf;O5(n0ChelwDG3Y7HHNVx5iJQN3FH2cfJKs-2(HOJ z@7E}A@h!@IUy>chT|Z>R+iC(=W7-+$*MMk_FCt7|slISApS4hsnaJ1g;Q|xmqg-!o z5sHrEicvtVp)xT(l6__5JdC^ah}j5WcIR6NEbg7Qf&k?%-(XZsL7v)vyD@i~*)3f5 z55@6eEE2hMyIA?m^X*sIObZWD*0A=%0DGt=$g_!-KkG}97Sovk-? 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 From 24e1158fee12ae52c73e5ebbfa2f6a2e4c865ece Mon Sep 17 00:00:00 2001 From: Brice Jaglin Date: Fri, 14 May 2021 23:00:08 +0200 Subject: [PATCH 4/7] scalafmt: relax exclusionFilter to format what can be formatted --- .scalafmt.conf | 2 +- src/main/g8/scalafix/build.sbt | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.scalafmt.conf b/.scalafmt.conf index 56b02b3..22a6331 100644 --- a/.scalafmt.conf +++ b/.scalafmt.conf @@ -2,7 +2,7 @@ version = 2.7.5 project.git = true assumeStandardLibraryStripMargin = true project.excludeFilters = [ - "main/g8" + "main/g8/.*/.*\\.scala" "output/src" "migration-rules/*" ] diff --git a/src/main/g8/scalafix/build.sbt b/src/main/g8/scalafix/build.sbt index 2c110e6..10aaedc 100644 --- a/src/main/g8/scalafix/build.sbt +++ b/src/main/g8/scalafix/build.sbt @@ -5,7 +5,9 @@ inThisBuild( crossScalaVersions := List(V.scala213, V.scala212, V.scala211), organization := "com.example", homepage := Some(url("https://github.com/com/example")), - licenses := List("Apache-2.0" -> url("http://www.apache.org/licenses/LICENSE-2.0")), + licenses := List( + "Apache-2.0" -> url("http://www.apache.org/licenses/LICENSE-2.0") + ), developers := List( Developer( "example-username", From 71a1160f5d0853a6c796d7e47208b3384bec0687 Mon Sep 17 00:00:00 2001 From: Brice Jaglin Date: Wed, 19 May 2021 14:05:05 +0200 Subject: [PATCH 5/7] Test Scala 3 input/output with Scala 2.12 rule by default Move to sbt-projectmatrix so that `sbt tests/test` checks * Scala 2.x input/output with Scala 2.x rule and * Scala 3 input/output with Scala 2.12 rule --- src/main/g8/default.properties | 2 +- src/main/g8/scalafix/build.sbt | 101 +++++++++++++----- .../$repo__Camel$SignificantIndentation.scala | 8 ++ .../$repo__Camel$SignificantIndentation.scala | 5 + src/main/g8/scalafix/project/TargetAxis.scala | 47 ++++++++ src/main/g8/scalafix/project/plugins.sbt | 1 + 6 files changed, 138 insertions(+), 26 deletions(-) create mode 100644 src/main/g8/scalafix/input/src/main/scala-3/fix/$repo__Camel$SignificantIndentation.scala create mode 100644 src/main/g8/scalafix/output/src/main/scala-3/fix/$repo__Camel$SignificantIndentation.scala create mode 100644 src/main/g8/scalafix/project/TargetAxis.scala diff --git a/src/main/g8/default.properties b/src/main/g8/default.properties index 0eded98..cbec792 100644 --- a/src/main/g8/default.properties +++ b/src/main/g8/default.properties @@ -1,2 +1,2 @@ -repo = My Repo +repo = scalafix-my-rules scalafix_version = maven(ch.epfl.scala, sbt-scalafix) diff --git a/src/main/g8/scalafix/build.sbt b/src/main/g8/scalafix/build.sbt index 10aaedc..2efaee2 100644 --- a/src/main/g8/scalafix/build.sbt +++ b/src/main/g8/scalafix/build.sbt @@ -1,8 +1,10 @@ lazy val V = _root_.scalafix.sbt.BuildInfo + +lazy val rulesCrossVersions = Seq(V.scala213, V.scala212, V.scala211) +lazy val scala3Version = "3.0.0" + inThisBuild( List( - scalaVersion := V.scala213, - crossScalaVersions := List(V.scala213, V.scala212, V.scala211), organization := "com.example", homepage := Some(url("https://github.com/com/example")), licenses := List( @@ -17,44 +19,93 @@ inThisBuild( ) ), semanticdbEnabled := true, - semanticdbVersion := scalafixSemanticdb.revision, - scalacOptions ++= List( - "-P:semanticdb:synthetics:on" - ) + semanticdbVersion := scalafixSemanticdb.revision ) ) -publish / skip := true +lazy val `$repo;format="normalize"$` = (project in file(".")) + .aggregate( + rules.projectRefs ++ + input.projectRefs ++ + output.projectRefs ++ + tests.projectRefs: _* + ) + .settings( + publish / skip := true + ) -lazy val rules = project.settings( - moduleName := "scalafix", - libraryDependencies += "ch.epfl.scala" %% "scalafix-core" % V.scalafixVersion -) +lazy val rules = projectMatrix + .settings( + moduleName := "scalafix", + libraryDependencies += "ch.epfl.scala" %% "scalafix-core" % V.scalafixVersion + ) + .defaultAxes(VirtualAxis.jvm) + .jvmPlatform(rulesCrossVersions) -lazy val input = project.settings( - publish / skip := true -) +lazy val input = projectMatrix + .settings( + publish / skip := true + ) + .defaultAxes(VirtualAxis.jvm) + .jvmPlatform( + scalaVersions = rulesCrossVersions, + settings = Seq( + scalacOptions += "-P:semanticdb:synthetics:on" + ) + ) + .jvmPlatform(scalaVersions = Seq(scala3Version)) -lazy val output = project.settings( - publish / skip := true -) +lazy val output = projectMatrix + .settings( + publish / skip := true + ) + .defaultAxes(VirtualAxis.jvm) + .jvmPlatform(scalaVersions = rulesCrossVersions :+ scala3Version) + +lazy val testsAggregate = Project("tests", file("target/testsAggregate")) + .aggregate(tests.projectRefs: _*) -lazy val tests = project +lazy val tests = projectMatrix .settings( publish / skip := true, libraryDependencies += "ch.epfl.scala" % "scalafix-testkit" % V.scalafixVersion % Test cross CrossVersion.full, - Compile / compile := - (Compile / compile).dependsOn(input / Compile / compile).value, scalafixTestkitOutputSourceDirectories := - (output / Compile / unmanagedSourceDirectories).value, + TargetAxis + .resolve(output, Compile / unmanagedSourceDirectories) + .value, scalafixTestkitInputSourceDirectories := - (input / Compile / unmanagedSourceDirectories).value, + TargetAxis + .resolve(input, Compile / unmanagedSourceDirectories) + .value, scalafixTestkitInputClasspath := - (input / Compile / fullClasspath).value, + TargetAxis.resolve(input, Compile / fullClasspath).value, scalafixTestkitInputScalacOptions := - (input / Compile / scalacOptions).value, + TargetAxis.resolve(input, Compile / scalacOptions).value, scalafixTestkitInputScalaVersion := - (input / Compile / scalaVersion).value + TargetAxis.resolve(input, Compile / scalaVersion).value + ) + .defaultAxes( + rulesCrossVersions.map(VirtualAxis.scalaABIVersion) :+ VirtualAxis.jvm: _* + ) + .customRow( + scalaVersions = Seq(V.scala212), + axisValues = Seq(TargetAxis(scala3Version), VirtualAxis.jvm), + settings = Seq() + ) + .customRow( + scalaVersions = Seq(V.scala213), + axisValues = Seq(TargetAxis(V.scala213), VirtualAxis.jvm), + settings = Seq() + ) + .customRow( + scalaVersions = Seq(V.scala212), + axisValues = Seq(TargetAxis(V.scala212), VirtualAxis.jvm), + settings = Seq() + ) + .customRow( + scalaVersions = Seq(V.scala211), + axisValues = Seq(TargetAxis(V.scala211), VirtualAxis.jvm), + settings = Seq() ) .dependsOn(rules) .enablePlugins(ScalafixTestkitPlugin) diff --git a/src/main/g8/scalafix/input/src/main/scala-3/fix/$repo__Camel$SignificantIndentation.scala b/src/main/g8/scalafix/input/src/main/scala-3/fix/$repo__Camel$SignificantIndentation.scala new file mode 100644 index 0000000..f53b7c9 --- /dev/null +++ b/src/main/g8/scalafix/input/src/main/scala-3/fix/$repo__Camel$SignificantIndentation.scala @@ -0,0 +1,8 @@ +/* +rule = $repo;format="Camel"$ +*/ +package fix + +object $repo;format="Camel"$SignificantIndentation: + val a = 1 + // Add code that needs fixing here. diff --git a/src/main/g8/scalafix/output/src/main/scala-3/fix/$repo__Camel$SignificantIndentation.scala b/src/main/g8/scalafix/output/src/main/scala-3/fix/$repo__Camel$SignificantIndentation.scala new file mode 100644 index 0000000..f4500f9 --- /dev/null +++ b/src/main/g8/scalafix/output/src/main/scala-3/fix/$repo__Camel$SignificantIndentation.scala @@ -0,0 +1,5 @@ +package fix + +object $repo;format="Camel"$SignificantIndentation: + val a = 1 + // Add code that needs fixing here. diff --git a/src/main/g8/scalafix/project/TargetAxis.scala b/src/main/g8/scalafix/project/TargetAxis.scala new file mode 100644 index 0000000..1375b2e --- /dev/null +++ b/src/main/g8/scalafix/project/TargetAxis.scala @@ -0,0 +1,47 @@ +import sbt._ +import sbt.internal.ProjectMatrix +import sbtprojectmatrix.ProjectMatrixPlugin.autoImport._ + +/** Use on ProjectMatrix rows to tag an affinity to a custom scalaVersion */ +case class TargetAxis(scalaVersion: String) extends VirtualAxis.WeakAxis { + + private val scalaBinaryVersion = CrossVersion.binaryScalaVersion(scalaVersion) + + override val idSuffix = s"Target\${scalaBinaryVersion.replace('.', '_')}" + override val directorySuffix = s"target\$scalaBinaryVersion" +} + +object TargetAxis { + + private def targetScalaVersion(virtualAxes: Seq[VirtualAxis]): String = + virtualAxes.collectFirst { case a: TargetAxis => a.scalaVersion }.get + + /** When invoked on a ProjectMatrix with a TargetAxis, lookup the project + * generated by `matrix` with a scalaVersion matching the one declared in + * that TargetAxis, and resolve `key`. + */ + def resolve[T]( + matrix: ProjectMatrix, + key: TaskKey[T] + ): Def.Initialize[Task[T]] = + Def.taskDyn { + val sv = targetScalaVersion(virtualAxes.value) + val project = matrix.finder().apply(sv) + Def.task((project / key).value) + } + + /** When invoked on a ProjectMatrix with a TargetAxis, lookup the project + * generated by `matrix` with a scalaVersion matching the one declared in + * that TargetAxis, and resolve `key`. + */ + def resolve[T]( + matrix: ProjectMatrix, + key: SettingKey[T] + ): Def.Initialize[T] = + Def.settingDyn { + val sv = targetScalaVersion(virtualAxes.value) + val project = matrix.finder().apply(sv) + Def.setting((project / key).value) + } + +} diff --git a/src/main/g8/scalafix/project/plugins.sbt b/src/main/g8/scalafix/project/plugins.sbt index d536229..4ae377c 100644 --- a/src/main/g8/scalafix/project/plugins.sbt +++ b/src/main/g8/scalafix/project/plugins.sbt @@ -1,2 +1,3 @@ resolvers += Resolver.sonatypeRepo("releases") addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "$scalafix_version$") +addSbtPlugin("com.eed3si9n" % "sbt-projectmatrix" % "0.8.0") From 625fd9643984d7dbebe80fbbcd0973aacb73a9df Mon Sep 17 00:00:00 2001 From: Brice Jaglin Date: Thu, 20 May 2021 12:35:22 +0200 Subject: [PATCH 6/7] remove `-P:semanticdb:synthetics:on` by default As it only works with Scala 2.x, the few rule authors relying on it would have to disable Scala 3 testing which is on by default, so we'd better make it an opt-in rather than an opt-out. --- src/main/g8/scalafix/build.sbt | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/main/g8/scalafix/build.sbt b/src/main/g8/scalafix/build.sbt index 2efaee2..c570de1 100644 --- a/src/main/g8/scalafix/build.sbt +++ b/src/main/g8/scalafix/build.sbt @@ -47,13 +47,7 @@ lazy val input = projectMatrix publish / skip := true ) .defaultAxes(VirtualAxis.jvm) - .jvmPlatform( - scalaVersions = rulesCrossVersions, - settings = Seq( - scalacOptions += "-P:semanticdb:synthetics:on" - ) - ) - .jvmPlatform(scalaVersions = Seq(scala3Version)) + .jvmPlatform(scalaVersions = rulesCrossVersions :+ scala3Version) lazy val output = projectMatrix .settings( From ee98b06db0f3726a550c90cf15152eccc3017ceb Mon Sep 17 00:00:00 2001 From: Brice Jaglin Date: Fri, 21 May 2021 06:49:38 +0200 Subject: [PATCH 7/7] hardcode latest version for default as search.maven.org is stale --- src/main/g8/default.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/g8/default.properties b/src/main/g8/default.properties index cbec792..0f21c9b 100644 --- a/src/main/g8/default.properties +++ b/src/main/g8/default.properties @@ -1,2 +1,2 @@ repo = scalafix-my-rules -scalafix_version = maven(ch.epfl.scala, sbt-scalafix) +scalafix_version = 0.9.28