summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbuild.sc6
-rw-r--r--core/src/main/scala/mill/define/Applicative.scala5
-rw-r--r--core/src/main/scala/mill/define/Task.scala4
-rw-r--r--core/src/test/scala/mill/define/ApplicativeTests.scala4
-rw-r--r--scalaplugin/src/main/scala/mill/scalaplugin/ScalaModule.scala12
5 files changed, 28 insertions, 3 deletions
diff --git a/build.sc b/build.sc
index f58c160e..cca8d061 100755
--- a/build.sc
+++ b/build.sc
@@ -5,7 +5,13 @@ import mill.scalaplugin._
trait MillModule extends ScalaModule{ outer =>
def scalaVersion = "2.12.4"
override def sources = basePath/'src/'main/'scala
+
+ override def compileIvyDeps = Seq(Dep("com.lihaoyi", "acyclic", "0.1.7"))
+ override def scalacOptions = Seq("-P:acyclic:force")
+ override def scalacPluginIvyDeps = Seq(Dep("com.lihaoyi", "acyclic", "0.1.7"))
+
def testArgs = T{ Seq.empty[String] }
+
object test extends this.Tests{
override def defaultCommandName() = "forkTest"
override def forkArgs = T{ testArgs() }
diff --git a/core/src/main/scala/mill/define/Applicative.scala b/core/src/main/scala/mill/define/Applicative.scala
index 38a98015..6d8ae3e2 100644
--- a/core/src/main/scala/mill/define/Applicative.scala
+++ b/core/src/main/scala/mill/define/Applicative.scala
@@ -39,6 +39,9 @@ object Applicative {
(cb: (A, B, C, D, E, F, Ctx) => Z[R]) = mapCtx(zip(a, b, c, d, e, f)){case ((a, b, c, d, e, f), x) => cb(a, b, c, d, e, f, x)}
def zipMap[A, B, C, D, E, F, G, H, R](a: T[A], b: T[B], c: T[C], d: T[D], e: T[E], f: T[F], g: T[G], h: T[H])
(cb: (A, B, C, D, E, F, G, H, Ctx) => Z[R]) = mapCtx(zip(a, b, c, d, e, f, g, h)){case ((a, b, c, d, e, f, g, h), x) => cb(a, b, c, d, e, f, g, h, x)}
+ def zipMap[A, B, C, D, E, F, G, H, I, R](a: T[A], b: T[B], c: T[C], d: T[D], e: T[E], f: T[F], g: T[G], h: T[H], i: T[I])
+ (cb: (A, B, C, D, E, F, G, H, I, Ctx) => Z[R]) = mapCtx(zip(a, b, c, d, e, f, g, h, i)){case ((a, b, c, d, e, f, g, h, i), x) => cb(a, b, c, d, e, f, g, h, i, x)}
+
def zip(): T[Unit]
def zip[A](a: T[A]): T[Tuple1[A]]
def zip[A, B](a: T[A], b: T[B]): T[(A, B)]
@@ -47,6 +50,8 @@ object Applicative {
def zip[A, B, C, D, E](a: T[A], b: T[B], c: T[C], d: T[D], e: T[E]): T[(A, B, C, D, E)]
def zip[A, B, C, D, E, F](a: T[A], b: T[B], c: T[C], d: T[D], e: T[E], f: T[F]): T[(A, B, C, D, E, F)]
def zip[A, B, C, D, E, F, G, H](a: T[A], b: T[B], c: T[C], d: T[D], e: T[E], f: T[F], g: T[G], h: T[H]): T[(A, B, C, D, E, F, G, H)]
+ def zip[A, B, C, D, E, F, G, H, I](a: T[A], b: T[B], c: T[C], d: T[D], e: T[E], f: T[F], g: T[G], h: T[H], i: T[I]): T[(A, B, C, D, E, F, G, H, I)]
+
}
def impl[M[_], T: c.WeakTypeTag, Ctx: c.WeakTypeTag](c: Context)
diff --git a/core/src/main/scala/mill/define/Task.scala b/core/src/main/scala/mill/define/Task.scala
index 8b811bdc..3c170bab 100644
--- a/core/src/main/scala/mill/define/Task.scala
+++ b/core/src/main/scala/mill/define/Task.scala
@@ -117,6 +117,10 @@ object Target extends Applicative.Applyer[Task, Task, Result, Ctx]{
val inputs = Seq(a, b, c, d, e, f, g, h)
def evaluate(args: Ctx) = (args[A](0), args[B](1), args[C](2), args[D](3), args[E](4), args[F](5), args[G](6), args[H](7))
}
+ def zip[A, B, C, D, E, F, G, H, I](a: Task[A], b: Task[B], c: Task[C], d: Task[D], e: Task[E], f: Task[F], g: Task[G], h: Task[H], i: Task[I]) = new Task[(A, B, C, D, E, F, G, H, I)]{
+ val inputs = Seq(a, b, c, d, e, f, g, h, i)
+ def evaluate(args: Ctx) = (args[A](0), args[B](1), args[C](2), args[D](3), args[E](4), args[F](5), args[G](6), args[H](7), args[I](8))
+ }
}
class TargetImpl[+T](t: Task[T], enclosing: String) extends Target[T] {
val inputs = Seq(t)
diff --git a/core/src/test/scala/mill/define/ApplicativeTests.scala b/core/src/test/scala/mill/define/ApplicativeTests.scala
index 14b566b3..29177a03 100644
--- a/core/src/test/scala/mill/define/ApplicativeTests.scala
+++ b/core/src/test/scala/mill/define/ApplicativeTests.scala
@@ -41,6 +41,9 @@ object ApplicativeTests extends TestSuite {
def zip[A, B, C, D, E, F, G, H](a: O[A], b: O[B], c: O[C], d: O[D], e: O[E], f: O[F], g: O[G], h: O[H]) = {
for(a <- a; b <- b; c <- c; d <- d; e <- e; f <- f; g <- g; h <- h) yield (a, b, c, d, e, f, g, h)
}
+ def zip[A, B, C, D, E, F, G, H, I](a: O[A], b: O[B], c: O[C], d: O[D], e: O[E], f: O[F], g: O[G], h: O[H], i: O[I]) = {
+ for(a <- a; b <- b; c <- c; d <- d; e <- e; f <- f; g <- g; h <- h; i <- i) yield (a, b, c, d, e, f, g, h, i)
+ }
}
class Counter{
var value = 0
@@ -145,4 +148,3 @@ object ApplicativeTests extends TestSuite {
}
}
}
-
diff --git a/scalaplugin/src/main/scala/mill/scalaplugin/ScalaModule.scala b/scalaplugin/src/main/scala/mill/scalaplugin/ScalaModule.scala
index 4de2f416..802a881a 100644
--- a/scalaplugin/src/main/scala/mill/scalaplugin/ScalaModule.scala
+++ b/scalaplugin/src/main/scala/mill/scalaplugin/ScalaModule.scala
@@ -42,6 +42,7 @@ object ScalaModule{
compilerClasspath: Seq[Path],
compilerBridge: Seq[Path],
scalacOptions: Seq[String],
+ scalacPluginClasspath: Seq[Path],
javacOptions: Seq[String],
upstreamCompileOutput: Seq[CompilationResult])
(implicit ctx: Ctx): CompilationResult = {
@@ -117,7 +118,7 @@ object ScalaModule{
classpath = classesIODir +: compileClasspathFiles,
sources = sources.flatMap(ls.rec).filter(x => x.isFile && x.ext == "scala").map(_.toIO).toArray,
classesDirectory = classesIODir,
- scalacOptions = scalacOptions.toArray,
+ scalacOptions = (scalacPluginClasspath.map(jar => s"-Xplugin:${jar}") ++ scalacOptions).toArray,
javacOptions = javacOptions.toArray,
maxErrors = 10,
sourcePositionMappers = Array(),
@@ -247,6 +248,7 @@ trait ScalaModule extends Module with TaskModule{ outer =>
def scalaBinaryVersion = T{ scalaVersion().split('.').dropRight(1).mkString(".") }
def ivyDeps = T{ Seq[Dep]() }
def compileIvyDeps = T{ Seq[Dep]() }
+ def scalacPluginIvyDeps = T{ Seq[Dep]() }
def runIvyDeps = T{ Seq[Dep]() }
def basePath: Path
@@ -320,13 +322,18 @@ trait ScalaModule extends Module with TaskModule{ outer =>
)()
}
+ def scalacPluginClasspath: T[Seq[PathRef]] =
+ resolveDeps(
+ T.task{scalacPluginIvyDeps()}
+ )()
+
/**
* Classpath of the Scala Compiler & any compiler plugins
*/
def scalaCompilerClasspath: T[Seq[PathRef]] = T{
resolveDeps(
T.task{scalaCompilerIvyDeps(scalaVersion()) ++ scalaRuntimeIvyDeps(scalaVersion())},
- )()
+ )() ++ scalacPluginClasspath()
}
/**
@@ -353,6 +360,7 @@ trait ScalaModule extends Module with TaskModule{ outer =>
scalaCompilerClasspath().map(_.path),
compilerBridgeClasspath().map(_.path),
scalacOptions(),
+ scalacPluginClasspath().map(_.path),
javacOptions(),
upstreamCompileOutput()
)