diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2017-11-26 07:15:08 -0800 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2017-11-26 07:15:08 -0800 |
commit | 302008684d51e49f0ce70516f283f15d41ea3831 (patch) | |
tree | ade589eba2b10a08fff7eb057c6392d6b631232d | |
parent | 5557966d2e96c1711978a8b1606bd6c20d26030c (diff) | |
download | mill-302008684d51e49f0ce70516f283f15d41ea3831.tar.gz mill-302008684d51e49f0ce70516f283f15d41ea3831.tar.bz2 mill-302008684d51e49f0ce70516f283f15d41ea3831.zip |
bring back ScalaModule#run, bring back TaskModule now with a new defaultCommandName member
-rw-r--r-- | core/src/main/scala/mill/Main.scala | 16 | ||||
-rw-r--r-- | core/src/main/scala/mill/define/Applicative.scala | 1 | ||||
-rw-r--r-- | core/src/main/scala/mill/define/Task.scala | 4 | ||||
-rw-r--r-- | core/src/test/scala/mill/define/CrossTests.scala | 2 | ||||
-rw-r--r-- | scalaplugin/src/main/scala/mill/scalaplugin/ScalaModule.scala | 15 |
5 files changed, 24 insertions, 14 deletions
diff --git a/core/src/main/scala/mill/Main.scala b/core/src/main/scala/mill/Main.scala index 829b684c..873feed2 100644 --- a/core/src/main/scala/mill/Main.scala +++ b/core/src/main/scala/mill/Main.scala @@ -10,9 +10,8 @@ import mill.eval.{Evaluator, Result} import mill.util.OSet import ammonite.main.Scripts.pathScoptRead import ammonite.repl.Repl - +import mill.define.Task.TaskModule object Main { - def parseSelector(input: String) = { import fastparse.all._ val segment = P( CharsWhileIn(('a' to 'z') ++ ('A' to 'Z') ++ ('0' to '9')).! ).map( @@ -55,10 +54,10 @@ object Main { remainingSelector match{ case Mirror.Segment.Cross(_) :: Nil => Left("Selector cannot start with a [cross] segment") case Mirror.Segment.Label(last) :: Nil => - def target: Option[Task[Any]] = + def target = hierarchy.targets .find(_.label == last) - .map{x => x.run(hierarchy.node(obj, remainingCrossSelectors))} + .map(x => Right(x.run(hierarchy.node(obj, remainingCrossSelectors)))) def invokeCommand[V](mirror: Mirror[T, V], name: String) = for{ cmd <- mirror.commands.find(_.name == name) @@ -70,15 +69,18 @@ object Main { case _ => Left(s"Command failed $last") } - def runCommand = for{ + def runDefault = for{ (label, child) <- hierarchy.children if label == last - res <- invokeCommand(child, "run") + res <- child.node(obj, remainingCrossSelectors) match{ + case taskMod: TaskModule => Some(invokeCommand(child, taskMod.defaultCommandName())) + case _ => None + } } yield res def command = invokeCommand(hierarchy, last) - command orElse target.map(Right(_)) orElse runCommand.headOption match{ + command orElse target orElse runDefault.headOption.flatten match{ case None => Left("Cannot resolve task " + renderSelector( (Mirror.Segment.Label(last) :: revSelectorsSoFar).reverse) ) diff --git a/core/src/main/scala/mill/define/Applicative.scala b/core/src/main/scala/mill/define/Applicative.scala index 5c626455..4973dfd0 100644 --- a/core/src/main/scala/mill/define/Applicative.scala +++ b/core/src/main/scala/mill/define/Applicative.scala @@ -21,6 +21,7 @@ object Applicative { def apply(): T = ??? } type Id[+T] = T + trait Applyer[W[_], T[_], Z[_], Ctx]{ @compileTimeOnly("Target.ctx() can only be used with a T{...} block") def ctx(): Ctx = ??? diff --git a/core/src/main/scala/mill/define/Task.scala b/core/src/main/scala/mill/define/Task.scala index 0e7b4375..c54634db 100644 --- a/core/src/main/scala/mill/define/Task.scala +++ b/core/src/main/scala/mill/define/Task.scala @@ -141,7 +141,9 @@ class Source(path: ammonite.ops.Path) extends Task[PathRef]{ object Task { - + trait TaskModule extends Module { + def defaultCommandName(): String + } trait Module extends mill.define.Cacher[Target]{ def wrapCached[T](t: Target[T], enclosing: String): Target[T] = t } diff --git a/core/src/test/scala/mill/define/CrossTests.scala b/core/src/test/scala/mill/define/CrossTests.scala index 07545d44..5c0f5c08 100644 --- a/core/src/test/scala/mill/define/CrossTests.scala +++ b/core/src/test/scala/mill/define/CrossTests.scala @@ -14,8 +14,6 @@ object CrossTests extends TestSuite{ Cross(List((List(1), "1"), (List(2), "2"), (List(3), "3"))) ) - - 'double - assertEquals( for{ a <- Cross(1, 2, 3) diff --git a/scalaplugin/src/main/scala/mill/scalaplugin/ScalaModule.scala b/scalaplugin/src/main/scala/mill/scalaplugin/ScalaModule.scala index 70bb1a35..a9c136d6 100644 --- a/scalaplugin/src/main/scala/mill/scalaplugin/ScalaModule.scala +++ b/scalaplugin/src/main/scala/mill/scalaplugin/ScalaModule.scala @@ -7,7 +7,7 @@ import java.util.Optional import ammonite.ops._ import coursier.{Cache, Fetch, MavenRepository, Repository, Resolution} import mill.define.Task -import mill.define.Task.Module +import mill.define.Task.{Module, TaskModule} import mill.eval.{Evaluator, PathRef} import mill.modules.Jvm.{createAssembly, createJar} import mill.util.OSet @@ -166,9 +166,10 @@ object ScalaModule{ ) } import ScalaModule._ -trait TestScalaModule extends ScalaModule { +trait TestScalaModule extends ScalaModule with TaskModule { + override def defaultCommandName() = "test" def testFramework: T[String] - def run(args: String*) = T.command{ + def test(args: String*) = T.command{ TestRunner( testFramework(), runDepClasspath().map(_.path) :+ compile().path, @@ -177,7 +178,8 @@ trait TestScalaModule extends ScalaModule { ) } } -trait ScalaModule extends Module{ outer => +trait ScalaModule extends Module with TaskModule{ outer => + def defaultCommandName() = "run" trait Tests extends TestScalaModule{ def scalaVersion = outer.scalaVersion() override def projectDeps = Seq(outer) @@ -276,6 +278,11 @@ trait ScalaModule extends Module{ outer => PathRef(dest) } + def run(mainClass: String) = T.command{ + import ammonite.ops._, ImplicitWd._ + %('java, "-cp", (runDepClasspath().map(_.path) :+ compile().path).mkString(":"), mainClass) + } + def console() = T.command{ import ammonite.ops._, ImplicitWd._ %('java, |