summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2017-12-30 21:11:26 -0800
committerLi Haoyi <haoyi.sg@gmail.com>2017-12-30 21:11:26 -0800
commit982b1e07cb512d6a48c859950b7aa8ce9746dd25 (patch)
tree1349a20c95004a82ece73be9e492ef16ccc1fae3 /core
parent356dca0f92931b07e1a80013aefb025b6a7d7d42 (diff)
downloadmill-982b1e07cb512d6a48c859950b7aa8ce9746dd25.tar.gz
mill-982b1e07cb512d6a48c859950b7aa8ce9746dd25.tar.bz2
mill-982b1e07cb512d6a48c859950b7aa8ce9746dd25.zip
Swap out awkward quasiquotes in `Task` macros in exchange for `reify`/`splice`
Diffstat (limited to 'core')
-rw-r--r--core/src/main/scala/mill/define/Task.scala72
-rw-r--r--core/src/main/scala/mill/eval/Evaluator.scala8
2 files changed, 60 insertions, 20 deletions
diff --git a/core/src/main/scala/mill/define/Task.scala b/core/src/main/scala/mill/define/Task.scala
index 07f26b53..b96e80c6 100644
--- a/core/src/main/scala/mill/define/Task.scala
+++ b/core/src/main/scala/mill/define/Task.scala
@@ -64,9 +64,17 @@ object Target extends TargetGenerated with Applicative.Applyer[Task, Task, Resul
cl: c.Expr[Caller[mill.define.Task.Module]],
o: c.Expr[Overrides]): c.Expr[Target[T]] = {
import c.universe._
- c.Expr[Target[T]](
- mill.moduledefs.Cacher.wrapCached(c)(
- q"new ${weakTypeOf[TargetImpl[T]]}(${Applicative.impl0[Task, T, Ctx](c)(q"mill.eval.Result.Success($t)").tree}, $e.value, $cl.value, $n.value, upickle.default.ReadWriter($w.write, $r.read), $o.value)"
+ val lhs = Applicative.impl0[Task, T, Ctx](c)(reify(Result.Success(t.splice)).tree)
+
+ mill.moduledefs.Cacher.impl0[TargetImpl, T](c)(
+ reify(
+ new TargetImpl[T](
+ lhs.splice,
+ e.splice.value,
+ cl.splice.value,
+ n.splice.value,
+ upickle.default.ReadWriter(w.splice.write, r.splice.read), o.splice.value
+ )
)
)
}
@@ -88,9 +96,16 @@ object Target extends TargetGenerated with Applicative.Applyer[Task, Task, Resul
cl: c.Expr[Caller[mill.define.Task.Module]],
o: c.Expr[Overrides]): c.Expr[Target[T]] = {
import c.universe._
- c.Expr[Target[T]](
- mill.moduledefs.Cacher.wrapCached(c)(
- q"new ${weakTypeOf[TargetImpl[T]]}(${Applicative.impl0[Task, T, Ctx](c)(t.tree).tree}, $e.value, $cl.value, $n.value, upickle.default.ReadWriter($w.write, $r.read), $o.value)"
+ mill.moduledefs.Cacher.impl0[Target, T](c)(
+ reify(
+ new TargetImpl[T](
+ Applicative.impl0[Task, T, Ctx](c)(t.tree).splice,
+ e.splice.value,
+ cl.splice.value,
+ n.splice.value,
+ upickle.default.ReadWriter(w.splice.write, r.splice.read),
+ o.splice.value
+ )
)
)
}
@@ -112,15 +127,23 @@ object Target extends TargetGenerated with Applicative.Applyer[Task, Task, Resul
cl: c.Expr[Caller[mill.define.Task.Module]],
o: c.Expr[Overrides]): c.Expr[Target[T]] = {
import c.universe._
- c.Expr[Target[T]](
- mill.moduledefs.Cacher.wrapCached(c)(
- q"new ${weakTypeOf[TargetImpl[T]]}($t, $e.value, $cl.value, $n.value, upickle.default.ReadWriter($w.write, $r.read), $o.value)"
+ mill.moduledefs.Cacher.impl0[Target, T](c)(
+ reify(
+ new TargetImpl[T](
+ t.splice,
+ e.splice.value,
+ cl.splice.value,
+ n.splice.value,
+ upickle.default.ReadWriter(w.splice.write, r.splice.read),
+ o.splice.value
+ )
)
)
}
def command[T](t: Result[T])
(implicit w: W[T],
+ e: sourcecode.Enclosing,
n: sourcecode.Name,
cl: Caller[mill.define.Task.Module],
o: Overrides): Command[T] = macro commandImpl[T]
@@ -129,20 +152,28 @@ object Target extends TargetGenerated with Applicative.Applyer[Task, Task, Resul
def command[T](t: Task[T])
(implicit c: Caller[Task.Module],
+ e: sourcecode.Enclosing,
n: sourcecode.Name,
w: W[T],
- o: Overrides): Command[T] = new Command(t, c.value, n.value, w, o.value)
+ o: Overrides): Command[T] = new Command(t, e.value, c.value, n.value, w, o.value)
def commandImpl[T: c.WeakTypeTag](c: Context)
(t: c.Expr[T])
(w: c.Expr[W[T]],
+ e: c.Expr[sourcecode.Enclosing],
n: c.Expr[sourcecode.Name],
cl: c.Expr[Caller[mill.define.Task.Module]],
o: c.Expr[Overrides]): c.Expr[Command[T]] = {
import c.universe._
-
- c.Expr[Command[T]](
- q"new ${weakTypeOf[Command[T]]}(${Applicative.impl[Task, T, Ctx](c)(t).tree}, $cl.value, $n.value, $w, $o.value)"
+ reify(
+ new Command[T](
+ Applicative.impl[Task, T, Ctx](c)(t).splice,
+ e.splice.value,
+ cl.splice.value,
+ n.splice.value,
+ w.splice,
+ o.splice.value
+ )
)
}
@@ -165,9 +196,17 @@ object Target extends TargetGenerated with Applicative.Applyer[Task, Task, Resul
o: c.Expr[Overrides]): c.Expr[Persistent[T]] = {
import c.universe._
- c.Expr[Persistent[T]](
- mill.moduledefs.Cacher.wrapCached(c)(
- q"new ${weakTypeOf[Persistent[T]]}(${Applicative.impl[Task, T, Ctx](c)(t).tree}, $e.value, $cl.value, $n.value, upickle.default.ReadWriter($w.write, $r.read), $o.value)"
+
+ mill.moduledefs.Cacher.impl0[Persistent, T](c)(
+ reify(
+ new Persistent[T](
+ Applicative.impl[Task, T, Ctx](c)(t).splice,
+ e.splice.value,
+ cl.splice.value,
+ n.splice.value,
+ upickle.default.ReadWriter(w.splice.write, r.splice.read),
+ o.splice.value
+ )
)
)
}
@@ -206,6 +245,7 @@ class TargetImpl[+T](t: Task[T],
override def toString = enclosing + "@" + Integer.toHexString(System.identityHashCode(this))
}
class Command[+T](t: Task[T],
+ val enclosing: String,
val owner: Task.Module,
val name: String,
val writer: W[_],
diff --git a/core/src/main/scala/mill/eval/Evaluator.scala b/core/src/main/scala/mill/eval/Evaluator.scala
index ebb21a94..6fc0661a 100644
--- a/core/src/main/scala/mill/eval/Evaluator.scala
+++ b/core/src/main/scala/mill/eval/Evaluator.scala
@@ -40,14 +40,14 @@ class Evaluator[T](val workspacePath: Path,
val sortedGroups = Graph.groupAroundImportantTargets(topoSorted){
case t: NamedTask[Any] if mapping.modules.contains(t.owner) =>
val segments = mapping.modules(t.owner) :+ Segment.Label(t.name)
- val finalTaskOverrides = t match{
- case t: Target[_] => mapping.segmentsToTargets(segments).overrides
- case c: mill.define.Command[_] => mapping.segmentsToCommands(segments).overrides
+ val (finalTaskOverrides, enclosing) = t match{
+ case t: Target[_] => mapping.segmentsToTargets(segments).overrides -> t.enclosing
+ case c: mill.define.Command[_] => mapping.segmentsToCommands(segments).overrides -> c.enclosing
}
val delta = finalTaskOverrides - t.overrides
val additional =
if (delta == 0) Nil
- else Seq(Segment.Label("override" + delta))
+ else Seq(Segment.Label("override" + delta), Segment.Label(enclosing))
Right(Labelled(t, segments ++ additional))
case t if goals.contains(t) => Left(t)