Skip to content

Commit 44f492a

Browse files
Remove stale script module resolution code (#6061)
Fixes #6059 This code was hanging around from an earlier iteration of the config-based/script module design (#5836), where we loaded config-based modules dynamically, and caused the spurious resolution attempts and stack traces linked above. Since config-based modules are now done during codegen and not resolved dynamically, we can remove this extra resolution logic and simplify the code paths substantially --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
1 parent 8c6cd67 commit 44f492a

File tree

6 files changed

+23
-79
lines changed

6 files changed

+23
-79
lines changed

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

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +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: (
29-
String,
30-
String => Option[mill.Module],
31-
Boolean,
32-
Option[String]
33-
) => Seq[Result[mill.api.ExternalModule]]
28+
scriptModuleResolver: (String, String => Option[Module]) => Seq[Result[ExternalModule]]
3429
) extends Evaluator {
3530

3631
private[mill] def workspace = execution.workspace
@@ -75,7 +70,7 @@ final class EvaluatorImpl private[mill] (
7570
selectMode,
7671
allowPositionalCommandArgs,
7772
resolveToModuleTasks,
78-
scriptModuleResolver = scriptModuleResolver(_, resolveScriptModuleDep, _, _)
73+
scriptModuleResolver = scriptModuleResolver(_, resolveScriptModuleDep)
7974
)
8075
}
8176
}
@@ -92,7 +87,7 @@ final class EvaluatorImpl private[mill] (
9287
selectMode,
9388
allowPositionalCommandArgs,
9489
resolveToModuleTasks,
95-
scriptModuleResolver = scriptModuleResolver(_, resolveScriptModuleDep, _, _)
90+
scriptModuleResolver = scriptModuleResolver(_, resolveScriptModuleDep)
9691
)
9792
}
9893
}
@@ -115,7 +110,7 @@ final class EvaluatorImpl private[mill] (
115110
selectMode,
116111
allowPositionalCommandArgs,
117112
resolveToModuleTasks,
118-
scriptModuleResolver = scriptModuleResolver(_, resolveScriptModuleDep, _, _)
113+
scriptModuleResolver = scriptModuleResolver(_, resolveScriptModuleDep)
119114
)
120115
}
121116
}
@@ -134,7 +129,7 @@ final class EvaluatorImpl private[mill] (
134129
selectMode,
135130
allowPositionalCommandArgs,
136131
resolveToModuleTasks,
137-
scriptModuleResolver = scriptModuleResolver(_, resolveScriptModuleDep, _, _)
132+
scriptModuleResolver = scriptModuleResolver(_, resolveScriptModuleDep)
138133
)
139134
}
140135
}
@@ -296,7 +291,7 @@ final class EvaluatorImpl private[mill] (
296291
scriptArgs,
297292
selectMode,
298293
allowPositionalCommandArgs,
299-
scriptModuleResolver = scriptModuleResolver(_, resolveScriptModuleDep, _, _)
294+
scriptModuleResolver = scriptModuleResolver(_, resolveScriptModuleDep)
300295
)
301296
}
302297
}

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

Lines changed: 7 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -310,14 +310,10 @@ private[mill] trait Resolve[T] {
310310
selectMode: SelectMode,
311311
allowPositionalCommandArgs: Boolean = false,
312312
resolveToModuleTasks: Boolean = false,
313-
scriptModuleResolver: (
314-
String,
315-
Boolean,
316-
Option[String]
317-
) => Seq[Result[mill.api.ExternalModule]]
313+
scriptModuleResolver: String => Seq[Result[mill.api.ExternalModule]]
318314
): Result[List[T]] = {
319315
val nullCommandDefaults = selectMode == SelectMode.Multi
320-
val cache = new ResolveCore.Cache(scriptModuleChildResolver = scriptModuleResolver(_, true, _))
316+
val cache = new ResolveCore.Cache()
321317
def handleScriptModule(args: Seq[String], fallback: => Result[Seq[T]]): Result[Seq[T]] = {
322318
val (first, selector, remaining) = args match {
323319
case Seq(s"$prefix:$suffix", rest*) => (prefix, Some(suffix), rest)
@@ -336,21 +332,14 @@ private[mill] trait Resolve[T] {
336332
Segments.labels(segments*),
337333
nullCommandDefaults,
338334
allowPositionalCommandArgs,
339-
resolveToModuleTasks,
340-
scriptModuleResolver
335+
resolveToModuleTasks
341336
)
342337
)
343338
}
344339

345-
scriptModuleResolver(first, false, None) match {
340+
scriptModuleResolver(first) match {
346341
case Seq(resolved) => handleResolved(resolved, selector.toSeq, remaining)
347-
case Nil =>
348-
if (selector.isEmpty) { // if the `:selector` is empty, try treating the `first` as a selector
349-
scriptModuleResolver(".", false, None) match {
350-
case Seq(resolved) => handleResolved(resolved, Seq(first), remaining)
351-
case Nil => fallback
352-
}
353-
} else fallback
342+
case Nil => fallback
354343
}
355344
}
356345
val resolvedGroups = ParseArgs.separate(scriptArgs).map { group =>
@@ -392,14 +381,9 @@ private[mill] trait Resolve[T] {
392381
sel: Segments,
393382
nullCommandDefaults: Boolean,
394383
allowPositionalCommandArgs: Boolean,
395-
resolveToModuleTasks: Boolean,
396-
scriptModuleResolver: (
397-
String,
398-
Boolean,
399-
Option[String]
400-
) => Seq[Result[mill.api.ExternalModule]]
384+
resolveToModuleTasks: Boolean
401385
): Result[Seq[T]] = {
402-
val cache = new ResolveCore.Cache(scriptModuleChildResolver = scriptModuleResolver(_, true, _))
386+
val cache = new ResolveCore.Cache()
403387
resolveNonEmptyAndHandle2(
404388
rootModule,
405389
args,

core/resolve/src/mill/resolve/ResolveCore.scala

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,7 @@ private object ResolveCore {
5959
java.lang.reflect.Method,
6060
String
6161
)]] =
62-
collection.mutable.Map(),
63-
val scriptModuleChildResolver: (
64-
String,
65-
Option[String]
66-
) => Seq[mill.api.Result[mill.api.ExternalModule]]
62+
collection.mutable.Map()
6763
) {
6864
def decode(s: String): String = {
6965
decodedNames.getOrElseUpdate(s, scala.reflect.NameTransformer.decode(s))
@@ -429,7 +425,7 @@ private object ResolveCore {
429425
)
430426
}
431427
} else mill.api.Result.Success {
432-
val reflectMemberObjects = Reflect
428+
Reflect
433429
.reflectNestedObjects02[Module](cls, namePred, cache.getMethods)
434430
.collect {
435431
case (name, memberCls, getter) =>
@@ -439,18 +435,6 @@ private object ResolveCore {
439435
(resolved, getter2)
440436
}
441437
.toSeq
442-
443-
val simpleModuleObjects =
444-
if (!segments.value.forall(_.isInstanceOf[Segment.Label])) Nil
445-
else {
446-
val scriptKey = segments.value.flatMap(_.pathSegments).mkString("/")
447-
val resolvedScript = cache.scriptModuleChildResolver(scriptKey, nameOpt)
448-
for (mod <- resolvedScript) yield {
449-
val newSegments = Segments.labels(mod.get.moduleSegments.last.value)
450-
(Resolved.Module(newSegments, mod.get.getClass), Some((_: Module) => mod))
451-
}
452-
}
453-
reflectMemberObjects ++ simpleModuleObjects
454438
}
455439
}
456440

core/resolve/test/src/mill/resolve/Checker.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ class Checker[T <: RootModule0](module: T) {
5353
SelectMode.Separated,
5454
false,
5555
false,
56-
(_, _, _) => Nil
56+
_ => Nil
5757
)
5858
}
5959

@@ -64,7 +64,7 @@ class Checker[T <: RootModule0](module: T) {
6464
SelectMode.Separated,
6565
false,
6666
false,
67-
(_, _, _) => Nil
67+
_ => Nil
6868
).map(_.map(_.render))
6969
}
7070
}

libs/script/src/ScriptModuleInit.scala

Lines changed: 4 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,7 @@ import mill.api.{ExternalModule, Result}
44
import mill.script.ScriptModule.parseHeaderData
55

66
object ScriptModuleInit
7-
extends (
8-
(
9-
String,
10-
String => Option[mill.Module],
11-
Boolean,
12-
Option[String]
13-
) => Seq[Result[mill.api.ExternalModule]]
14-
) {
7+
extends ((String, String => Option[mill.Module]) => Seq[Result[mill.api.ExternalModule]]) {
158

169
// Cache instantiated script modules on a per-classloader basis. This lets us avoid
1710
// instantiating the same script twice, e.g. once directly and once when resolving a
@@ -156,24 +149,12 @@ object ScriptModuleInit
156149

157150
def apply(
158151
scriptFileString: String,
159-
resolveModuleDep: String => Option[mill.Module],
160-
resolveChildren: Boolean,
161-
nameOpt: Option[String]
152+
resolveModuleDep: String => Option[mill.Module]
162153
) = {
163-
val workspace = mill.api.BuildCtx.workspaceRoot
154+
mill.api.BuildCtx.workspaceRoot
164155

165156
mill.api.BuildCtx.withFilesystemCheckerDisabled {
166-
val scriptFile0 = os.Path(scriptFileString, workspace)
167-
if (resolveChildren) {
168-
nameOpt match {
169-
case Some(n) => resolveScriptModule((scriptFile0 / n).toString, resolveModuleDep).toSeq
170-
case None =>
171-
if (!os.isDir(scriptFile0)) Nil
172-
else os.list(scriptFile0).filter(os.isDir).flatMap(p =>
173-
resolveScriptModule(p.toString, resolveModuleDep)
174-
)
175-
}
176-
} else resolveScriptModule(scriptFileString, resolveModuleDep).toSeq
157+
resolveScriptModule(scriptFileString, resolveModuleDep).toSeq
177158
}
178159
}
179160
}

testkit/src/mill/testkit/UnitTester.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ class UnitTester(
143143
allowPositionalCommandArgs = false,
144144
selectiveExecution = false,
145145
execution = execution,
146-
scriptModuleResolver = (_, _, _, _) => Nil
146+
scriptModuleResolver = (_, _) => Nil
147147
)
148148

149149
def apply(args: String*): Either[ExecResult.Failing[?], UnitTester.Result[Seq[?]]] = {
@@ -152,7 +152,7 @@ class UnitTester(
152152
evaluator.rootModule,
153153
args,
154154
SelectMode.Separated,
155-
scriptModuleResolver = (_, _, _) => Nil
155+
scriptModuleResolver = _ => Nil
156156
)
157157
} match {
158158
case Result.Failure(err) => Left(ExecResult.Failure(err))

0 commit comments

Comments
 (0)