summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2018-02-19 14:44:15 -0800
committerLi Haoyi <haoyi.sg@gmail.com>2018-02-19 14:44:24 -0800
commitfb8c75c01f86f41a62e549eb03953789658f7cae (patch)
treeb91a7448157def5cdf1d0e04705916d04e39f2c9 /core
parent790c21c976e5c2944ba7f729e0c5762de8f51baf (diff)
downloadmill-fb8c75c01f86f41a62e549eb03953789658f7cae.tar.gz
mill-fb8c75c01f86f41a62e549eb03953789658f7cae.tar.bz2
mill-fb8c75c01f86f41a62e549eb03953789658f7cae.zip
Improve error reporting for NamedTasks with the wrong number of parameters
Diffstat (limited to 'core')
-rw-r--r--core/src/mill/define/Discover.scala26
-rw-r--r--core/src/mill/define/Task.scala2
2 files changed, 25 insertions, 3 deletions
diff --git a/core/src/mill/define/Discover.scala b/core/src/mill/define/Discover.scala
index 1b6b002a..f0c668e6 100644
--- a/core/src/mill/define/Discover.scala
+++ b/core/src/mill/define/Discover.scala
@@ -42,22 +42,44 @@ object Discover {
}
rec(weakTypeOf[T])
+ def assertParamListCounts(methods: Iterable[router.c.universe.MethodSymbol],
+ cases: (c.Type, Int, String)*) = {
+ for (m <- methods.toList){
+ for ((tt, n, label) <- cases){
+ if (m.returnType <:< tt.asInstanceOf[router.c.Type] &&
+ m.paramLists.length != n){
+ c.abort(
+ m.pos.asInstanceOf[c.Position],
+ s"$label definitions must have $n parameter list" + (if (n == 1) "" else "s")
+ )
+ }
+ }
+ }
+ }
val router = new mill.util.Router(c)
val mapping = for{
discoveredModuleType <- seen
val curCls = discoveredModuleType.asInstanceOf[router.c.Type]
val methods = router.getValsOrMeths(curCls)
val overridesRoutes = {
+ assertParamListCounts(
+ methods,
+ (weakTypeOf[mill.define.Sources], 0, "`T.sources`"),
+ (weakTypeOf[mill.define.Input[_]], 0, "`T.input`"),
+ (weakTypeOf[mill.define.Persistent[_]], 0, "`T.persistent`"),
+ (weakTypeOf[mill.define.Target[_]], 0, "`T{...}`"),
+ (weakTypeOf[mill.define.Command[_]], 1, "`T.command`")
+ )
+
for{
m <- methods.toList
if m.returnType <:< weakTypeOf[mill.define.Command[_]].asInstanceOf[router.c.Type]
} yield (m.overrides.length, router.extractMethod(m, curCls).asInstanceOf[c.Tree])
+
}
if overridesRoutes.nonEmpty
} yield {
- val (overrides, routes) = overridesRoutes.unzip
val lhs = q"classOf[${discoveredModuleType.typeSymbol.asClass}]"
- val clsType = discoveredModuleType.typeSymbol.asClass
val rhs = q"scala.Seq[(Int, mill.util.Router.EntryPoint[_])](..$overridesRoutes)"
q"$lhs -> $rhs"
}
diff --git a/core/src/mill/define/Task.scala b/core/src/mill/define/Task.scala
index 33f94453..17be54fe 100644
--- a/core/src/mill/define/Task.scala
+++ b/core/src/mill/define/Task.scala
@@ -231,7 +231,7 @@ object Target extends TargetGenerated with Applicative.Applyer[Task, Task, Resul
def persistent[T](t: Result[T])(implicit r: R[T],
w: W[T],
- ctx: mill.define.Ctx): Target[T] = macro persistentImpl[T]
+ ctx: mill.define.Ctx): Persistent[T] = macro persistentImpl[T]
def persistentImpl[T: c.WeakTypeTag](c: Context)
(t: c.Expr[T])