Skip to content

Commit fb36045

Browse files
committed
wip
1 parent eca5053 commit fb36045

File tree

3 files changed

+169
-143
lines changed

3 files changed

+169
-143
lines changed

core/eval/src/mill/eval/EvaluatorImpl.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ final class EvaluatorImpl private[mill] (
2525
private[mill] val allowPositionalCommandArgs: Boolean,
2626
private[mill] val selectiveExecution: Boolean = false,
2727
private val execution: Execution,
28-
scriptModuleResolver: (String, Map[String, String]) => Result[mill.api.ExternalModule]
28+
scriptModuleResolver: (String, Map[String, String]) => Option[Result[mill.api.ExternalModule]]
2929
) extends Evaluator {
3030

3131
private[mill] def workspace = execution.workspace

core/resolve/src/mill/resolve/Resolve.scala

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -308,23 +308,24 @@ private[mill] trait Resolve[T] {
308308
selectMode: SelectMode,
309309
allowPositionalCommandArgs: Boolean = false,
310310
resolveToModuleTasks: Boolean = false,
311-
scriptModuleResolver: String => Result[mill.api.ExternalModule]
311+
scriptModuleResolver: String => Option[Result[mill.api.ExternalModule]]
312312
): Result[List[T]] = {
313313
val nullCommandDefaults = selectMode == SelectMode.Multi
314314
val cache = new ResolveCore.Cache()
315315
def handleSingleFileModule(args: Seq[String], fallback: => Result[Seq[T]]): Result[Seq[T]] = {
316-
scriptModuleResolver(args.head).map { scriptModule =>
317-
resolveNonEmptyAndHandle(
318-
args.tail,
319-
scriptModule,
320-
Segments(),
321-
nullCommandDefaults,
322-
allowPositionalCommandArgs,
323-
resolveToModuleTasks
324-
)
325-
}match{
326-
case _: Result.Failure => fallback
327-
case Result.Success(r) => r
316+
scriptModuleResolver(args.head) match{
317+
case None => fallback
318+
case Some(resolved) =>
319+
resolved.flatMap( scriptModule =>
320+
resolveNonEmptyAndHandle(
321+
args.tail,
322+
scriptModule,
323+
Segments(),
324+
nullCommandDefaults,
325+
allowPositionalCommandArgs,
326+
resolveToModuleTasks
327+
)
328+
)
328329
}
329330
}
330331
val resolvedGroups = ParseArgs.separate(scriptArgs).map { group =>
Lines changed: 154 additions & 129 deletions
Original file line numberDiff line numberDiff line change
@@ -1,151 +1,176 @@
11
package mill.scripts
22
import mill.*
3-
import mill.api.Discover
4-
object ScriptModuleInit extends ((String, Map[String, String]) => mill.api.ExternalModule) {
3+
import mill.api.{Result, Discover}
4+
object ScriptModuleInit extends ((String, Map[String, String]) => Option[Result[mill.api.ExternalModule]]) {
55
def apply(millFileString: String, env: Map[String, String]) = {
66
val workspace = mill.api.BuildCtx.workspaceRoot
77
val millFile = os.Path(millFileString, workspace)
8-
val headerData = mill.constants.Util.readBuildHeader(millFile.toNIO, millFile.last, true)
9-
lazy val parsedHeaderData =
10-
upickle.read[Map[String, ujson.Value]](mill.internal.Util.parseHeaderData(headerData))
11-
12-
val testTarget = headerData.linesIterator.collectFirst { case s"tests: $target" => target }
13-
val testTrait = headerData.linesIterator.collectFirst { case s"testTrait: $target" => target }
14-
val bootstrapModule = testTarget match {
15-
case None => millFile.ext match {
16-
case "java" =>
17-
new ScriptModule.Java(millFile) with ScriptModule.Publish {
18-
override lazy val millDiscover = Discover[this.type]
19-
override def buildOverrides = parsedHeaderData
20-
}
21-
case "scala" =>
22-
new ScriptModule.Scala(millFile) with ScriptModule.Publish {
23-
override lazy val millDiscover = Discover[this.type]
24-
override def buildOverrides = parsedHeaderData
25-
}
26-
case "kt" =>
27-
new ScriptModule.Kotlin(millFile) with ScriptModule.Publish {
28-
override lazy val millDiscover = Discover[this.type]
29-
override def buildOverrides = parsedHeaderData
30-
}
31-
}
32-
case Some(targetName) =>
33-
val targetPath = millFile / os.up / targetName
34-
import mill.javalib.TestModule.*
35-
millFile.ext match {
36-
case "java" =>
37-
val targetYamlHeader =
38-
mill.constants.Util.readBuildHeader(targetPath.toNIO, targetPath.last, true)
39-
val targetModule = new ScriptModule.Java(targetPath) with ScriptModule.Publish {
40-
override lazy val millDiscover = Discover[this.type]
41-
override def buildOverrides = parsedHeaderData
42-
}
43-
val testModule = testTrait match {
44-
case Some("TestNG") =>
45-
new ScriptModule.Java(millFile) with targetModule.JavaTests with TestNg {
46-
override lazy val millDiscover = Discover[this.type]
47-
override def buildOverrides = parsedHeaderData
48-
}
49-
case Some("Junit4") =>
50-
new ScriptModule.Java(millFile) with targetModule.JavaTests with Junit4 {
51-
override lazy val millDiscover = Discover[this.type]
52-
override def buildOverrides = parsedHeaderData
53-
}
54-
case Some("Junit5") =>
55-
new ScriptModule.Java(millFile) with targetModule.JavaTests with Junit5 {
56-
override lazy val millDiscover = Discover[this.type]
57-
override def buildOverrides = parsedHeaderData
58-
}
59-
}
60-
testModule
61-
62-
case "scala" =>
63-
val targetYamlHeader =
64-
mill.constants.Util.readBuildHeader(targetPath.toNIO, targetPath.last, true)
65-
val targetModule = new ScriptModule.Scala(targetPath) with ScriptModule.Publish {
66-
override lazy val millDiscover = Discover[this.type]
67-
override def buildOverrides = parsedHeaderData
68-
}
69-
val testModule = testTrait match {
70-
case Some("TestNG") =>
71-
new ScriptModule.Scala(millFile) with targetModule.ScalaTests with TestNg {
72-
override lazy val millDiscover = Discover[this.type]
73-
override def buildOverrides = parsedHeaderData
74-
}
75-
case Some("Junit4") =>
76-
new ScriptModule.Scala(millFile) with targetModule.ScalaTests with Junit4 {
77-
override lazy val millDiscover = Discover[this.type]
78-
override def buildOverrides = parsedHeaderData
79-
}
80-
case Some("Junit5") =>
81-
new ScriptModule.Scala(millFile) with targetModule.ScalaTests with Junit5 {
82-
override lazy val millDiscover = Discover[this.type]
83-
override def buildOverrides = parsedHeaderData
84-
}
85-
case Some("Scalatest") =>
86-
new ScriptModule.Scala(millFile) with targetModule.ScalaTests with ScalaTest {
87-
override lazy val millDiscover = Discover[this.type]
88-
override def buildOverrides = parsedHeaderData
89-
}
90-
case Some("Specs2") =>
91-
new ScriptModule.Scala(millFile) with targetModule.ScalaTests with Specs2 {
92-
override lazy val millDiscover = Discover[this.type]
93-
override def buildOverrides = parsedHeaderData
94-
}
95-
case Some("Utest") =>
96-
new ScriptModule.Scala(millFile) with targetModule.ScalaTests with Utest {
97-
override lazy val millDiscover = Discover[this.type]
98-
override def buildOverrides = parsedHeaderData
99-
}
100-
case Some("Munit") =>
101-
new ScriptModule.Scala(millFile) with targetModule.ScalaTests with Munit {
102-
override lazy val millDiscover = Discover[this.type]
103-
override def buildOverrides = parsedHeaderData
104-
}
105-
case Some("Weaver") =>
106-
new ScriptModule.Scala(millFile) with targetModule.ScalaTests with Weaver {
8+
Option.when(os.exists(millFile)) {
9+
Result.create {
10+
val headerData = mill.constants.Util.readBuildHeader(millFile.toNIO, millFile.last, true)
11+
lazy val parsedHeaderData =
12+
upickle.read[Map[String, ujson.Value]](mill.internal.Util.parseHeaderData(headerData))
13+
14+
val testTarget = headerData.linesIterator.collectFirst { case s"tests: $target" => target }
15+
val testTrait = headerData.linesIterator.collectFirst { case s"testTrait: $target" => target }
16+
val bootstrapModule = testTarget match {
17+
case None => millFile.ext match {
18+
case "java" =>
19+
new ScriptModule.Java(millFile) with ScriptModule.Publish {
20+
override lazy val millDiscover = Discover[this.type]
21+
22+
override def buildOverrides = parsedHeaderData
23+
}
24+
case "scala" =>
25+
new ScriptModule.Scala(millFile) with ScriptModule.Publish {
26+
override lazy val millDiscover = Discover[this.type]
27+
28+
override def buildOverrides = parsedHeaderData
29+
}
30+
case "kt" =>
31+
new ScriptModule.Kotlin(millFile) with ScriptModule.Publish {
32+
override lazy val millDiscover = Discover[this.type]
33+
34+
override def buildOverrides = parsedHeaderData
35+
}
36+
}
37+
case Some(targetName) =>
38+
val targetPath = millFile / os.up / targetName
39+
import mill.javalib.TestModule.*
40+
millFile.ext match {
41+
case "java" =>
42+
val targetYamlHeader =
43+
mill.constants.Util.readBuildHeader(targetPath.toNIO, targetPath.last, true)
44+
val targetModule = new ScriptModule.Java(targetPath) with ScriptModule.Publish {
10745
override lazy val millDiscover = Discover[this.type]
46+
10847
override def buildOverrides = parsedHeaderData
10948
}
110-
case Some("ZioTest") =>
111-
new ScriptModule.Scala(millFile) with targetModule.ScalaTests with ZioTest {
112-
override lazy val millDiscover = Discover[this.type]
113-
override def buildOverrides = parsedHeaderData
49+
val testModule = testTrait match {
50+
case Some("TestNG") =>
51+
new ScriptModule.Java(millFile) with targetModule.JavaTests with TestNg {
52+
override lazy val millDiscover = Discover[this.type]
53+
54+
override def buildOverrides = parsedHeaderData
55+
}
56+
case Some("Junit4") =>
57+
new ScriptModule.Java(millFile) with targetModule.JavaTests with Junit4 {
58+
override lazy val millDiscover = Discover[this.type]
59+
60+
override def buildOverrides = parsedHeaderData
61+
}
62+
case Some("Junit5") =>
63+
new ScriptModule.Java(millFile) with targetModule.JavaTests with Junit5 {
64+
override lazy val millDiscover = Discover[this.type]
65+
66+
override def buildOverrides = parsedHeaderData
67+
}
11468
}
115-
case Some("ScalaCheck") =>
116-
new ScriptModule.Scala(millFile) with targetModule.ScalaTests with ScalaCheck {
69+
testModule
70+
71+
case "scala" =>
72+
val targetYamlHeader =
73+
mill.constants.Util.readBuildHeader(targetPath.toNIO, targetPath.last, true)
74+
val targetModule = new ScriptModule.Scala(targetPath) with ScriptModule.Publish {
11775
override lazy val millDiscover = Discover[this.type]
76+
11877
override def buildOverrides = parsedHeaderData
11978
}
120-
}
121-
testModule
79+
val testModule = testTrait match {
80+
case Some("TestNG") =>
81+
new ScriptModule.Scala(millFile) with targetModule.ScalaTests with TestNg {
82+
override lazy val millDiscover = Discover[this.type]
12283

123-
case "kt" =>
124-
val targetYamlHeader =
125-
mill.constants.Util.readBuildHeader(targetPath.toNIO, targetPath.last, true)
126-
val targetModule = new ScriptModule.Kotlin(targetPath) with ScriptModule.Publish {
127-
override lazy val millDiscover = Discover[this.type]
128-
}
129-
val testModule = testTrait match {
130-
case Some("TestNG") =>
131-
new ScriptModule.Kotlin(millFile) with targetModule.KotlinTests with TestNg {
132-
override lazy val millDiscover = Discover[this.type]
133-
override def buildOverrides = parsedHeaderData
84+
override def buildOverrides = parsedHeaderData
85+
}
86+
case Some("Junit4") =>
87+
new ScriptModule.Scala(millFile) with targetModule.ScalaTests with Junit4 {
88+
override lazy val millDiscover = Discover[this.type]
89+
90+
override def buildOverrides = parsedHeaderData
91+
}
92+
case Some("Junit5") =>
93+
new ScriptModule.Scala(millFile) with targetModule.ScalaTests with Junit5 {
94+
override lazy val millDiscover = Discover[this.type]
95+
96+
override def buildOverrides = parsedHeaderData
97+
}
98+
case Some("Scalatest") =>
99+
new ScriptModule.Scala(millFile) with targetModule.ScalaTests with ScalaTest {
100+
override lazy val millDiscover = Discover[this.type]
101+
102+
override def buildOverrides = parsedHeaderData
103+
}
104+
case Some("Specs2") =>
105+
new ScriptModule.Scala(millFile) with targetModule.ScalaTests with Specs2 {
106+
override lazy val millDiscover = Discover[this.type]
107+
108+
override def buildOverrides = parsedHeaderData
109+
}
110+
case Some("Utest") =>
111+
new ScriptModule.Scala(millFile) with targetModule.ScalaTests with Utest {
112+
override lazy val millDiscover = Discover[this.type]
113+
114+
override def buildOverrides = parsedHeaderData
115+
}
116+
case Some("Munit") =>
117+
new ScriptModule.Scala(millFile) with targetModule.ScalaTests with Munit {
118+
override lazy val millDiscover = Discover[this.type]
119+
120+
override def buildOverrides = parsedHeaderData
121+
}
122+
case Some("Weaver") =>
123+
new ScriptModule.Scala(millFile) with targetModule.ScalaTests with Weaver {
124+
override lazy val millDiscover = Discover[this.type]
125+
126+
override def buildOverrides = parsedHeaderData
127+
}
128+
case Some("ZioTest") =>
129+
new ScriptModule.Scala(millFile) with targetModule.ScalaTests with ZioTest {
130+
override lazy val millDiscover = Discover[this.type]
131+
132+
override def buildOverrides = parsedHeaderData
133+
}
134+
case Some("ScalaCheck") =>
135+
new ScriptModule.Scala(millFile) with targetModule.ScalaTests with ScalaCheck {
136+
override lazy val millDiscover = Discover[this.type]
137+
138+
override def buildOverrides = parsedHeaderData
139+
}
134140
}
135-
case Some("Junit4") =>
136-
new ScriptModule.Kotlin(millFile) with targetModule.KotlinTests with Junit4 {
141+
testModule
142+
143+
case "kt" =>
144+
val targetYamlHeader =
145+
mill.constants.Util.readBuildHeader(targetPath.toNIO, targetPath.last, true)
146+
val targetModule = new ScriptModule.Kotlin(targetPath) with ScriptModule.Publish {
137147
override lazy val millDiscover = Discover[this.type]
138-
override def buildOverrides = parsedHeaderData
139148
}
140-
case Some("Junit5") =>
141-
new ScriptModule.Kotlin(millFile) with targetModule.KotlinTests with Junit5 {
142-
override lazy val millDiscover = Discover[this.type]
143-
override def buildOverrides = parsedHeaderData
149+
val testModule = testTrait match {
150+
case Some("TestNG") =>
151+
new ScriptModule.Kotlin(millFile) with targetModule.KotlinTests with TestNg {
152+
override lazy val millDiscover = Discover[this.type]
153+
154+
override def buildOverrides = parsedHeaderData
155+
}
156+
case Some("Junit4") =>
157+
new ScriptModule.Kotlin(millFile) with targetModule.KotlinTests with Junit4 {
158+
override lazy val millDiscover = Discover[this.type]
159+
160+
override def buildOverrides = parsedHeaderData
161+
}
162+
case Some("Junit5") =>
163+
new ScriptModule.Kotlin(millFile) with targetModule.KotlinTests with Junit5 {
164+
override lazy val millDiscover = Discover[this.type]
165+
166+
override def buildOverrides = parsedHeaderData
167+
}
144168
}
169+
testModule
145170
}
146-
testModule
147171
}
172+
bootstrapModule
173+
}
148174
}
149-
bootstrapModule
150175
}
151176
}

0 commit comments

Comments
 (0)