diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2018-01-28 09:43:09 -0800 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2018-01-28 10:13:44 -0800 |
commit | 42d24a0b59fa21bfa79040c2cd51a1f7384eee12 (patch) | |
tree | 34d6c34442cf73a8b98865b715453f3321bf12a1 /core/src | |
parent | eec3a8995de1555f5d8120e106dd16badf2fdb00 (diff) | |
download | mill-42d24a0b59fa21bfa79040c2cd51a1f7384eee12.tar.gz mill-42d24a0b59fa21bfa79040c2cd51a1f7384eee12.tar.bz2 mill-42d24a0b59fa21bfa79040c2cd51a1f7384eee12.zip |
DRY up test suite by making `Discover` generation implicit
Also avoid passing around `Discover` and `Evaluator` together, since the latter already contains the former
Diffstat (limited to 'core/src')
-rw-r--r-- | core/src/mill/define/Discover.scala | 8 | ||||
-rw-r--r-- | core/src/mill/eval/Evaluator.scala | 2 | ||||
-rw-r--r-- | core/src/mill/main/MainRunner.scala | 10 | ||||
-rw-r--r-- | core/src/mill/main/ReplApplyHandler.scala | 10 | ||||
-rw-r--r-- | core/src/mill/main/Resolve.scala | 2 | ||||
-rw-r--r-- | core/src/mill/main/RunScript.scala | 33 |
6 files changed, 30 insertions, 35 deletions
diff --git a/core/src/mill/define/Discover.scala b/core/src/mill/define/Discover.scala index 5e0e9a05..ab2ba900 100644 --- a/core/src/mill/define/Discover.scala +++ b/core/src/mill/define/Discover.scala @@ -8,11 +8,11 @@ import scala.reflect.macros.blackbox -case class Discover(value: Map[Class[_], Seq[(Int, EntryPoint[_])]]) +case class Discover[T](value: Map[Class[_], Seq[(Int, EntryPoint[_])]]) object Discover { - def apply[T]: Discover = macro applyImpl[T] + def apply[T]: Discover[T] = macro applyImpl[T] - def applyImpl[T: c.WeakTypeTag](c: blackbox.Context): c.Expr[Discover] = { + def applyImpl[T: c.WeakTypeTag](c: blackbox.Context): c.Expr[Discover[T]] = { import c.universe._ import compat._ val seen = mutable.Set.empty[Type] @@ -61,6 +61,6 @@ object Discover { q"$lhs -> $rhs" } - c.Expr[Discover](q"mill.define.Discover(scala.collection.immutable.Map(..$mapping))") + c.Expr[Discover[T]](q"mill.define.Discover(scala.collection.immutable.Map(..$mapping))") } } diff --git a/core/src/mill/eval/Evaluator.scala b/core/src/mill/eval/Evaluator.scala index d5c273d2..d248ce73 100644 --- a/core/src/mill/eval/Evaluator.scala +++ b/core/src/mill/eval/Evaluator.scala @@ -27,7 +27,7 @@ case class Labelled[T](target: NamedTask[T], class Evaluator[T](val workspacePath: Path, val basePath: Path, val rootModule: mill.Module, - val discover: Discover, + val discover: Discover[T], log: Logger, val classLoaderSig: Seq[(Path, Long)] = Evaluator.classLoaderSig){ diff --git a/core/src/mill/main/MainRunner.scala b/core/src/mill/main/MainRunner.scala index 81450ba9..e098144f 100644 --- a/core/src/mill/main/MainRunner.scala +++ b/core/src/mill/main/MainRunner.scala @@ -24,7 +24,7 @@ class MainRunner(config: ammonite.main.Cli.Config, config, outprintStream, errPrintStream, stdIn, outprintStream, errPrintStream ){ - var lastEvaluator: Option[(Seq[(Path, Long)], Evaluator[_], Discover)] = None + var lastEvaluator: Option[(Seq[(Path, Long)], Evaluator[Any])] = None override def runScript(scriptPath: Path, scriptArgs: List[String]) = watchLoop( @@ -48,9 +48,9 @@ class MainRunner(config: ammonite.main.Cli.Config, result match{ case Res.Success(data) => - val (eval, discover, evaluationWatches, res) = data + val (eval, evaluationWatches, res) = data - lastEvaluator = Some((interpWatched, eval, discover)) + lastEvaluator = Some((interpWatched, eval)) (Res(res), interpWatched ++ evaluationWatches) case _ => (result, interpWatched) @@ -95,7 +95,7 @@ class MainRunner(config: ammonite.main.Cli.Config, | // even if it does nothing... | def $$main() = Iterator[String]() | - | implicit def millDiscover: mill.define.Discover = mill.define.Discover[this.type] + | implicit def millDiscover: mill.define.Discover[this.type] = mill.define.Discover[this.type] | // Need to wrap the returned Module in Some(...) to make sure it | // doesn't get picked up during reflective child-module discovery | val millSelf = Some(this) @@ -103,7 +103,7 @@ class MainRunner(config: ammonite.main.Cli.Config, | |sealed trait $wrapName extends mill.Module{this: mill.define.BaseModule => | - | implicit def millDiscover: mill.define.Discover + | implicit def millDiscover: mill.define.Discover[_] |""".stripMargin } diff --git a/core/src/mill/main/ReplApplyHandler.scala b/core/src/mill/main/ReplApplyHandler.scala index 9b3a29bb..40363be1 100644 --- a/core/src/mill/main/ReplApplyHandler.scala +++ b/core/src/mill/main/ReplApplyHandler.scala @@ -12,7 +12,7 @@ object ReplApplyHandler{ def apply[T](colors: ammonite.util.Colors, pprinter0: pprint.PPrinter, rootModule: mill.Module, - discover: Discover) = { + discover: Discover[_]) = { new ReplApplyHandler( pprinter0, new mill.eval.Evaluator( @@ -27,14 +27,12 @@ object ReplApplyHandler{ System.err, System.err ) - ), - discover + ) ) } } class ReplApplyHandler(pprinter0: pprint.PPrinter, - evaluator: Evaluator[_], - discover: Discover) extends ApplyHandler[Task] { + evaluator: Evaluator[_]) extends ApplyHandler[Task] { // Evaluate classLoaderSig only once in the REPL to avoid busting caches // as the user enters more REPL commands and changes the classpath val classLoaderSig = Evaluator.classLoaderSig @@ -83,7 +81,7 @@ class ReplApplyHandler(pprinter0: pprint.PPrinter, else ctx.applyPrefixColor("\nChildren:").toString +: m.millInternal.reflect[mill.Module].map("\n ." + _.millOuterCtx.segments.render)) ++ - (discover.value.get(m.getClass) match{ + (evaluator.discover.value.get(m.getClass) match{ case None => Nil case Some(commands) => ctx.applyPrefixColor("\nCommands:").toString +: commands.map{c => diff --git a/core/src/mill/main/Resolve.scala b/core/src/mill/main/Resolve.scala index d8c0ede0..42b9eeb8 100644 --- a/core/src/mill/main/Resolve.scala +++ b/core/src/mill/main/Resolve.scala @@ -8,7 +8,7 @@ import ammonite.main.Router.EntryPoint object Resolve { def resolve[T, V](remainingSelector: List[Segment], obj: mill.Module, - discover: Discover, + discover: Discover[_], rest: Seq[String], remainingCrossSelectors: List[List[String]], revSelectorsSoFar: List[Segment]): Either[String, Seq[Task[Any]]] = { diff --git a/core/src/mill/main/RunScript.scala b/core/src/mill/main/RunScript.scala index 29ba09dd..ce4e6835 100644 --- a/core/src/mill/main/RunScript.scala +++ b/core/src/mill/main/RunScript.scala @@ -24,15 +24,15 @@ object RunScript{ path: Path, instantiateInterpreter: => Either[(Res.Failing, Seq[(Path, Long)]), ammonite.interp.Interpreter], scriptArgs: Seq[String], - lastEvaluator: Option[(Seq[(Path, Long)], Evaluator[_], Discover)], + lastEvaluator: Option[(Seq[(Path, Long)], Evaluator[Any])], log: Logger) - : (Res[(Evaluator[_], Discover, Seq[(Path, Long)], Either[String, Seq[Js.Value]])], Seq[(Path, Long)]) = { + : (Res[(Evaluator[Any], Seq[(Path, Long)], Either[String, Seq[Js.Value]])], Seq[(Path, Long)]) = { val (evalRes, interpWatched) = lastEvaluator match{ - case Some((prevInterpWatchedSig, prevEvaluator, prevDiscover)) + case Some((prevInterpWatchedSig, prevEvaluator)) if watchedSigUnchanged(prevInterpWatchedSig) => - (Res.Success(prevEvaluator -> prevDiscover), prevInterpWatchedSig) + (Res.Success(prevEvaluator), prevInterpWatchedSig) case _ => instantiateInterpreter match{ @@ -41,20 +41,18 @@ object RunScript{ interp.watch(path) val eval = for((mapping, discover) <- evaluateMapping(wd, path, interp)) - yield ( - new Evaluator( - wd / 'out, wd, mapping, discover, log, - mapping.getClass.getClassLoader.asInstanceOf[SpecialClassLoader].classpathSignature - ), - discover + yield new Evaluator[Any]( + wd / 'out, wd, mapping, discover, log, + mapping.getClass.getClassLoader.asInstanceOf[SpecialClassLoader].classpathSignature ) + (eval, interp.watchedFiles) } } val evaluated = for{ - (evaluator, discover) <- evalRes - (evalWatches, res) <- Res(evaluateTarget(evaluator, discover, scriptArgs)) + evaluator <- evalRes + (evalWatches, res) <- Res(evaluateTarget(evaluator, scriptArgs)) } yield { val alreadyStale = evalWatches.exists(p => p.sig != new PathRef(p.path, p.quick).sig) // If the file changed between the creation of the original @@ -67,7 +65,7 @@ object RunScript{ if (alreadyStale) evalWatches.map(_.path -> util.Random.nextLong()) else evalWatches.map(p => p.path -> Interpreter.pathSignature(p.path)) - (evaluator, discover, evaluationWatches, res.map(_.flatMap(_._2))) + (evaluator, evaluationWatches, res.map(_.flatMap(_._2))) } (evaluated, interpWatched) } @@ -78,7 +76,7 @@ object RunScript{ def evaluateMapping(wd: Path, path: Path, - interp: ammonite.interp.Interpreter): Res[(mill.Module, Discover)] = { + interp: ammonite.interp.Interpreter): Res[(mill.Module, Discover[Any])] = { val (pkg, wrapper) = Util.pathToPackageWrapper(Seq(), path relativeTo wd) @@ -121,7 +119,7 @@ object RunScript{ Res.Success( buildCls.getMethod("millDiscover") .invoke(module) - .asInstanceOf[Discover] + .asInstanceOf[Discover[Any]] ) } } catch { @@ -131,8 +129,7 @@ object RunScript{ } yield (module, discover) } - def evaluateTarget[T](evaluator: Evaluator[_], - discover: Discover, + def evaluateTarget[T](evaluator: Evaluator[T], scriptArgs: Seq[String]) = { for { parsed <- ParseArgs(scriptArgs) @@ -145,7 +142,7 @@ object RunScript{ } mill.main.Resolve.resolve( sel, evaluator.rootModule, - discover, + evaluator.discover, args, crossSelectors, Nil ) } |