Skip to content

Commit bdf56db

Browse files
Show workers in resolve / show / inspect too
1 parent e58b6b7 commit bdf56db

File tree

4 files changed

+50
-13
lines changed

4 files changed

+50
-13
lines changed

main/resolve/src/mill/resolve/Resolve.scala

+9-6
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,10 @@ object Resolve {
4141
allowPositionalCommandArgs: Boolean
4242
) = {
4343
val taskList = resolved.map {
44-
case r: Resolved.Target =>
44+
case r: Resolved.NamedTask =>
4545
val instantiated = ResolveCore
4646
.instantiateModule(rootModule, r.segments.init)
47-
.flatMap(instantiateTarget(r, _))
47+
.flatMap(instantiateNamedTask(r, _))
4848

4949
instantiated.map(Some(_))
5050

@@ -76,7 +76,7 @@ object Resolve {
7676

7777
directChildrenOrErr.flatMap(directChildren =>
7878
directChildren.head match {
79-
case r: Resolved.Target => instantiateTarget(r, value).map(Some(_))
79+
case r: Resolved.NamedTask => instantiateNamedTask(r, value).map(Some(_))
8080
case r: Resolved.Command =>
8181
instantiateCommand(
8282
rootModule,
@@ -104,13 +104,16 @@ object Resolve {
104104
items.distinctBy(_.ctx.segments)
105105
}
106106

107-
private def instantiateTarget(r: Resolved.Target, p: Module): Either[String, Target[_]] = {
107+
private def instantiateNamedTask(
108+
r: Resolved.NamedTask,
109+
p: Module
110+
): Either[String, NamedTask[_]] = {
108111
val definition = Reflect
109-
.reflect(p.getClass, classOf[Target[_]], _ == r.segments.parts.last, true)
112+
.reflect(p.getClass, classOf[NamedTask[_]], _ == r.segments.parts.last, true)
110113
.head
111114

112115
ResolveCore.catchWrapException(
113-
definition.invoke(p).asInstanceOf[Target[_]]
116+
definition.invoke(p).asInstanceOf[NamedTask[_]]
114117
)
115118
}
116119

main/resolve/src/mill/resolve/ResolveCore.scala

+6-6
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ private object ResolveCore {
2929

3030
object Resolved {
3131
case class Module(segments: Segments, cls: Class[_]) extends Resolved
32-
case class Target(segments: Segments) extends Resolved
32+
case class NamedTask(segments: Segments) extends Resolved
3333
case class Command(segments: Segments) extends Resolved
3434
}
3535

@@ -327,7 +327,7 @@ private object ResolveCore {
327327
.map(
328328
_.map {
329329
case (Resolved.Module(s, cls), _) => Resolved.Module(segments ++ s, cls)
330-
case (Resolved.Target(s), _) => Resolved.Target(segments ++ s)
330+
case (Resolved.NamedTask(s), _) => Resolved.NamedTask(segments ++ s)
331331
case (Resolved.Command(s), _) => Resolved.Command(segments ++ s)
332332
}
333333
.toSet
@@ -376,10 +376,10 @@ private object ResolveCore {
376376
}
377377
}
378378

379-
val targets = Reflect
380-
.reflect(cls, classOf[Target[_]], namePred, noParams = true)
379+
val namedTasks = Reflect
380+
.reflect(cls, classOf[NamedTask[_]], namePred, noParams = true)
381381
.map { m =>
382-
Resolved.Target(Segments.labels(decode(m.getName))) ->
382+
Resolved.NamedTask(Segments.labels(decode(m.getName))) ->
383383
None
384384
}
385385

@@ -388,7 +388,7 @@ private object ResolveCore {
388388
.map(m => decode(m.getName))
389389
.map { name => Resolved.Command(Segments.labels(name)) -> None }
390390

391-
modulesOrErr.map(_ ++ targets ++ commands)
391+
modulesOrErr.map(_ ++ namedTasks ++ commands)
392392
}
393393

394394
def notFoundResult(

main/src/mill/main/RunScript.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ object RunScript {
6262
case 0 =>
6363
val nameAndJson = for (t <- targets.toSeq) yield {
6464
t match {
65-
case t: mill.define.NamedTask[_] =>
65+
case t: mill.define.NamedTask[_] if t.writerOpt.nonEmpty =>
6666
val jsonFile = EvaluatorPaths.resolveDestPaths(evaluator.outPath, t).meta
6767
val metadata = upickle.default.read[Evaluator.Cached](ujson.read(jsonFile.toIO))
6868
Some((t.toString, metadata.value))

main/test/src/mill/main/MainModuleTests.scala

+34
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,12 @@ object MainModuleTests extends TestSuite {
2727
Map("1" -> "hello", "2" -> "world")
2828
}
2929
def helloCommand(x: Int, y: Task[String]) = Task.Command { (x, y(), hello()) }
30+
def helloWorker = Task.Worker {
31+
// non-serializable, but everything should work fine nonetheless
32+
new AutoCloseable {
33+
def close() = ()
34+
}
35+
}
3036
override lazy val millDiscover: Discover = Discover[this.type]
3137
}
3238

@@ -93,6 +99,16 @@ object MainModuleTests extends TestSuite {
9399
res.contains("hello")
94100
)
95101
}
102+
test("worker") - UnitTester(mainModule, null).scoped { eval =>
103+
val Right(result) = eval.apply("inspect", "helloWorker")
104+
105+
val Seq(res: String) = result.value
106+
assert(
107+
res.startsWith("helloWorker("),
108+
res.contains("MainModuleTests.scala:"),
109+
res.contains("hello")
110+
)
111+
}
96112
}
97113

98114
test("show") {
@@ -173,6 +189,12 @@ object MainModuleTests extends TestSuite {
173189
val Seq(res) = result.value
174190
assert(res == ujson.Arr(1337, "lol", ujson.Arr("hello", "world")))
175191
}
192+
193+
test("worker") {
194+
val Right(result) = evaluator.apply("show", "helloWorker")
195+
val Seq(res) = result.value
196+
assert(res == ujson.Obj())
197+
}
176198
}
177199

178200
test("showNamed") {
@@ -209,6 +231,18 @@ object MainModuleTests extends TestSuite {
209231
}
210232
}
211233

234+
test("resolve") {
235+
UnitTester(mainModule, null).scoped { eval =>
236+
val Right(result) = eval.apply("resolve", "_")
237+
238+
val Seq(res: Seq[String]) = result.value
239+
assert(res.contains("hello"))
240+
assert(res.contains("hello2"))
241+
assert(res.contains("helloCommand"))
242+
assert(res.contains("helloWorker"))
243+
}
244+
}
245+
212246
test("clean") {
213247
val ev = UnitTester(cleanModule, null)
214248
val out = ev.evaluator.outPath

0 commit comments

Comments
 (0)