From 59daaa946e579853000ac0b6680203768de77c6d Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Tue, 2 Jan 2018 22:49:38 -0800 Subject: Swap over to new `CrossModule` class to simplify the cross module syntax --- build.sc | 5 ++--- core/src/main/scala/mill/define/Cross.scala | 3 +++ core/src/main/scala/mill/discover/Discovered.scala | 3 ++- core/src/main/scala/mill/package.scala | 1 + integration/src/test/resource/acyclic/build.sc | 9 +++++---- integration/src/test/resource/better-files/build.sc | 13 +++++++++---- integration/src/test/resource/jawn/build.sc | 11 +++++------ .../src/test/scala/mill/integration/AcyclicTests.scala | 3 --- 8 files changed, 27 insertions(+), 21 deletions(-) diff --git a/build.sc b/build.sc index 4b8b8282..b4f6e2e1 100755 --- a/build.sc +++ b/build.sc @@ -97,9 +97,8 @@ object core extends MillModule { val bridgeVersions = Seq("2.10.6", "2.11.8", "2.11.11", "2.12.3", "2.12.4") -val bridges = for{ - crossVersion <- mill.define.Cross(bridgeVersions:_*) -} yield new PublishModule { +object bridges extends CrossModule(BridgeModule, bridgeVersions:_*) +case class BridgeModule(crossVersion: String) extends PublishModule { def publishName = "mill-bridge" def publishVersion = "0.1" diff --git a/core/src/main/scala/mill/define/Cross.scala b/core/src/main/scala/mill/define/Cross.scala index 85341d12..55d7b59c 100644 --- a/core/src/main/scala/mill/define/Cross.scala +++ b/core/src/main/scala/mill/define/Cross.scala @@ -25,3 +25,6 @@ case class Cross[+T](items: List[(List[Any], T)]){ object Cross{ def apply[T](t: T*) = new Cross(t.map(i => List(i) -> i).toList) } + +class CrossModule[T, V](constructor: T => V, cases: T*) +extends Cross[V](cases.toList.map(x => (List(x), constructor(x)))) \ No newline at end of file diff --git a/core/src/main/scala/mill/discover/Discovered.scala b/core/src/main/scala/mill/discover/Discovered.scala index cef0d193..9528a310 100644 --- a/core/src/main/scala/mill/discover/Discovered.scala +++ b/core/src/main/scala/mill/discover/Discovered.scala @@ -98,7 +98,8 @@ object Discovered { val crossChildren = if (!(t <:< c.weakTypeOf[Cross[Module]])) q"None" else { - val TypeRef(_, _, Seq(arg)) = t + + val TypeRef(_, _, Seq(arg)) = t.baseType(typeOf[Cross[Module]].typeSymbol) val innerMirror = rec(None :: segments, arg) q"Some(((c: mill.define.Cross[_]) => mill.discover.Discovered.tupleLeft(c.items), $innerMirror))" } diff --git a/core/src/main/scala/mill/package.scala b/core/src/main/scala/mill/package.scala index 7dcb83d8..b7332f9e 100644 --- a/core/src/main/scala/mill/package.scala +++ b/core/src/main/scala/mill/package.scala @@ -6,4 +6,5 @@ package object mill extends JsonFormatters{ val PathRef = mill.eval.PathRef type PathRef = mill.eval.PathRef type Module = define.Task.Module + type CrossModule[T, V] = define.CrossModule[T, V] } diff --git a/integration/src/test/resource/acyclic/build.sc b/integration/src/test/resource/acyclic/build.sc index 603f8f06..ec338e9f 100644 --- a/integration/src/test/resource/acyclic/build.sc +++ b/integration/src/test/resource/acyclic/build.sc @@ -1,9 +1,10 @@ import mill.define.Cross +import mill.CrossModule import mill.scalalib.{SbtModule, PublishModule, Dep} import mill.scalalib.publish.{PomSettings, License, Developer, SCM} -val acyclic = for{ - crossVersion <- Cross("2.10.6", "2.11.8", "2.12.3", "2.12.4") -} yield new SbtModule with PublishModule {outer => + +object acyclic extends CrossModule(AcyclicModule, "2.10.6", "2.11.8", "2.12.3", "2.12.4") +case class AcyclicModule(crossVersion: String) extends SbtModule with PublishModule { def basePath = ammonite.ops.pwd / 'target / 'workspace / 'acyclic def artifactName = "acyclic" def publishVersion = "0.1.7" @@ -28,7 +29,7 @@ val acyclic = for{ def ivyDeps = Seq( Dep.Java("org.scala-lang", "scala-compiler", scalaVersion()) ) - object test extends this.Tests{ + object test extends Tests{ def forkWorkingDir = ammonite.ops.pwd / 'target / 'workspace / 'acyclic def ivyDeps = Seq( Dep("com.lihaoyi", "utest", "0.6.0") diff --git a/integration/src/test/resource/better-files/build.sc b/integration/src/test/resource/better-files/build.sc index 2b3f7473..bfb7f89c 100644 --- a/integration/src/test/resource/better-files/build.sc +++ b/integration/src/test/resource/better-files/build.sc @@ -1,7 +1,8 @@ import mill.define.Cross import mill.scalalib.{SbtModule, PublishModule, Dep} import mill.scalalib.publish.{PomSettings, License, Developer, SCM} -trait BetterFilesModule extends SbtModule{ outer => + +trait BetterFilesModule extends SbtModule{ def scalaVersion = "2.12.4" def scalacOptions = Seq( "-deprecation", // Emit warning and location for usages of deprecated APIs. @@ -51,27 +52,31 @@ trait BetterFilesModule extends SbtModule{ outer => "-Ywarn-value-discard" // Warn when non-Unit expression results are unused. ) override def javacOptions = Seq("-source", "1.8", "-target", "1.8", "-Xlint") - object test extends this.Tests{ + object test extends Tests{ def projectDeps = - if (this == core.test) Seq(core) - else Seq(outer, core.test) + if (this == core.test) super.projectDeps + else super.projectDeps ++ Seq(core.test) def ivyDeps = Seq(Dep("org.scalatest", "scalatest", "3.0.4")) def testFramework = "org.scalatest.tools.Framework" } } + object core extends BetterFilesModule{ def basePath = ammonite.ops.pwd / 'target / 'workspace / "better-files" / 'core } + object akka extends BetterFilesModule{ def projectDeps = Seq(core) def basePath = ammonite.ops.pwd / 'target / 'workspace / "better-files" / 'akka def ivyDeps = Seq(Dep("com.typesafe.akka", "akka-actor", "2.5.6")) } + object shapelessScanner extends BetterFilesModule{ def projectDeps = Seq(core) def basePath = ammonite.ops.pwd / 'target / 'workspace / "better-files" / 'shapeless def ivyDeps = Seq(Dep("com.chuusai", "shapeless", "2.3.2")) } + object benchmarks extends BetterFilesModule{ def projectDeps = Seq(core) def basePath = ammonite.ops.pwd / 'target / 'workspace / "better-files" / 'benchmarks diff --git a/integration/src/test/resource/jawn/build.sc b/integration/src/test/resource/jawn/build.sc index 60faf70b..75dfeaa1 100644 --- a/integration/src/test/resource/jawn/build.sc +++ b/integration/src/test/resource/jawn/build.sc @@ -1,11 +1,10 @@ import mill.scalalib -import mill.define.Cross +import mill.CrossModule import mill.scalalib.{Dep, TestModule, Module} -val jawn = for{ - crossVersion <- Cross("2.10.6", "2.11.11", "2.12.3") -} yield new mill.Module{ - trait JawnModule extends scalalib.SbtModule{ outer => +object jawn extends CrossModule(JawnModule, "2.10.6", "2.11.11", "2.12.3") +case class JawnModule(crossVersion: String) extends mill.Module{ + trait JawnModule extends scalalib.SbtModule{ def scalaVersion = crossVersion def scalacOptions = Seq( "-deprecation", @@ -13,7 +12,7 @@ val jawn = for{ "-unchecked" ) def testProjectDeps: Seq[TestModule] = Nil - object test extends this.Tests{ + object test extends Tests{ def projectDeps = super.projectDeps ++ testProjectDeps def ivyDeps = Seq( Dep("org.scalatest", "scalatest", "3.0.3"), diff --git a/integration/src/test/scala/mill/integration/AcyclicTests.scala b/integration/src/test/scala/mill/integration/AcyclicTests.scala index cd7209d5..42b5179b 100644 --- a/integration/src/test/scala/mill/integration/AcyclicTests.scala +++ b/integration/src/test/scala/mill/integration/AcyclicTests.scala @@ -28,7 +28,4 @@ object AcyclicTests extends IntegrationTestSuite("MILL_ACYCLIC_REPO", "acyclic") 'scala2124 - check("2.12.4") } - def main(args: Array[String]): Unit = { - println("Integration Main") - } } -- cgit v1.2.3