summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2018-01-02 22:49:38 -0800
committerLi Haoyi <haoyi.sg@gmail.com>2018-01-02 22:49:38 -0800
commit59daaa946e579853000ac0b6680203768de77c6d (patch)
treeb9e668e86aec74fe15a1c6b1f10c45399d748c59
parent753c8dc3b296b8c53e5542a9da192e066beb2eef (diff)
downloadmill-59daaa946e579853000ac0b6680203768de77c6d.tar.gz
mill-59daaa946e579853000ac0b6680203768de77c6d.tar.bz2
mill-59daaa946e579853000ac0b6680203768de77c6d.zip
Swap over to new `CrossModule` class to simplify the cross module syntax
-rwxr-xr-xbuild.sc5
-rw-r--r--core/src/main/scala/mill/define/Cross.scala3
-rw-r--r--core/src/main/scala/mill/discover/Discovered.scala3
-rw-r--r--core/src/main/scala/mill/package.scala1
-rw-r--r--integration/src/test/resource/acyclic/build.sc9
-rw-r--r--integration/src/test/resource/better-files/build.sc13
-rw-r--r--integration/src/test/resource/jawn/build.sc11
-rw-r--r--integration/src/test/scala/mill/integration/AcyclicTests.scala3
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")
- }
}