summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrockjam <5min4eq.unity@gmail.com>2017-12-31 02:51:36 +0300
committerNikolay Tatarinov <5min4eq.unity@gmail.com>2017-12-31 14:09:06 +0300
commit9c7ae6b4179ef6140a16330c0b414419a87d7a1f (patch)
tree4e2eb12cb7f8849b24476c6de80d9aa65edf9ad9
parent7e8d847b29c733b43ae150d5a199f0a71ee02bf3 (diff)
downloadmill-9c7ae6b4179ef6140a16330c0b414419a87d7a1f.tar.gz
mill-9c7ae6b4179ef6140a16330c0b414419a87d7a1f.tar.bz2
mill-9c7ae6b4179ef6140a16330c0b414419a87d7a1f.zip
fix #57 implement eval function to evaluate multiple tasks via repl
-rw-r--r--core/src/main/scala/mill/Main.scala1
-rw-r--r--core/src/main/scala/mill/main/ReplApplyHandler.scala2
-rw-r--r--readme.md5
-rw-r--r--shared.sc29
4 files changed, 36 insertions, 1 deletions
diff --git a/core/src/main/scala/mill/Main.scala b/core/src/main/scala/mill/Main.scala
index 470d9cbc..9d0c328f 100644
--- a/core/src/main/scala/mill/Main.scala
+++ b/core/src/main/scala/mill/Main.scala
@@ -46,6 +46,7 @@ object Main {
predefCode =
"""import $file.build, build._
|implicit val replApplyHandler = mill.main.ReplApplyHandler(build.mapping)
+ |import replApplyHandler.generatedEval._
|
""".stripMargin,
welcomeBanner = None
diff --git a/core/src/main/scala/mill/main/ReplApplyHandler.scala b/core/src/main/scala/mill/main/ReplApplyHandler.scala
index 3832da68..93e7add4 100644
--- a/core/src/main/scala/mill/main/ReplApplyHandler.scala
+++ b/core/src/main/scala/mill/main/ReplApplyHandler.scala
@@ -25,4 +25,6 @@ class ReplApplyHandler(evaluator: Evaluator[_]) extends ApplyHandler[Task] {
override def apply[V](t: Task[V]) = {
evaluator.evaluate(OSet(t)).values.head.asInstanceOf[V]
}
+
+ val generatedEval = new EvalGenerated(evaluator)
}
diff --git a/readme.md b/readme.md
index f4887122..aa3acbbc 100644
--- a/readme.md
+++ b/readme.md
@@ -116,6 +116,11 @@ Point(Dependency(com.lihaoyi:ammonite,1.0.3,,Set(),Attributes(,),false,true))
Scala(Dependency(com.typesafe.play:play-json,2.6.6,,Set(),Attributes(,),false,true))
Scala(Dependency(org.scala-sbt:zinc,1.0.5,,Set(),Attributes(,),false,true))
Java(Dependency(org.scala-sbt:test-interface,1.0,,Set(),Attributes(,),false,true))
+
+// run multiple tasks with `eval` function.
+@ val (coreScala, bridge2106Scala) = eval(core.scalaVersion, bridges("2.10.6").scalaVersion)
+coreScala: String = "2.12.4"
+bridge2106Scala: String = "2.10.6"
```
### build.sc
diff --git a/shared.sc b/shared.sc
index 17b82595..579d6b20 100644
--- a/shared.sc
+++ b/shared.sc
@@ -56,6 +56,32 @@ def generateTarget(dir: Path) = {
)
}
+def generateEval(dir: Path) = {
+ def generate(n: Int) = {
+ val (lowercases, uppercases, typeArgs, zipArgs) = argNames(n)
+ val parameters = lowercases.zip(uppercases).map { case (lower, upper) => s"$lower: TT[$upper]" }.mkString(", ")
+ val extract = uppercases.zipWithIndex.map { case (t, i) => s"result($i).asInstanceOf[$t]" }.mkString(", ")
+
+ s"""def eval[$typeArgs]($parameters):($typeArgs) = {
+ | val result = evaluator.evaluate(OSet($zipArgs)).values
+ | (${extract})
+ |}
+ """.stripMargin
+ }
+
+ write(
+ dir / "EvalGenerated.scala",
+ s"""package mill.main
+ |import mill.eval.Evaluator
+ |import mill.define.Task
+ |import mill.util.OSet
+ |class EvalGenerated(evaluator: Evaluator[_]) {
+ | type TT[+X] = Task[X]
+ | ${(1 to 22).map(generate).mkString("\n")}
+ |}""".stripMargin
+ )
+}
+
def generateApplicativeTest(dir: Path) = {
def generate(n: Int): String = {
val (lowercases, uppercases, typeArgs, zipArgs) = argNames(n)
@@ -78,6 +104,7 @@ def generateApplicativeTest(dir: Path) = {
def generateSources(p: Path) = {
generateApplyer(p)
generateTarget(p)
+ generateEval(p)
}
@main
@@ -122,4 +149,4 @@ def downloadBridgeSource(curlDest: Path, crossVersion: String) = {
curlDest
-} \ No newline at end of file
+}