From 302008684d51e49f0ce70516f283f15d41ea3831 Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Sun, 26 Nov 2017 07:15:08 -0800 Subject: bring back ScalaModule#run, bring back TaskModule now with a new defaultCommandName member --- core/src/main/scala/mill/Main.scala | 16 +++++++++------- core/src/main/scala/mill/define/Applicative.scala | 1 + core/src/main/scala/mill/define/Task.scala | 4 +++- 3 files changed, 13 insertions(+), 8 deletions(-) (limited to 'core/src/main') 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 } -- cgit v1.2.3