Skip to content

Commit

Permalink
Merge pull request #219 from bjaglin/scala3-testkit
Browse files Browse the repository at this point in the history
Support Scala 3 in ScalafixTestkitPlugin
  • Loading branch information
github-brice-jaglin authored May 17, 2021
2 parents 429e618 + 476d242 commit 56c9bf9
Show file tree
Hide file tree
Showing 24 changed files with 139 additions and 157 deletions.
6 changes: 6 additions & 0 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,12 @@ commands += Command.command("ci-windows") { s =>
// Dependencies
resolvers += Resolver.sonatypeRepo("public")
libraryDependencies ++= Dependencies.all
libraryDependencies ++= Dependencies.sbt1Plugins.flatMap { plugin =>
val sbtV = (sbtBinaryVersion in pluginCrossBuild).value
val scalaV = (scalaBinaryVersion in update).value
if (sbtV.startsWith("0.13")) Nil
else Seq(sbt.Defaults.sbtPluginExtra(plugin, sbtV, scalaV))
}
libraryDependencies ++= List(
"com.lihaoyi" %% "fansi" % "0.2.6" % Test,
"org.scalatest" %% "scalatest" % "3.2.9" % Test
Expand Down
6 changes: 5 additions & 1 deletion project/Dependencies.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import sbt._

object Dependencies {
val x = List(1) // scalafix:ok
def scalafixVersion: String = "0.9.27+52-6c9eeec9-SNAPSHOT"
def scalafixVersion: String = "0.9.27+78-f41dec8f-SNAPSHOT"

val all = List(
"org.eclipse.jgit" % "org.eclipse.jgit" % "5.11.1.202105131744-r",
Expand All @@ -13,4 +13,8 @@ object Dependencies {
"com.geirsson" %% "coursier-small" % "1.3.3",
"io.get-coursier" % "interface" % "1.0.4"
)

val sbt1Plugins = List(
"com.eed3si9n" % "sbt-projectmatrix" % "0.8.0"
)
}
6 changes: 6 additions & 0 deletions project/plugins.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,9 @@ unmanagedSourceDirectories.in(Compile) ++= {
)
}
libraryDependencies ++= Dependencies.all
libraryDependencies ++= Dependencies.sbt1Plugins.flatMap { plugin =>
val sbtV = (sbtBinaryVersion in pluginCrossBuild).value
val scalaV = (scalaBinaryVersion in update).value
if (sbtV.startsWith("0.13")) Nil
else Seq(sbt.Defaults.sbtPluginExtra(plugin, sbtV, scalaV))
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,51 @@
package scalafix.sbt

import sbt.Def
import sbt._
import sbt.Keys._
import java.io.File.pathSeparator
import sbt._
import sbt.internal.ProjectMatrix
import sbt.plugins.JvmPlugin
import sbtprojectmatrix.ProjectMatrixPlugin.autoImport._

import java.io.File.pathSeparator

object ScalafixTestkitPlugin extends AutoPlugin {
override def trigger: PluginTrigger = noTrigger
override def requires: Plugins = JvmPlugin

object autoImport {
case class InputAxis(scalaVersion: String) extends VirtualAxis.WeakAxis {
private val scalaBinaryVersion =
CrossVersion.binaryScalaVersion(scalaVersion)

override val idSuffix = s"Input${scalaBinaryVersion.replace('.', '_')}"
override val directorySuffix = s"input$scalaBinaryVersion"
}

object InputAxis {
def inputScalaVersion(virtualAxes: Seq[VirtualAxis]): String =
virtualAxes.collectFirst { case a: InputAxis => a.scalaVersion }.get
}

def resolveByInputAxis[T](
matrix: ProjectMatrix,
key: TaskKey[T]
): Def.Initialize[Task[T]] =
Def.taskDyn {
val sv = InputAxis.inputScalaVersion(virtualAxes.value)
val project = matrix.finder().apply(sv)
Def.task((project / key).value)
}

def resolveByInputAxis[T](
matrix: ProjectMatrix,
key: SettingKey[T]
): Def.Initialize[T] =
Def.settingDyn {
val sv = InputAxis.inputScalaVersion(virtualAxes.value)
val project = matrix.finder().apply(sv)
Def.setting((project / key).value)
}

val scalafixTestkitInputClasspath =
taskKey[Classpath]("Classpath of input project")
val scalafixTestkitInputScalacOptions =
Expand Down Expand Up @@ -38,16 +74,11 @@ object ScalafixTestkitPlugin extends AutoPlugin {
scalafixTestkitInputScalaVersion := scalaVersion.value,
resourceGenerators.in(Test) += Def.task {
val props = new java.util.Properties()
val targetrootClasspath = semanticdbOption(
scalafixTestkitInputScalacOptions.value,
"targetroot"
).map(file).toSeq
val values = Map[String, Seq[File]](
"sourceroot" ->
List(baseDirectory.in(ThisBuild).value),
"inputClasspath" ->
(scalafixTestkitInputClasspath.value
.map(_.data) ++ targetrootClasspath),
scalafixTestkitInputClasspath.value.map(_.data),
"inputSourceDirectories" ->
scalafixTestkitInputSourceDirectories.value,
"outputSourceDirectories" ->
Expand All @@ -71,15 +102,4 @@ object ScalafixTestkitPlugin extends AutoPlugin {
List(out)
}
)

private def semanticdbOption(
scalacOptions: Seq[String],
name: String
): Option[String] = {
val flag = s"-P:semanticdb:$name:"
scalacOptions
.filter(_.startsWith(flag))
.lastOption
.map(_.stripPrefix(flag))
}
}
38 changes: 0 additions & 38 deletions src/sbt-test/sbt-1.3/testkit/build.sbt

This file was deleted.

1 change: 0 additions & 1 deletion src/sbt-test/sbt-1.3/testkit/project/build.properties

This file was deleted.

3 changes: 0 additions & 3 deletions src/sbt-test/sbt-1.3/testkit/test

This file was deleted.

78 changes: 78 additions & 0 deletions src/sbt-test/sbt-1.5/testkit/build.sbt
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
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(
semanticdbEnabled := true,
semanticdbVersion := scalafixSemanticdb.revision
)
)

lazy val rules = projectMatrix
.settings(
libraryDependencies += "ch.epfl.scala" %% "scalafix-core" % V.scalafixVersion
)
.defaultAxes(VirtualAxis.jvm)
.jvmPlatform(rulesCrossVersions)

lazy val input = projectMatrix
.defaultAxes(VirtualAxis.jvm)
.jvmPlatform(
scalaVersions = rulesCrossVersions,
settings = Seq(
scalacOptions += "-P:semanticdb:synthetics:on"
)
)
.jvmPlatform(scalaVersions = Seq(scala3Version))

lazy val output = projectMatrix
.defaultAxes(VirtualAxis.jvm)
.jvmPlatform(scalaVersions = rulesCrossVersions :+ scala3Version)

lazy val testsAggregate = Project("tests", file("tests/aggregate"))
.aggregate(tests.projectRefs: _*)

lazy val tests = projectMatrix
.settings(
libraryDependencies += "ch.epfl.scala" % "scalafix-testkit" % V.scalafixVersion % Test cross CrossVersion.full,
scalafixTestkitOutputSourceDirectories :=
resolveByInputAxis(output, Compile / unmanagedSourceDirectories).value,
scalafixTestkitInputSourceDirectories :=
resolveByInputAxis(
input,
Compile / unmanagedSourceDirectories
).value.distinct, // https://github.com/sbt/sbt/pull/6511
scalafixTestkitInputClasspath :=
resolveByInputAxis(input, Compile / fullClasspath).value,
scalafixTestkitInputScalacOptions :=
resolveByInputAxis(input, Compile / scalacOptions).value,
scalafixTestkitInputScalaVersion :=
resolveByInputAxis(input, Compile / scalaVersion).value
)
.defaultAxes(
rulesCrossVersions.map(VirtualAxis.scalaABIVersion) :+ VirtualAxis.jvm: _*
)
.customRow(
scalaVersions = Seq(V.scala212),
axisValues = Seq(InputAxis(scala3Version), VirtualAxis.jvm),
settings = Seq()
)
.customRow(
scalaVersions = Seq(V.scala213),
axisValues = Seq(InputAxis(V.scala213), VirtualAxis.jvm),
settings = Seq()
)
.customRow(
scalaVersions = Seq(V.scala212),
axisValues = Seq(InputAxis(V.scala212), VirtualAxis.jvm),
settings = Seq()
)
.customRow(
scalaVersions = Seq(V.scala211),
axisValues = Seq(InputAxis(V.scala211), VirtualAxis.jvm),
settings = Seq()
)
.dependsOn(rules)
.enablePlugins(ScalafixTestkitPlugin)
1 change: 1 addition & 0 deletions src/sbt-test/sbt-1.5/testkit/project/build.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
sbt.version=1.5.2
3 changes: 3 additions & 0 deletions src/sbt-test/sbt-1.5/testkit/test
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
-> tests/test
> testsInput3/test:run --save-expect
> tests/test
34 changes: 0 additions & 34 deletions src/sbt-test/sbt-scalafix/testkit/build.sbt

This file was deleted.

This file was deleted.

This file was deleted.

2 changes: 0 additions & 2 deletions src/sbt-test/sbt-scalafix/testkit/project/plugins.sbt

This file was deleted.

This file was deleted.

This file was deleted.

3 changes: 0 additions & 3 deletions src/sbt-test/sbt-scalafix/testkit/test

This file was deleted.

This file was deleted.

0 comments on commit 56c9bf9

Please sign in to comment.