From dfb97cfe666a60b68399ca29205f0ad205bd641c Mon Sep 17 00:00:00 2001 From: Meriam Lachkar Date: Wed, 12 May 2021 15:05:54 +0200 Subject: [PATCH] Add a migration rule to help migration to 0.9.28 --- build.sbt | 39 +++++++++++++++++++ .../src/main/scala/fix/OldSemanticRule.scala | 10 +++++ .../src/main/scala/fix/OldSemanticRule.scala | 8 ++++ .../META-INF/services/scalafix.v1.Rule | 1 + .../rules/src/main/scala/fix/v0_9_28.scala | 22 +++++++++++ .../tests/src/test/scala/fix/RuleSuite.scala | 8 ++++ 6 files changed, 88 insertions(+) create mode 100644 migration/input/src/main/scala/fix/OldSemanticRule.scala create mode 100644 migration/output/src/main/scala/fix/OldSemanticRule.scala create mode 100644 migration/rules/src/main/resources/META-INF/services/scalafix.v1.Rule create mode 100644 migration/rules/src/main/scala/fix/v0_9_28.scala create mode 100644 migration/tests/src/test/scala/fix/RuleSuite.scala diff --git a/build.sbt b/build.sbt index 054868f1e..57e827bfc 100644 --- a/build.sbt +++ b/build.sbt @@ -277,3 +277,42 @@ lazy val docs = project .dependsOn(testkit, core, cli) .enablePlugins(DocusaurusPlugin) .disablePlugins(ScalafixPlugin) + +lazy val `migration-rules` = project + .in(file("migration/rules")) + .settings( + libraryDependencies += "ch.epfl.scala" %% "scalafix-core" % "0.9.27" + ) + +lazy val `migration-input` = project + .in(file("migration/input")) + .settings( + (publish / skip) := true, + libraryDependencies += "ch.epfl.scala" % "scalafix-testkit" % "0.9.27" cross CrossVersion.full + ) + +lazy val `migration-output` = project + .in(file("migration/output")) + .settings( + (publish / skip) := true, + libraryDependencies += "ch.epfl.scala" % "scalafix-testkit" % "0.9.27" cross CrossVersion.full + ) + +lazy val `migration-tests` = project + .in(file("migration/tests")) + .settings( + (publish / skip) := true, + libraryDependencies += "ch.epfl.scala" % "scalafix-testkit" % "0.9.27" % Test cross CrossVersion.full, + (Compile / compile) := + (Compile / compile) + .dependsOn((`migration-input` / Compile / compile)) + .value, + scalafixTestkitOutputSourceDirectories := + (`migration-output` / Compile / unmanagedSourceDirectories).value, + scalafixTestkitInputSourceDirectories := + (`migration-input` / Compile / unmanagedSourceDirectories).value, + scalafixTestkitInputClasspath := + (`migration-input` / Compile / fullClasspath).value + ) + .dependsOn(`migration-rules`) + .enablePlugins(ScalafixTestkitPlugin) diff --git a/migration/input/src/main/scala/fix/OldSemanticRule.scala b/migration/input/src/main/scala/fix/OldSemanticRule.scala new file mode 100644 index 000000000..a9f2f1fc4 --- /dev/null +++ b/migration/input/src/main/scala/fix/OldSemanticRule.scala @@ -0,0 +1,10 @@ +/* +rule = v0_9_28 + */ +package fix + +import scalafix.testkit.SemanticRuleSuite + +class OldSemanticRule extends SemanticRuleSuite() { + runAllTests() +} diff --git a/migration/output/src/main/scala/fix/OldSemanticRule.scala b/migration/output/src/main/scala/fix/OldSemanticRule.scala new file mode 100644 index 000000000..d70525666 --- /dev/null +++ b/migration/output/src/main/scala/fix/OldSemanticRule.scala @@ -0,0 +1,8 @@ +package fix + +import org.scalatest.FunSuiteLike +import scalafix.testkit.AbstractSemanticRuleSuite + +class OldSemanticRule extends AbstractSemanticRuleSuite with FunSuiteLike { + runAllTests() +} diff --git a/migration/rules/src/main/resources/META-INF/services/scalafix.v1.Rule b/migration/rules/src/main/resources/META-INF/services/scalafix.v1.Rule new file mode 100644 index 000000000..efb177540 --- /dev/null +++ b/migration/rules/src/main/resources/META-INF/services/scalafix.v1.Rule @@ -0,0 +1 @@ +fix.v0_9_28 diff --git a/migration/rules/src/main/scala/fix/v0_9_28.scala b/migration/rules/src/main/scala/fix/v0_9_28.scala new file mode 100644 index 000000000..72db731a9 --- /dev/null +++ b/migration/rules/src/main/scala/fix/v0_9_28.scala @@ -0,0 +1,22 @@ +package fix + +import scala.meta._ + +import scalafix.v1._ + +class v0_9_28 extends SemanticRule("v0_9_28") { + override def fix(implicit doc: SemanticDocument): Patch = + doc.tree.collect { + case t @ Importee.Name(Name("SemanticRuleSuite")) => + Patch.removeImportee(t) + + Patch.addGlobalImport( + importer"scalafix.testkit.AbstractSemanticRuleSuite" + ) + case t @ Init(_, _, _) => + if (t.toString() == "SemanticRuleSuite()") + Patch.addGlobalImport(importer"org.scalatest.FunSuiteLike") + + Patch.replaceTree(t, "AbstractSemanticRuleSuite") + + Patch.addRight(t, " with FunSuiteLike") + else Patch.empty + }.asPatch +} diff --git a/migration/tests/src/test/scala/fix/RuleSuite.scala b/migration/tests/src/test/scala/fix/RuleSuite.scala new file mode 100644 index 000000000..22fb678da --- /dev/null +++ b/migration/tests/src/test/scala/fix/RuleSuite.scala @@ -0,0 +1,8 @@ +package fix + +import org.scalatest.FunSuiteLike +import scalafix.testkit.AbstractSemanticRuleSuite + +class RuleSuite extends AbstractSemanticRuleSuite with FunSuiteLike { + runAllTests() +}