summaryrefslogtreecommitdiff
path: root/core/src/main
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2017-11-18 13:36:13 -0800
committerLi Haoyi <haoyi.sg@gmail.com>2017-11-18 13:36:13 -0800
commita15ea041996029f406377ad7474b1f3e8154ab5d (patch)
tree4ce17286e81a8d3ae01b028a60444fba69bcf995 /core/src/main
parent910b49da3f068768fd5826407759aa4defbcfdf4 (diff)
downloadmill-a15ea041996029f406377ad7474b1f3e8154ab5d.tar.gz
mill-a15ea041996029f406377ad7474b1f3e8154ab5d.tar.bz2
mill-a15ea041996029f406377ad7474b1f3e8154ab5d.zip
Force compile errors for missing implicits in `Discovered` materialization to point at their source methods, for easier fixing
Diffstat (limited to 'core/src/main')
-rw-r--r--core/src/main/scala/mill/discover/Discovered.scala5
-rw-r--r--core/src/main/scala/mill/discover/Router.scala25
2 files changed, 23 insertions, 7 deletions
diff --git a/core/src/main/scala/mill/discover/Discovered.scala b/core/src/main/scala/mill/discover/Discovered.scala
index 9d46f196..0f3ced4e 100644
--- a/core/src/main/scala/mill/discover/Discovered.scala
+++ b/core/src/main/scala/mill/discover/Discovered.scala
@@ -53,10 +53,13 @@ object Discovered {
!m.name.toString.contains(' ')
} yield {
val x = Ident(TermName(c.freshName()))
- q"""mill.discover.Mirror.makeTargetPoint(
+ val t = q"""mill.discover.Mirror.makeTargetPoint(
${m.name.toString},
($x: ${m.typeSignature.resultType}) => $x.${m.name.toTermName}
)"""
+
+ c.internal.setPos(t, m.pos)
+ t
}
diff --git a/core/src/main/scala/mill/discover/Router.scala b/core/src/main/scala/mill/discover/Router.scala
index 90e50075..dda682b2 100644
--- a/core/src/main/scala/mill/discover/Router.scala
+++ b/core/src/main/scala/mill/discover/Router.scala
@@ -2,6 +2,7 @@ package mill.discover
import ammonite.main.Compat
import mill.define.Task
+import mill.discover.Router.ArgSig
import sourcecode.Compat.Context
import scala.annotation.StaticAnnotation
@@ -237,7 +238,18 @@ object Router{
Result.Success(rights)
}
}
+
+ def makeReadCall[T: scopt.Read](dict: Map[String, String],
+ default: => Option[Any],
+ arg: ArgSig[_]) = {
+ read[T](dict, default, arg, implicitly[scopt.Read[T]].reads(_))
+ }
+ def makeReadVarargsCall[T: scopt.Read](arg: ArgSig[_],
+ values: Seq[String]) = {
+ readVarargs[T](arg, values, implicitly[scopt.Read[T]].reads(_))
+ }
}
+
class Router [C <: Context](val c: C) {
import c.universe._
def getValsOrMeths(curCls: Type): Iterable[MethodSymbol] = {
@@ -260,6 +272,8 @@ class Router [C <: Context](val c: C) {
}
}
+
+
def extractMethod(meth: MethodSymbol, curCls: c.universe.Type): c.universe.Tree = {
val flattenedArgLists = meth.paramss.flatten
def hasDefault(i: Int) = {
@@ -334,19 +348,18 @@ class Router [C <: Context](val c: C) {
val reader =
if(vararg) q"""
- mill.discover.Router.readVarargs[$docUnwrappedType](
+ mill.discover.Router.makeReadVarargsCall[$docUnwrappedType](
$argSig,
- $extrasSymbol,
- implicitly[scopt.Read[$docUnwrappedType]].reads(_)
+ $extrasSymbol
)
""" else q"""
- mill.discover.Router.read[$docUnwrappedType](
+ mill.discover.Router.makeReadCall[$docUnwrappedType](
$argListSymbol,
$default,
- $argSig,
- implicitly[scopt.Read[$docUnwrappedType]].reads(_)
+ $argSig
)
"""
+ c.internal.setPos(reader, meth.pos)
(reader, argSig, vararg)
}