diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2018-01-07 22:38:17 -0800 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2018-01-07 22:38:17 -0800 |
commit | 4fd5f8cdfdc924bff2f4fbc6b5d7072d530fa531 (patch) | |
tree | 6e7c85efc2b3e59f56e1d207a42dda459243982b /core/src/test | |
parent | a30db9485048e8d6e260d5d506894bd6b41f1d72 (diff) | |
download | mill-4fd5f8cdfdc924bff2f4fbc6b5d7072d530fa531.tar.gz mill-4fd5f8cdfdc924bff2f4fbc6b5d7072d530fa531.tar.bz2 mill-4fd5f8cdfdc924bff2f4fbc6b5d7072d530fa531.zip |
Generate the `Segments` list at definition time rather than discovery time, by propagating implicits throughout the tree of nested `mill.Module`s
This currently adds some annoying boilerplate to the definition of cross/abstract modules, which can probably be removed using Macros.
The `Segments` mapping generated by discovery is still present and used in a few places, though it will be removed
Diffstat (limited to 'core/src/test')
9 files changed, 33 insertions, 39 deletions
diff --git a/core/src/test/scala/mill/define/GraphTests.scala b/core/src/test/scala/mill/define/GraphTests.scala index a850a0d2..718fd673 100644 --- a/core/src/test/scala/mill/define/GraphTests.scala +++ b/core/src/test/scala/mill/define/GraphTests.scala @@ -157,7 +157,7 @@ object GraphTests extends TestSuite{ Graph.transitiveTargets(OSet.from(goals)) ) val grouped = Graph.groupAroundImportantTargets(topoSorted) { - case t: NamedTask[Any] if mapping.modulesToPaths.contains(t.owner) => t + case t: NamedTask[Any] => t case t if goals.contains(t) => t } grouped.keyCount diff --git a/core/src/test/scala/mill/define/MacroErrorTests.scala b/core/src/test/scala/mill/define/MacroErrorTests.scala index 90d4e65a..a389feaa 100644 --- a/core/src/test/scala/mill/define/MacroErrorTests.scala +++ b/core/src/test/scala/mill/define/MacroErrorTests.scala @@ -30,7 +30,9 @@ object MacroErrorTests extends TestSuite{ } } """) - assert(e.msg.contains("required: mill.define.Module")) + assert(e.msg.contains( + "Modules, Targets and Commands can only be defined within a mill Module") + ) } 'neg - { @@ -72,7 +74,9 @@ object MacroErrorTests extends TestSuite{ def down = T{ TestUtil.test(left, right) } } """) - assert(borkedCachedDiamond1.msg.contains("required: mill.Module")) + assert(borkedCachedDiamond1.msg.contains( + "Modules, Targets and Commands can only be defined within a mill Module") + ) } } } diff --git a/core/src/test/scala/mill/discover/ConsistencyTests.scala b/core/src/test/scala/mill/discover/ConsistencyTests.scala index ae66b199..47eb14ce 100644 --- a/core/src/test/scala/mill/discover/ConsistencyTests.scala +++ b/core/src/test/scala/mill/discover/ConsistencyTests.scala @@ -1,7 +1,7 @@ package mill.discover -import mill.discover.Mirror.Segment.Label +import mill.define.Segment.Label import mill.util.TestGraphs import utest._ diff --git a/core/src/test/scala/mill/discover/CrossModuleTests.scala b/core/src/test/scala/mill/discover/CrossModuleTests.scala index 6ae3d622..7f5cb89c 100644 --- a/core/src/test/scala/mill/discover/CrossModuleTests.scala +++ b/core/src/test/scala/mill/discover/CrossModuleTests.scala @@ -2,8 +2,8 @@ package mill.discover import mill.{Module, T} import mill.define.Cross -import mill.discover.Mirror.Segment -import mill.discover.Mirror.Segment.Label +import mill.define.Segment +import mill.define.Segment.Label import mill.util.TestUtil.test import utest._ import mill.util.TestGraphs._ @@ -15,7 +15,7 @@ object CrossModuleTests extends TestSuite{ 'cross - { object outer extends TestUtil.BaseModule { object crossed extends mill.CrossModule(CrossedModule, "2.10.6", "2.11.8", "2.12.4") - case class CrossedModule(n: String) extends Module{ + case class CrossedModule(n: String, ctx0: Module.Ctx) extends Module()(ctx0){ def scalaVersion = n } } @@ -43,7 +43,7 @@ object CrossModuleTests extends TestSuite{ if !(platform == "native0.3" && scalaVersion == "2.10.6") } yield (platform, scalaVersion) object crossed extends mill.CrossModule2(CrossModule, crossMatrix:_*) - case class CrossModule(platform: String, scalaVersion: String) extends mill.Module{ + case class CrossModule(platform: String, scalaVersion: String, ctx0: Module.Ctx) extends mill.Module()(ctx0){ def suffix = Seq(scalaVersion, platform).filter(_.nonEmpty).map("_"+_).mkString } } diff --git a/core/src/test/scala/mill/discover/DiscoveredTests.scala b/core/src/test/scala/mill/discover/DiscoveredTests.scala index d141352e..83c92adc 100644 --- a/core/src/test/scala/mill/discover/DiscoveredTests.scala +++ b/core/src/test/scala/mill/discover/DiscoveredTests.scala @@ -5,7 +5,7 @@ import java.io.InputStreamReader import ammonite.main.Router.{ArgSig, EntryPoint} import utest._ import mill.{Module, T} -import mill.discover.Mirror.Segment.Label +import mill.define.Segment.Label import mill.util.TestGraphs.{TraitWithModuleObject, nestedModule} import mill.util.TestUtil object DiscoveredTests extends TestSuite{ diff --git a/core/src/test/scala/mill/discover/LabelingTests.scala b/core/src/test/scala/mill/discover/LabelingTests.scala index 595d3ad9..d1ac0536 100644 --- a/core/src/test/scala/mill/discover/LabelingTests.scala +++ b/core/src/test/scala/mill/discover/LabelingTests.scala @@ -1,10 +1,10 @@ package mill.discover -import mill.define.Task +import mill.define.{Segment, Task} import mill.util.TestGraphs import utest._ import Discovered.mapping -import mill.discover.Mirror.Segment.Label +import mill.define.Segment.Label object LabelingTests extends TestSuite{ val tests = Tests{ @@ -16,7 +16,7 @@ object LabelingTests extends TestSuite{ def check(mapping: Discovered.Mapping[_], t: Task[_], relPath: Option[String]) = { - val names: Seq[(Task[_], Seq[Mirror.Segment])] = mapping.targetsToSegments.toSeq + val names: Seq[(Task[_], Seq[Segment])] = mapping.targetsToSegments.toSeq val nameMap = names.toMap val targetLabel = nameMap.get(t).map(_.map{case Label(v) => v}.mkString(".")) diff --git a/core/src/test/scala/mill/main/MainTests.scala b/core/src/test/scala/mill/main/MainTests.scala index 320731fa..013729ff 100644 --- a/core/src/test/scala/mill/main/MainTests.scala +++ b/core/src/test/scala/mill/main/MainTests.scala @@ -1,7 +1,7 @@ package mill.main import mill.Module -import mill.define.Task +import mill.define.{Segment, Task} import mill.discover.{Discovered, Mirror} import mill.util.TestGraphs._ import mill.util.TestUtil.test @@ -14,7 +14,7 @@ object MainTests extends TestSuite{ val resolved = for{ args <- mill.main.RunScript.parseArgs(selectorString) - val crossSelectors = args.map{case Mirror.Segment.Cross(x) => x.toList.map(_.toString) case _ => Nil} + val crossSelectors = args.map{case Segment.Cross(x) => x.toList.map(_.toString) case _ => Nil} task <- mill.main.Resolve.resolve(args, mapping.mirror, mapping.base, Nil, crossSelectors, Nil) } yield task assert(resolved == expected) diff --git a/core/src/test/scala/mill/util/TestGraphs.scala b/core/src/test/scala/mill/util/TestGraphs.scala index 64fc4737..95ed8bf0 100644 --- a/core/src/test/scala/mill/util/TestGraphs.scala +++ b/core/src/test/scala/mill/util/TestGraphs.scala @@ -193,7 +193,7 @@ object TestGraphs{ object singleCross extends TestUtil.BaseModule { object cross extends mill.CrossModule(CrossModule, "210", "211", "212") - case class CrossModule(scalaVersion: String) extends Module{ + case class CrossModule(scalaVersion: String, ctx0: Module.Ctx) extends Module()(ctx0){ def suffix = T{ scalaVersion } } } @@ -204,16 +204,16 @@ object TestGraphs{ if !(platform == "native" && scalaVersion != "212") } yield (scalaVersion, platform) object cross extends mill.CrossModule2(CrossModule, crossMatrix:_*) - case class CrossModule(scalaVersion: String, platform: String) extends Module{ + case class CrossModule(scalaVersion: String, platform: String, ctx0: Module.Ctx) extends Module()(ctx0){ def suffix = T{ scalaVersion + "_" + platform } } } object indirectNestedCrosses extends TestUtil.BaseModule { object cross extends mill.CrossModule(CrossModule, "210", "211", "212") - case class CrossModule(scalaVersion: String) extends mill.Module{ + case class CrossModule(scalaVersion: String, ctx0: Module.Ctx) extends mill.Module()(ctx0){ object cross2 extends mill.CrossModule(CrossModule, "jvm", "js", "native") - case class CrossModule(platform: String) extends mill.Module{ + case class CrossModule(platform: String, ctx0: Module.Ctx) extends mill.Module{ def suffix = T{ scalaVersion + "_" + platform } } } @@ -221,9 +221,9 @@ object TestGraphs{ object nestedCrosses extends TestUtil.BaseModule { object cross extends mill.CrossModule(CrossModule, "210", "211", "212") - case class CrossModule(scalaVersion: String) extends mill.Module{ + case class CrossModule(scalaVersion: String, ctx0: Module.Ctx) extends mill.Module()(ctx0){ object cross2 extends mill.CrossModule(CrossModule, "jvm", "js", "native") - case class CrossModule(platform: String) extends mill.Module{ + case class CrossModule(platform: String, ctx0: Module.Ctx) extends mill.Module()(ctx0){ def suffix = T{ scalaVersion + "_" + platform } } } diff --git a/core/src/test/scala/mill/util/TestUtil.scala b/core/src/test/scala/mill/util/TestUtil.scala index 8f5378cb..88d28f8a 100644 --- a/core/src/test/scala/mill/util/TestUtil.scala +++ b/core/src/test/scala/mill/util/TestUtil.scala @@ -1,34 +1,32 @@ package mill.util import ammonite.main.Router.Overrides -import ammonite.ops.Path -import mill.define.Module -import mill.define.{BasePath, Caller, Target, Task} +import mill.define._ import mill.eval.Result import utest.assert -import utest.framework.TestPath import scala.collection.mutable object TestUtil { class BaseModule(implicit millModuleEnclosing0: sourcecode.Enclosing, millModuleLine0: sourcecode.Line, - millName0: sourcecode.Name) + millName0: sourcecode.Name, + overrides: Overrides) extends Module()( Module.Ctx.make( implicitly, implicitly, implicitly, - BasePath(ammonite.ops.pwd / millModuleEnclosing0.value) + BasePath(ammonite.ops.pwd / millModuleEnclosing0.value), + Segments(Nil), + implicitly ) ) object test{ def anon(inputs: Task[Int]*) = new Test(inputs) def apply(inputs: Task[Int]*) - (implicit enclosing0: sourcecode.Enclosing, - owner0: Caller[mill.Module], - name0: sourcecode.Name)= { + (implicit ctx: Module.Ctx)= { new TestTarget(inputs, pure = inputs.nonEmpty) } } @@ -51,17 +49,9 @@ object TestUtil { */ class TestTarget(inputs: Seq[Task[Int]], val pure: Boolean) - (implicit enclosing0: sourcecode.Enclosing, - lineNum0: sourcecode.Line, - owner0: Caller[mill.Module], - name0: sourcecode.Name, - o: Overrides) + (implicit ctx0: Module.Ctx) extends Test(inputs) with Target[Int]{ - val overrides = o.value - val enclosing = enclosing0.value - val lineNum = lineNum0.value - val owner = owner0.value - val name = name0.value + val ctx = ctx0.copy(segments0 = Segments(ctx0.segments0.value :+ ctx0.segment)) val readWrite = upickle.default.IntRW |