Skip to content

Commit 0ccc1b3

Browse files
committed
Implement vertical alignment for relations
1 parent 4790a4f commit 0ccc1b3

1 file changed

Lines changed: 31 additions & 19 deletions

File tree

internal/zinc-core/src/main/scala/sbt/internal/inc/Relations.scala

Lines changed: 31 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -509,12 +509,20 @@ private abstract class MRelationsCommon(
509509
/** Making large Relations a little readable. */
510510
private val userDir = sys.props("user.dir").stripSuffix("/") + "/"
511511
private def nocwd(s: String) = s stripPrefix userDir
512-
private def line_s(kv: (Any, Any)) =
513-
" " + nocwd("" + kv._1) + " -> " + nocwd("" + kv._2) + "\n"
514-
protected def relation_s(r: Relation[_, _]) = (
512+
private def formatAsLines(kvs: Seq[(Any, Any)], indentation: String): Seq[String] = {
513+
val stringified = kvs.map { case (k, v) => nocwd(k.toString) -> nocwd(v.toString) }
514+
val longestKey = stringified.map(_._1.length).max
515+
stringified.map {
516+
case (k, v) =>
517+
indentation + " " + k.padTo(longestKey, ' ') + " -> " + v + "\n"
518+
}
519+
}
520+
protected def relation_s(r: Relation[_, _], indentation: String): String = {
515521
if (r.forwardMap.isEmpty) "Relation [ ]"
516-
else (r.all.toSeq.map(line_s).sorted) mkString ("Relation [\n", "", "]")
517-
)
522+
else
523+
formatAsLines(r.all.toSeq, indentation).sorted.mkString("Relation [\n", "", indentation + "]")
524+
}
525+
protected def relation_s(r: Relation[_, _]): String = relation_s(r, " ")
518526
}
519527

520528
/**
@@ -663,22 +671,26 @@ private class MRelationsNameHashing(
663671
(srcProd :: libraryDep :: libraryClassName :: memberRef :: inheritance :: classes :: Nil).hashCode
664672

665673
override def toString: String = {
666-
val internalDepsStr = (internalDependencies.dependencies map {
667-
case (k, vs) => k + " " + relation_s(vs)
668-
}).mkString("\n ", "\n ", "")
669-
val externalDepsStr = (externalDependencies.dependencies map {
670-
case (k, vs) => k + " " + relation_s(vs)
671-
}).mkString("\n ", "\n ", "")
674+
def color(s: String) = Console.YELLOW + s + Console.RESET
675+
def nestedRelation(deps: Map[_, Relation[_, _]]): String = {
676+
if (deps.isEmpty) "Relation [ ]"
677+
else {
678+
val indentation = " "
679+
deps
680+
.map { case (k, vs) => color(k.toString) + ": " + relation_s(vs, indentation) }
681+
.mkString("\n" + indentation, "\n" + indentation, "")
682+
}
683+
}
672684
s"""
673685
|Relations (with name hashing enabled):
674-
| products: ${relation_s(srcProd)}
675-
| library deps: ${relation_s(libraryDep)}
676-
| library class names: ${relation_s(libraryClassName)}
677-
| internalDependencies: $internalDepsStr
678-
| externalDependencies: $externalDepsStr
679-
| class names: ${relation_s(classes)}
680-
| used names: ${relation_s(names)}
681-
| product class names: ${relation_s(productClassName)}
686+
| ${color("products")}: ${relation_s(srcProd)}
687+
| ${color("library dependencies")}: ${relation_s(libraryDep)}
688+
| ${color("library class names")}: ${relation_s(libraryClassName)}
689+
| ${color("internal dependencies")}: ${nestedRelation(internalDependencies.dependencies)}
690+
| ${color("external dependencies")}: ${nestedRelation(externalDependencies.dependencies)}
691+
| ${color("class names")}: ${relation_s(classes)}
692+
| ${color("used names")}: ${relation_s(names)}
693+
| ${color("product class names")}: ${relation_s(productClassName)}
682694
""".trim.stripMargin
683695
}
684696
}

0 commit comments

Comments
 (0)