From a15ea041996029f406377ad7474b1f3e8154ab5d Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Sat, 18 Nov 2017 13:36:13 -0800 Subject: Force compile errors for missing implicits in `Discovered` materialization to point at their source methods, for easier fixing --- core/src/main/scala/mill/discover/Discovered.scala | 5 ++++- core/src/main/scala/mill/discover/Router.scala | 25 ++++++++++++++++------ 2 files changed, 23 insertions(+), 7 deletions(-) (limited to 'core/src/main') 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) } -- cgit v1.2.3