Skip to content

Commit 0c87e59

Browse files
committed
WIP
1 parent 0a98f6c commit 0c87e59

File tree

15 files changed

+59
-429
lines changed

15 files changed

+59
-429
lines changed
Lines changed: 50 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
package build
22
import mill.*, scalalib.*
33

4-
import mill.define._
5-
import mill.define.SelectMode
6-
import mill.api.Result.create
7-
import mill.api.Result
4+
import mill.api._
5+
import mill.api.daemon.SelectMode
86

97
object `package` extends ScalaModule {
108
def scalaVersion = "2.13.11"
@@ -18,26 +16,61 @@ object `package` extends ScalaModule {
1816
def testFramework = "utest.runner.Framework"
1917
}
2018

21-
def customSegmentCommand(evaluator: Evaluator, tasks: String*) = Task.Command(exclusive = true) {
22-
val segmentsResult = evaluator
23-
.resolveSegments(tasks, SelectMode.Multi)
24-
.get
25-
26-
segmentsResult.foreach { segment =>
27-
println(s"Segment: ${segment.render}")
19+
def depMapper(evaluator: Evaluator) = Task.Command(exclusive = true) {
20+
val tasks = Seq("mvnDeps", "test.mvnDeps", "allSourceFiles")
21+
val resolvedTasks = evaluator.resolveTasks(tasks, SelectMode.Multi).get
22+
val executeResult = evaluator.execute(resolvedTasks)
23+
24+
executeResult.values match {
25+
case mill.api.Result.Success(values) =>
26+
val mainDeps = values(0).asInstanceOf[Seq[mill.javalib.Dep]]
27+
val testDeps = values(1).asInstanceOf[Seq[mill.javalib.Dep]]
28+
val sourceFiles = values(2).asInstanceOf[Seq[mill.api.PathRef]].map(_.path)
29+
30+
println("--- Dependency Users Report ---")
31+
(mainDeps ++ testDeps).foreach { dep =>
32+
val depName = s"${dep.organization}:${dep.name}:${dep.version}"
33+
val usageInfo = findDependencyUsage(dep, sourceFiles)
34+
if (usageInfo.nonEmpty) {
35+
println(s"Dependency: $depName\nUsed By Files:")
36+
usageInfo.foreach { case (file, imports) =>
37+
println(s" - ${file.relativeTo(os.pwd)} (via: ${imports.mkString(", ")})")
38+
}
39+
println()
40+
}
41+
}
42+
println("--- End Report ---")
43+
case failure =>
44+
println(s"Task execution failed: $failure")
2845
}
29-
()
46+
}
47+
48+
def findDependencyUsage(dep: mill.javalib.Dep, sourceFiles: Seq[os.Path]): Seq[(os.Path, Seq[String])] = {
49+
sourceFiles.collect {
50+
case file =>
51+
val imports = extractImportsForDep(os.read(file), dep)
52+
if (imports.nonEmpty) Some((file, imports)) else None
53+
}.flatten
54+
}
55+
56+
def extractImportsForDep(content: String, dep: mill.javalib.Dep): Seq[String] = {
57+
val importRegex = """import\s+([^\s\n;]+)""".r
58+
59+
importRegex.findAllMatchIn(content)
60+
.map(_.group(1))
61+
.filter(_.startsWith(dep.name))
62+
.toSeq
63+
.distinct
3064
}
3165

3266
}
3367

34-
// This command resolves the segments of the given tasks and prints them.
35-
// The segments are the parts of the task names that are used to group tasks.
68+
// This command generates a report of dependency usage in source files.
69+
// It uses resolveTasks and execute to gather information about dependencies and their usage in source files
3670

3771
/** Usage
3872

39-
> ./mill customSegmentCommand compile test
40-
Segment: compile
41-
Segment: test
73+
> ./mill depMapper
74+
--- Dependency Users Report ---
4275

4376
*/

example/extending/evaluator/2-resolve-tasks/build.mill

Lines changed: 0 additions & 44 deletions
This file was deleted.

example/extending/evaluator/2-resolve-tasks/foo/src/Foo.scala

Lines changed: 0 additions & 16 deletions
This file was deleted.

example/extending/evaluator/2-resolve-tasks/foo/test/src/FooTests.scala

Lines changed: 0 additions & 18 deletions
This file was deleted.

example/extending/evaluator/3-plan/build.mill

Lines changed: 0 additions & 48 deletions
This file was deleted.

example/extending/evaluator/3-plan/foo/src/Foo.scala

Lines changed: 0 additions & 16 deletions
This file was deleted.

example/extending/evaluator/3-plan/foo/test/src/FooTests.scala

Lines changed: 0 additions & 18 deletions
This file was deleted.

example/extending/evaluator/4-execute/build.mill

Lines changed: 0 additions & 44 deletions
This file was deleted.

example/extending/evaluator/4-execute/foo/src/Foo.scala

Lines changed: 0 additions & 16 deletions
This file was deleted.

example/extending/evaluator/4-execute/foo/test/src/FooTests.scala

Lines changed: 0 additions & 18 deletions
This file was deleted.

0 commit comments

Comments
 (0)