diff options
author | rockjam <5min4eq.unity@gmail.com> | 2017-12-31 02:51:36 +0300 |
---|---|---|
committer | Nikolay Tatarinov <5min4eq.unity@gmail.com> | 2017-12-31 14:09:06 +0300 |
commit | 9c7ae6b4179ef6140a16330c0b414419a87d7a1f (patch) | |
tree | 4e2eb12cb7f8849b24476c6de80d9aa65edf9ad9 | |
parent | 7e8d847b29c733b43ae150d5a199f0a71ee02bf3 (diff) | |
download | mill-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.scala | 1 | ||||
-rw-r--r-- | core/src/main/scala/mill/main/ReplApplyHandler.scala | 2 | ||||
-rw-r--r-- | readme.md | 5 | ||||
-rw-r--r-- | shared.sc | 29 |
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) } @@ -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 @@ -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 +} |