summaryrefslogtreecommitdiff
path: root/core/src/main
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2017-11-26 07:15:08 -0800
committerLi Haoyi <haoyi.sg@gmail.com>2017-11-26 07:15:08 -0800
commit302008684d51e49f0ce70516f283f15d41ea3831 (patch)
treeade589eba2b10a08fff7eb057c6392d6b631232d /core/src/main
parent5557966d2e96c1711978a8b1606bd6c20d26030c (diff)
downloadmill-302008684d51e49f0ce70516f283f15d41ea3831.tar.gz
mill-302008684d51e49f0ce70516f283f15d41ea3831.tar.bz2
mill-302008684d51e49f0ce70516f283f15d41ea3831.zip
bring back ScalaModule#run, bring back TaskModule now with a new defaultCommandName member
Diffstat (limited to 'core/src/main')
-rw-r--r--core/src/main/scala/mill/Main.scala16
-rw-r--r--core/src/main/scala/mill/define/Applicative.scala1
-rw-r--r--core/src/main/scala/mill/define/Task.scala4
3 files changed, 13 insertions, 8 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
}