summaryrefslogtreecommitdiff
path: root/main/src
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2018-09-20 14:15:50 +0800
committerGitHub <noreply@github.com>2018-09-20 14:15:50 +0800
commitd551ee9d751201491a1d64e4da76ab03e3815df6 (patch)
tree60471609f0957401fa1a7002578ad8c1acd6bc75 /main/src
parentc8fd6bd9e1dc18c24e64147fcd221e0bf91c2d06 (diff)
downloadmill-d551ee9d751201491a1d64e4da76ab03e3815df6.tar.gz
mill-d551ee9d751201491a1d64e4da76ab03e3815df6.tar.bz2
mill-d551ee9d751201491a1d64e4da76ab03e3815df6.zip
Include scaladoc as part of mill inspect (#435)
Diffstat (limited to 'main/src')
-rw-r--r--main/src/mill/main/MainModule.scala13
-rw-r--r--main/src/mill/main/MainRunner.scala4
-rw-r--r--main/src/mill/main/ReplApplyHandler.scala24
-rw-r--r--main/src/mill/main/Resolve.scala1
-rw-r--r--main/src/mill/main/VisualizeModule.scala1
-rw-r--r--main/src/mill/modules/Util.scala13
6 files changed, 50 insertions, 6 deletions
diff --git a/main/src/mill/main/MainModule.scala b/main/src/mill/main/MainModule.scala
index 834d5609..7e326860 100644
--- a/main/src/mill/main/MainModule.scala
+++ b/main/src/mill/main/MainModule.scala
@@ -135,6 +135,7 @@ trait MainModule extends mill.Module{
*/
def inspect(evaluator: Evaluator, targets: String*) = mill.T.command{
MainModule.resolveTasks(evaluator, targets, multiSelect = true){ tasks =>
+ val output = new StringBuilder
for{
task <- tasks
tree = ReplApplyHandler.pprintTask(task, evaluator)
@@ -149,8 +150,10 @@ trait MainModule extends mill.Module{
val truncated = new Truncated(rendered, defaults.defaultWidth, defaults.defaultHeight)
str <- truncated ++ Iterator("\n")
} {
- print(str)
+ output.append(str)
}
+ println(output)
+ output.toString
}
}
@@ -222,10 +225,17 @@ trait MainModule extends mill.Module{
}
}
+
+ /**
+ * Renders the dependencies between the given tasks as a SVG for you to look at
+ */
def visualize(evaluator: Evaluator, targets: String*) = mill.T.command{
visualize0(evaluator, targets, T.ctx(), mill.main.VisualizeModule.worker())
}
+ /**
+ * Renders the dependencies between the given tasks, and all their dependencies, as a SVG
+ */
def visualizePlan(evaluator: Evaluator, targets: String*) = mill.T.command{
plan0(evaluator, targets) match {
case Left(err) => Result.Failure(err)
@@ -258,5 +268,4 @@ trait MainModule extends mill.Module{
}
}
}
-
}
diff --git a/main/src/mill/main/MainRunner.scala b/main/src/mill/main/MainRunner.scala
index 30a23632..58c47998 100644
--- a/main/src/mill/main/MainRunner.scala
+++ b/main/src/mill/main/MainRunner.scala
@@ -144,7 +144,9 @@ class MainRunner(val config: ammonite.main.Cli.Config,
|$imports
|import mill._
|object $wrapName
- |extends mill.define.BaseModule(ammonite.ops.Path($literalPath), foreign0 = $external)
+ |extends mill.define.BaseModule(ammonite.ops.Path($literalPath), foreign0 = $external)(
+ | implicitly, implicitly, implicitly, implicitly, mill.define.Caller(())
+ |)
|with $wrapName{
| // Stub to make sure Ammonite has something to call after it evaluates a script,
| // even if it does nothing...
diff --git a/main/src/mill/main/ReplApplyHandler.scala b/main/src/mill/main/ReplApplyHandler.scala
index c40b82c9..59a6780b 100644
--- a/main/src/mill/main/ReplApplyHandler.scala
+++ b/main/src/mill/main/ReplApplyHandler.scala
@@ -6,6 +6,7 @@ import mill.define.Applicative.ApplyHandler
import mill.define.Segment.Label
import mill.define._
import mill.eval.{Evaluator, Result}
+
import mill.util.Strict.Agg
import scala.collection.mutable
@@ -69,6 +70,11 @@ object ReplApplyHandler{
)
}
+
+ def resolveParents(c: Class[_]): Seq[Class[_]] = {
+ Seq(c) ++ Option(c.getSuperclass).toSeq.flatMap(resolveParents) ++ c.getInterfaces.flatMap(resolveParents)
+ }
+
def pprintTask(t: NamedTask[_], evaluator: Evaluator) = {
val seen = mutable.Set.empty[Task[_]]
def rec(t: Task[_]): Seq[Segments] = {
@@ -81,10 +87,24 @@ object ReplApplyHandler{
t.inputs.flatMap(rec)
}
}
+
+ val annots = for {
+ c <- resolveParents(t.ctx.enclosingCls)
+ m <- c.getMethods
+ if m.getName == t.ctx.segment.pathSegments.head
+ a = m.getAnnotation(classOf[mill.moduledefs.Scaladoc])
+ if a != null
+ }yield a
+
+ val allDocs =
+ for(a <- annots.distinct)
+ yield mill.modules.Util.cleanupScaladoc(a.value).map("\n " + _).mkString
+
pprint.Tree.Lazy(ctx =>
Iterator(
- t.toString, "(", t.ctx.fileName.split('/').last, ":", t.ctx.lineNum.toString, ")",
- "\n", ctx.applyPrefixColor("Inputs:").toString
+ ctx.applyPrefixColor(t.toString).toString, "(", t.ctx.fileName.split('/').last, ":", t.ctx.lineNum.toString, ")",
+ allDocs.mkString("\n"), "\n",
+ "\n", ctx.applyPrefixColor("Inputs").toString, ":"
) ++ t.inputs.iterator.flatMap(rec).map("\n " + _.render)
)
}
diff --git a/main/src/mill/main/Resolve.scala b/main/src/mill/main/Resolve.scala
index d0a08c87..a2c186ed 100644
--- a/main/src/mill/main/Resolve.scala
+++ b/main/src/mill/main/Resolve.scala
@@ -219,6 +219,7 @@ object ResolveTasks extends Resolve[NamedTask[Any]]{
}
}
}
+
object Resolve{
def minimum(i1: Int, i2: Int, i3: Int)= math.min(math.min(i1, i2), i3)
diff --git a/main/src/mill/main/VisualizeModule.scala b/main/src/mill/main/VisualizeModule.scala
index 6945cf2f..ea4d46c6 100644
--- a/main/src/mill/main/VisualizeModule.scala
+++ b/main/src/mill/main/VisualizeModule.scala
@@ -10,7 +10,6 @@ import mill.T
import mill.define.{Discover, ExternalModule}
import mill.eval.{PathRef, Result}
-
object VisualizeModule extends ExternalModule with VisualizeModule {
def repositories = Seq(
Cache.ivy2Local,
diff --git a/main/src/mill/modules/Util.scala b/main/src/mill/modules/Util.scala
index 2d71c13e..38cd056b 100644
--- a/main/src/mill/modules/Util.scala
+++ b/main/src/mill/modules/Util.scala
@@ -7,6 +7,19 @@ import mill.eval.PathRef
import mill.util.{Ctx, IO, Loose}
object Util {
+ def cleanupScaladoc(v: String) = {
+ v.lines.map(
+ _.dropWhile(_.isWhitespace)
+ .stripPrefix("/**")
+ .stripPrefix("*/")
+ .stripPrefix("*")
+ .dropWhile(_.isWhitespace)
+ ).toArray
+ .dropWhile(_.isEmpty)
+ .reverse
+ .dropWhile(_.isEmpty)
+ .reverse
+ }
def download(url: String, dest: RelPath = "download")(implicit ctx: Ctx.Dest) = {
val out = ctx.dest / dest