From f9a9991687d6aa70e50ff2ec5ad4d9e039b7f723 Mon Sep 17 00:00:00 2001 From: Guillaume Martres Date: Mon, 9 Sep 2019 19:58:15 +0200 Subject: Properly support Dotty >= 0.18.1 (#682) Dotty now uses the 2.13 standard library, so `withDottyCompat` needs to use the correct suffix depending on the Dotty version. --- scalalib/api/src/ZincWorkerApi.scala | 11 ++++++----- scalalib/src/Dep.scala | 19 +++++++++++++++++-- scalalib/test/resources/dotty213/foo/src/Main.scala | 6 ++++++ scalalib/test/src/HelloWorldTests.scala | 15 +++++++++++++++ 4 files changed, 44 insertions(+), 7 deletions(-) create mode 100644 scalalib/test/resources/dotty213/foo/src/Main.scala diff --git a/scalalib/api/src/ZincWorkerApi.scala b/scalalib/api/src/ZincWorkerApi.scala index 418b18c6..53a98c24 100644 --- a/scalalib/api/src/ZincWorkerApi.scala +++ b/scalalib/api/src/ZincWorkerApi.scala @@ -64,11 +64,12 @@ object Util { .getOrElse(throw new Exception(s"Cannot find $mavenStylePath or $ivyStylePath in ${classPath.mkString("[", ", ", "]")}")) } - private val ReleaseVersion = raw"""(\d+)\.(\d+)\.(\d+)""".r - private val MinorSnapshotVersion = raw"""(\d+)\.(\d+)\.([1-9]\d*)-SNAPSHOT""".r - private val DottyVersion = raw"""(0|3)\.(\d+)\.(\d+).*""".r - private val DottyNightlyVersion = raw"""(0|3)\.(\d+)\.(\d+)-bin-(.*)-NIGHTLY""".r - private val TypelevelVersion = raw"""(\d+)\.(\d+)\.(\d+)-bin-typelevel.*""".r + val PartialVersion = raw"""(\d+)\.(\d+)\.*""".r + val ReleaseVersion = raw"""(\d+)\.(\d+)\.(\d+)""".r + val MinorSnapshotVersion = raw"""(\d+)\.(\d+)\.([1-9]\d*)-SNAPSHOT""".r + val DottyVersion = raw"""(0|3)\.(\d+)\.(\d+).*""".r + val DottyNightlyVersion = raw"""(0|3)\.(\d+)\.(\d+)-bin-(.*)-NIGHTLY""".r + val TypelevelVersion = raw"""(\d+)\.(\d+)\.(\d+)-bin-typelevel.*""".r def scalaBinaryVersion(scalaVersion: String) = scalaVersion match { diff --git a/scalalib/src/Dep.scala b/scalalib/src/Dep.scala index a6c77bfc..8429829c 100644 --- a/scalalib/src/Dep.scala +++ b/scalalib/src/Dep.scala @@ -5,7 +5,7 @@ import upickle.default.{macroRW, ReadWriter => RW} import CrossVersion._ case class Dep(dep: coursier.Dependency, cross: CrossVersion, force: Boolean) { - import mill.scalalib.api.Util.isDotty + import mill.scalalib.api.Util.{isDotty, DottyVersion} def artifactName(binaryVersion: String, fullVersion: String, platformSuffix: String) = { val suffix = cross.suffixString(binaryVersion, fullVersion, platformSuffix) @@ -56,7 +56,22 @@ case class Dep(dep: coursier.Dependency, cross: CrossVersion, force: Boolean) { def withDottyCompat(scalaVersion: String): Dep = cross match { case cross: Binary if isDotty(scalaVersion) => - copy(cross = Constant(value = "_2.12", platformed = cross.platformed)) + val compatSuffix = + scalaVersion match { + case DottyVersion("3", _) => + "_2.13" + case DottyVersion("0", minor, patch) => + if (minor.toInt > 18 || minor.toInt == 18 && patch.toInt >= 1) + "_2.13" + else + "_2.12" + case _ => + "" + } + if (compatSuffix.nonEmpty) + copy(cross = Constant(value = compatSuffix, platformed = cross.platformed)) + else + this case _ => this } diff --git a/scalalib/test/resources/dotty213/foo/src/Main.scala b/scalalib/test/resources/dotty213/foo/src/Main.scala new file mode 100644 index 00000000..653e65fd --- /dev/null +++ b/scalalib/test/resources/dotty213/foo/src/Main.scala @@ -0,0 +1,6 @@ +object Main { + def main(args: Array[String]): Unit = { + assert(collection.immutable.ArraySeq(1).toString == "ArraySeq(1)") + assert(scala.xml.Node.EmptyNamespace == "") + } +} diff --git a/scalalib/test/src/HelloWorldTests.scala b/scalalib/test/src/HelloWorldTests.scala index 957709eb..80beb6b1 100644 --- a/scalalib/test/src/HelloWorldTests.scala +++ b/scalalib/test/src/HelloWorldTests.scala @@ -270,6 +270,13 @@ object HelloWorldTests extends TestSuite { } } + object Dotty213 extends HelloBase { + object foo extends ScalaModule { + def scalaVersion = "0.18.1-RC1" + def ivyDeps = Agg(ivy"org.scala-lang.modules::scala-xml:1.2.0".withDottyCompat(scalaVersion())) + } + } + val resourcePath = os.pwd / 'scalalib / 'test / 'resources / "hello-world" def jarMainClass(jar: JarFile): Option[String] = { @@ -935,5 +942,13 @@ object HelloWorldTests extends TestSuite { assert(evalCount > 0) } } + + 'dotty213 - workspaceTest( + Dotty213, + resourcePath = os.pwd / 'scalalib / 'test / 'resources / "dotty213" + ){ eval => + val Right((_, evalCount)) = eval.apply(Dotty213.foo.run()) + assert(evalCount > 0) + } } } -- cgit v1.2.3