aboutsummaryrefslogtreecommitdiff
path: root/doc-tool
diff options
context:
space:
mode:
authorFelix Mulder <felix.mulder@gmail.com>2017-01-21 19:56:10 +0100
committerFelix Mulder <felix.mulder@gmail.com>2017-01-31 14:32:40 +0100
commit3e9451d79b3e6845c4b1c0906401108a609eddf8 (patch)
tree66a01844ca1043f5dc5b16ea0c8d7da93d70479f /doc-tool
parent384f5a0dba5c2102327015c67781462ba475e43a (diff)
downloaddotty-3e9451d79b3e6845c4b1c0906401108a609eddf8.tar.gz
dotty-3e9451d79b3e6845c4b1c0906401108a609eddf8.tar.bz2
dotty-3e9451d79b3e6845c4b1c0906401108a609eddf8.zip
Fix insertion of package nodes in doc AST
Diffstat (limited to 'doc-tool')
-rw-r--r--doc-tool/resources/_layouts/api-page.html2
-rw-r--r--doc-tool/resources/css/dottydoc.css1
-rw-r--r--doc-tool/src/dotty/tools/dottydoc/core/DocASTPhase.scala102
-rw-r--r--doc-tool/src/dotty/tools/dottydoc/core/MiniPhaseTransform.scala44
-rw-r--r--doc-tool/src/dotty/tools/dottydoc/core/TypeLinkingPhases.scala6
-rw-r--r--doc-tool/src/dotty/tools/dottydoc/model/entities.scala9
-rw-r--r--doc-tool/src/dotty/tools/dottydoc/model/internal.scala62
-rw-r--r--doc-tool/src/dotty/tools/dottydoc/model/java.scala24
-rw-r--r--doc-tool/src/dotty/tools/dottydoc/staticsite/Site.scala2
-rw-r--r--doc-tool/src/dotty/tools/dottydoc/util/mutate.scala2
-rw-r--r--doc-tool/src/dotty/tools/dottydoc/util/traversing.scala (renamed from doc-tool/src/dotty/tools/dottydoc/util/Traversing.scala)18
-rw-r--r--doc-tool/test/ConstructorTest.scala14
-rw-r--r--doc-tool/test/PackageStructure.scala8
-rw-r--r--doc-tool/test/UsecaseTest.scala10
14 files changed, 205 insertions, 99 deletions
diff --git a/doc-tool/resources/_layouts/api-page.html b/doc-tool/resources/_layouts/api-page.html
index 280c81af5..0e39f9d91 100644
--- a/doc-tool/resources/_layouts/api-page.html
+++ b/doc-tool/resources/_layouts/api-page.html
@@ -31,7 +31,7 @@ extraCSS:
<div id="entity-members" class="entity-section {% if entity.hasVisibleMembers == false %}empty{% endif %}">
{% for member in entity.members %}
- <div class="member {% if member.isPrivate %}private{% elsif member.isProtected %}protected{% endif %}">
+ <div id="{{ member.signature }}" class="member {% if member.isPrivate %}private{% elsif member.isProtected %}protected{% endif %}">
<div class="member-title">
<span class="member-annotations">
{% for annot in member.annotations %}@{{ annot | split: '.' | last }} {% endfor %}
diff --git a/doc-tool/resources/css/dottydoc.css b/doc-tool/resources/css/dottydoc.css
index ab64882ea..6551950ca 100644
--- a/doc-tool/resources/css/dottydoc.css
+++ b/doc-tool/resources/css/dottydoc.css
@@ -23,6 +23,7 @@ div.index-wrapper {
left: 0;
height: 100%;
overflow-y: auto;
+ overflow-x: hidden;
}
div#content-body {
diff --git a/doc-tool/src/dotty/tools/dottydoc/core/DocASTPhase.scala b/doc-tool/src/dotty/tools/dottydoc/core/DocASTPhase.scala
index 411818614..72953b5a8 100644
--- a/doc-tool/src/dotty/tools/dottydoc/core/DocASTPhase.scala
+++ b/doc-tool/src/dotty/tools/dottydoc/core/DocASTPhase.scala
@@ -23,7 +23,7 @@ class DocASTPhase extends Phase {
import util.traversing._
import util.internal.setters._
- def phaseName = "docphase"
+ def phaseName = "docASTPhase"
/** Build documentation hierarchy from existing tree */
def collect(tree: Tree, prev: List[String] = Nil)(implicit ctx: Context): Entity = {
@@ -64,7 +64,6 @@ class DocASTPhase extends Phase {
// don't add privates, synthetics or class parameters (i.e. value class constructor val)
val vals = sym.info.fields.filterNot(_.symbol.is(Flags.ParamAccessor | Flags.Private | Flags.Synthetic)).map { value =>
- println(value + " " + value.symbol.flags)
val kind = if (value.symbol.is(Flags.Mutable)) "var" else "val"
ValImpl(
value.symbol,
@@ -87,7 +86,7 @@ class DocASTPhase extends Phase {
/** package */
case pd @ PackageDef(pid, st) =>
val pkgPath = path(pd.symbol)
- addEntity(PackageImpl(pd.symbol, annotations(pd.symbol), pd.symbol.showFullName, collectEntityMembers(st, pkgPath), pkgPath))
+ addPackage(PackageImpl(pd.symbol, annotations(pd.symbol), pd.symbol.showFullName, collectEntityMembers(st, pkgPath), pkgPath))
/** type alias */
case t: TypeDef if !t.isClassDef =>
@@ -111,7 +110,7 @@ class DocASTPhase extends Phase {
/** class / case class */
case c @ TypeDef(n, rhs) if c.symbol.isClass =>
//TODO: should not `collectMember` from `rhs` - instead: get from symbol, will get inherited members as well
- (c.symbol, annotations(c.symbol), n.show, collectMembers(rhs), flags(c), path(c.symbol), typeParams(c.symbol), constructors(c.symbol), superTypes(c), None, Nil) match {
+ (c.symbol, annotations(c.symbol), n.show, collectMembers(rhs), flags(c), path(c.symbol), typeParams(c.symbol), constructors(c.symbol), superTypes(c), None, Nil, NonEntity) match {
case x if c.symbol.is(Flags.CaseClass) => CaseClassImpl.tupled(x)
case x => ClassImpl.tupled(x)
}
@@ -132,29 +131,90 @@ class DocASTPhase extends Phase {
}
}
- var packages: Map[String, Package] = Map.empty
+ var packages: Map[String, PackageImpl] = Map.empty
- def addEntity(p: Package): Package = {
- def mergedChildren(x1s: List[Entity], x2s: List[Entity]): List[Entity] = {
- val (packs1, others1) = x1s.partition(_.kind == "package")
- val (packs2, others2) = x2s.partition(_.kind == "package")
+ def addPackage(newPkg: PackageImpl): Package = {
+ def mergeMembers(newPkg: PackageImpl, oldPkg: PackageImpl): Unit = {
+ val othersNew = newPkg.members.filterNot(_.kind == "package")
+ val (oldPacks, othersOld) = oldPkg.members.partition(_.kind == "package")
- val others = others1 ::: others2
- val packs = (packs1 ::: packs2).groupBy(_.path).map(_._2.head)
+ val others = othersNew ::: othersOld
+ // here we can just choose the old packs, since we're recursively (bottom up)
+ // discovering the tree, we should have met the child packages first, as
+ // such - they were already inserted into the tree
+ val newMembers = (others ++ oldPacks)
- (others ++ packs).sortBy(_.name)
+ oldPkg.members = newMembers
}
- val path = p.path.mkString(".")
- val newPack = packages.get(path).map {
- case ex: PackageImpl =>
- if (!ex.comment.isDefined) ex.comment = p.comment
- ex.members = mergedChildren(ex.members, p.members)
- ex
- }.getOrElse(p)
+ // This function mutates packages in place as not to create any orphaned references
+ def mergedPackages(old: PackageImpl, newPkg: PackageImpl): PackageImpl = {
+ if (old.symbol eq NoSymbol) old.symbol = newPkg.symbol
+ if (old.annotations.isEmpty) old.annotations = newPkg.annotations
+ mergeMembers(newPkg, old)
+ if (old.superTypes.isEmpty) old.superTypes = newPkg.superTypes
+ if (!old.comment.isDefined) old.comment = newPkg.comment
+ old
+ }
+
+ def insertOrModifyRoot(): PackageImpl = {
+ val modifiedPkg =
+ packages
+ .get(newPkg.name)
+ .map(mergedPackages(_, newPkg))
+ .getOrElse(newPkg)
+
+ packages = packages + (modifiedPkg.name -> modifiedPkg)
+ modifiedPkg
+ }
- packages = packages + (path -> newPack)
- newPack
+ // This function inserts a package by creating empty packages to the point
+ // where it can insert the supplied package `newPkg`.
+ def createAndInsert(currentPkg: PackageImpl, path: List[String]): PackageImpl = {
+ (path: @unchecked) match {
+ case x :: Nil => {
+ val existingPkg = currentPkg.members.collect {
+ case p: PackageImpl if p.name == newPkg.name => p
+ }.headOption
+
+ if (existingPkg.isDefined) mergedPackages(existingPkg.get, newPkg)
+ else {
+ currentPkg.members = newPkg :: currentPkg.members
+ newPkg
+ }
+ }
+ case x :: xs => {
+ val subPkg = s"${currentPkg.name}.$x"
+ val existingPkg = currentPkg.members.collect {
+ case p: PackageImpl if p.name == subPkg => p
+ }.headOption
+
+ if (existingPkg.isDefined) createAndInsert(existingPkg.get, xs)
+ else {
+ val newEmpty = EmptyPackage(currentPkg.path :+ x, subPkg)
+ packages = packages + (subPkg -> newEmpty)
+ currentPkg.members = newEmpty :: currentPkg.members
+ createAndInsert(newEmpty, xs)
+ }
+ }
+ }
+ }
+
+ val path = newPkg.path
+ if (path.length == 1)
+ insertOrModifyRoot()
+ else if (packages.contains(newPkg.name))
+ mergedPackages(packages(newPkg.name), newPkg)
+ else {
+ val root = packages.get(path.head)
+
+ if (root.isDefined) createAndInsert(root.get, newPkg.path.drop(1))
+ else {
+ val newEmpty = EmptyPackage(List(path.head), path.head)
+ packages = packages + (path.head -> newEmpty)
+ createAndInsert(newEmpty, newPkg.path.drop(1))
+ }
+ }
}
private[this] var totalRuns = 0
diff --git a/doc-tool/src/dotty/tools/dottydoc/core/MiniPhaseTransform.scala b/doc-tool/src/dotty/tools/dottydoc/core/MiniPhaseTransform.scala
index 1cfcec09a..4980cad92 100644
--- a/doc-tool/src/dotty/tools/dottydoc/core/MiniPhaseTransform.scala
+++ b/doc-tool/src/dotty/tools/dottydoc/core/MiniPhaseTransform.scala
@@ -9,6 +9,7 @@ import dotc.core.Phases.Phase
import model._
import model.internal._
import util.syntax._
+import util.traversing._
object transform {
/**
@@ -48,30 +49,13 @@ object transform {
override def runOn(units: List[CompilationUnit])(implicit ctx: Context): List[CompilationUnit] = {
for {
- rootName <- rootPackages
+ rootName <- rootPackages(ctx.docbase.packages)
pack = ctx.docbase.packages(rootName)
transformed = performPackageTransform(pack)
} yield ctx.docbase.packagesMutable(rootName) = transformed
super.runOn(units)
}
- private def rootPackages(implicit ctx: Context): List[String] = {
- var currentDepth = Int.MaxValue
- var packs = List.empty[String]
-
- for (key <- ctx.docbase.packages.keys) {
- val keyDepth = key.split("\\.").length
- packs =
- if (keyDepth < currentDepth) {
- currentDepth = keyDepth
- key :: Nil
- } else if (keyDepth == currentDepth) {
- key :: packs
- } else packs
- }
- packs
- }
-
private def performPackageTransform(pack: Package)(implicit ctx: Context): Package = {
def transformEntity[E <: Entity](e: E, f: DocMiniPhase => E => E)(createNew: E => E): Entity = {
val transformedEntity = transformations.foldLeft(e) { case (oldE, transf) =>
@@ -91,7 +75,8 @@ object transform {
p.members.map(traverse).filterNot(_ eq NonEntity),
p.path,
p.superTypes,
- p.comment
+ p.comment,
+ p.parent
)
// Update reference in context to newPackage
@@ -107,7 +92,8 @@ object transform {
t.name,
t.path,
t.alias,
- t.comment
+ t.comment,
+ t.parent
)
}
case c: Class => transformEntity(c, _.classTransformation) { cls =>
@@ -122,7 +108,8 @@ object transform {
cls.constructors,
cls.superTypes,
cls.comment,
- cls.companionPath
+ cls.companionPath,
+ cls.parent
)
}
case cc: CaseClass => transformEntity(cc, _.caseClassTransformation) { cc =>
@@ -137,7 +124,8 @@ object transform {
cc.constructors,
cc.superTypes,
cc.comment,
- cc.companionPath
+ cc.companionPath,
+ cc.parent
)
}
case trt: Trait => transformEntity(trt, _.traitTransformation) { trt =>
@@ -152,7 +140,8 @@ object transform {
trt.traitParams,
trt.superTypes,
trt.comment,
- trt.companionPath
+ trt.companionPath,
+ trt.parent
)
}
case obj: Object => transformEntity(obj, _.objectTransformation) { obj =>
@@ -165,7 +154,8 @@ object transform {
obj.path,
obj.superTypes,
obj.comment,
- obj.companionPath
+ obj.companionPath,
+ obj.parent
)
}
case df: Def => transformEntity(df, _.defTransformation) { df =>
@@ -179,7 +169,8 @@ object transform {
df.typeParams,
df.paramLists,
df.comment,
- df.implicitlyAddedFrom
+ df.implicitlyAddedFrom,
+ df.parent
)
}
case vl: Val => transformEntity(vl, _.valTransformation) { vl =>
@@ -192,7 +183,8 @@ object transform {
vl.returnValue,
vl.kind,
vl.comment,
- vl.implicitlyAddedFrom
+ vl.implicitlyAddedFrom,
+ vl.parent
)
}
}
diff --git a/doc-tool/src/dotty/tools/dottydoc/core/TypeLinkingPhases.scala b/doc-tool/src/dotty/tools/dottydoc/core/TypeLinkingPhases.scala
index 245db060d..02f6ccb97 100644
--- a/doc-tool/src/dotty/tools/dottydoc/core/TypeLinkingPhases.scala
+++ b/doc-tool/src/dotty/tools/dottydoc/core/TypeLinkingPhases.scala
@@ -82,6 +82,12 @@ trait TypeLinker extends MemberLookup {
target match {
case Some(target: Package) =>
MaterializedLink(title, target.path.mkString("/") + "/index.html")
+ case Some(target: TypeAlias) =>
+ MaterializedLink(title, target.parent.path.mkString("/") + ".html#" + target.signature)
+ case Some(target: Def) =>
+ MaterializedLink(title, target.parent.path.mkString("/") + ".html#" + target.signature)
+ case Some(target: Val) =>
+ MaterializedLink(title, target.parent.path.mkString("/") + ".html#" + target.signature)
case Some(target) =>
MaterializedLink(title, target.path.mkString("/") + ".html")
case none =>
diff --git a/doc-tool/src/dotty/tools/dottydoc/model/entities.scala b/doc-tool/src/dotty/tools/dottydoc/model/entities.scala
index 7027a72eb..9cbd1f6c8 100644
--- a/doc-tool/src/dotty/tools/dottydoc/model/entities.scala
+++ b/doc-tool/src/dotty/tools/dottydoc/model/entities.scala
@@ -21,6 +21,13 @@ trait Entity { entity =>
def annotations: List[String]
+ def signature: String =
+ entity.name + (entity match {
+ case o: Object => "$"
+ case d: Def => d.paramLists.mkString
+ case _ => ""
+ })
+
def children: List[Entity with Members] = entity match {
case e: Entity with Members =>
e.members.collect { case e: Entity with Members if e.kind != "package" => e }
@@ -74,6 +81,8 @@ trait ReturnValue {
trait ParamList {
def list: List[NamedReference]
def isImplicit: Boolean
+
+ override def toString = list.map(_.title).mkString("(", ",", ")")
}
trait Constructors {
diff --git a/doc-tool/src/dotty/tools/dottydoc/model/internal.scala b/doc-tool/src/dotty/tools/dottydoc/model/internal.scala
index fe21a0a0a..bf50c0232 100644
--- a/doc-tool/src/dotty/tools/dottydoc/model/internal.scala
+++ b/doc-tool/src/dotty/tools/dottydoc/model/internal.scala
@@ -3,23 +3,26 @@ package model
import comment.Comment
import references._
-import dotty.tools.dotc.core.Symbols.Symbol
+import dotty.tools.dotc.core.Symbols.{ Symbol, NoSymbol }
object internal {
- trait Impl {
- var parent: Entity = NonEntity
- }
-
final case class PackageImpl(
- symbol: Symbol,
- annotations: List[String],
- name: String,
+ var symbol: Symbol,
+ var annotations: List[String],
+ var name: String,
var members: List[Entity],
- path: List[String],
- superTypes: List[MaterializableLink] = Nil,
- var comment: Option[Comment] = None
- ) extends Package with Impl
+ var path: List[String],
+ var superTypes: List[MaterializableLink] = Nil,
+ var comment: Option[Comment] = None,
+ var parent: Entity = NonEntity
+ ) extends Package
+
+ object EmptyPackage {
+ def apply(path: List[String], name: String): PackageImpl = {
+ PackageImpl(NoSymbol, Nil, name, Nil, path)
+ }
+ }
final case class TypeAliasImpl (
symbol: Symbol,
@@ -28,8 +31,9 @@ object internal {
name: String,
path: List[String],
alias: Option[Reference],
- var comment: Option[Comment] = None
- ) extends TypeAlias with Impl
+ var comment: Option[Comment] = None,
+ var parent: Entity = NonEntity
+ ) extends TypeAlias
final case class ClassImpl(
symbol: Symbol,
@@ -42,8 +46,9 @@ object internal {
constructors: List[List[ParamList]] = Nil,
superTypes: List[MaterializableLink] = Nil,
var comment: Option[Comment] = None,
- var companionPath: List[String] = Nil
- ) extends Class with Impl
+ var companionPath: List[String] = Nil,
+ var parent: Entity = NonEntity
+ ) extends Class
final case class CaseClassImpl(
symbol: Symbol,
@@ -56,8 +61,9 @@ object internal {
constructors: List[List[ParamList]] = Nil,
superTypes: List[MaterializableLink] = Nil,
var comment: Option[Comment] = None,
- var companionPath: List[String] = Nil
- ) extends CaseClass with Impl
+ var companionPath: List[String] = Nil,
+ var parent: Entity = NonEntity
+ ) extends CaseClass
final case class TraitImpl(
symbol: Symbol,
@@ -70,8 +76,9 @@ object internal {
traitParams: List[ParamList] = Nil,
superTypes: List[MaterializableLink] = Nil,
var comment: Option[Comment] = None,
- var companionPath: List[String] = Nil
- ) extends Trait with Impl
+ var companionPath: List[String] = Nil,
+ var parent: Entity = NonEntity
+ ) extends Trait
final case class ObjectImpl(
symbol: Symbol,
@@ -82,8 +89,9 @@ object internal {
path: List[String],
superTypes: List[MaterializableLink] = Nil,
var comment: Option[Comment] = None,
- var companionPath: List[String] = Nil
- ) extends Object with Impl
+ var companionPath: List[String] = Nil,
+ var parent: Entity = NonEntity
+ ) extends Object
final case class DefImpl(
symbol: Symbol,
@@ -95,8 +103,9 @@ object internal {
typeParams: List[String] = Nil,
paramLists: List[ParamList] = Nil,
var comment: Option[Comment] = None,
- implicitlyAddedFrom: Option[Reference] = None
- ) extends Def with Impl
+ implicitlyAddedFrom: Option[Reference] = None,
+ var parent: Entity = NonEntity
+ ) extends Def
final case class ValImpl(
symbol: Symbol,
@@ -107,8 +116,9 @@ object internal {
returnValue: Reference,
kind: String,
var comment: Option[Comment] = None,
- implicitlyAddedFrom: Option[Reference] = None
- ) extends Val with Impl
+ implicitlyAddedFrom: Option[Reference] = None,
+ var parent: Entity = NonEntity
+ ) extends Val
final case class ParamListImpl(
list: List[NamedReference],
diff --git a/doc-tool/src/dotty/tools/dottydoc/model/java.scala b/doc-tool/src/dotty/tools/dottydoc/model/java.scala
index 6b4e8b06d..b30c10734 100644
--- a/doc-tool/src/dotty/tools/dottydoc/model/java.scala
+++ b/doc-tool/src/dotty/tools/dottydoc/model/java.scala
@@ -54,7 +54,8 @@ object java {
"children" -> ent.children.map(_.asJava()).asJava,
"comment" -> ent.comment.map(_.asJava).asJava,
"superTypes" -> ent.superTypes,
- "hasVisibleMembers" -> ent.hasVisibleMembers
+ "hasVisibleMembers" -> ent.hasVisibleMembers,
+ "signature" -> ent.signature
) ++ extras).asJava
}
@@ -73,7 +74,8 @@ object java {
"isProtected" -> ent.isProtected,
"hasVisibleMembers" -> ent.hasVisibleMembers,
"hasCompanion" -> ent.hasCompanion,
- "companionPath" -> ent.companionPath.asJava
+ "companionPath" -> ent.companionPath.asJava,
+ "signature" -> ent.signature
) ++ extras).asJava
}
@@ -92,7 +94,8 @@ object java {
"isProtected" -> ent.isProtected,
"hasVisibleMembers" -> ent.hasVisibleMembers,
"hasCompanion" -> ent.hasCompanion,
- "companionPath" -> ent.companionPath.asJava
+ "companionPath" -> ent.companionPath.asJava,
+ "signature" -> ent.signature
) ++ extras).asJava
}
@@ -111,7 +114,8 @@ object java {
"isProtected" -> ent.isProtected,
"hasVisibleMembers" -> ent.hasVisibleMembers,
"hasCompanion" -> ent.hasCompanion,
- "companionPath" -> ent.companionPath.asJava
+ "companionPath" -> ent.companionPath.asJava,
+ "signature" -> ent.signature
) ++ extras).asJava
}
@@ -129,7 +133,8 @@ object java {
"isProtected" -> ent.isProtected,
"hasVisibleMembers" -> ent.hasVisibleMembers,
"hasCompanion" -> ent.hasCompanion,
- "companionPath" -> ent.companionPath.asJava
+ "companionPath" -> ent.companionPath.asJava,
+ "signature" -> ent.signature
) ++ extras).asJava
}
@@ -146,7 +151,8 @@ object java {
"comment" -> ent.comment.map(_.asJava).asJava,
"implicitlyAddedFrom" -> ent.implicitlyAddedFrom.map(_.asJava).asJava,
"isPrivate" -> ent.isPrivate,
- "isProtected" -> ent.isProtected
+ "isProtected" -> ent.isProtected,
+ "signature" -> ent.signature
).asJava
}
@@ -161,7 +167,8 @@ object java {
"comment" -> ent.comment.map(_.asJava).asJava,
"implicitlyAddedFrom" -> ent.implicitlyAddedFrom.map(_.asJava).asJava,
"isPrivate" -> ent.isPrivate,
- "isProtected" -> ent.isProtected
+ "isProtected" -> ent.isProtected,
+ "signature" -> ent.signature
).asJava
}
@@ -175,7 +182,8 @@ object java {
"alias" -> ent.alias.map(_.asJava).asJava,
"comment" -> ent.comment.map(_.asJava).asJava,
"isPrivate" -> ent.isPrivate,
- "isProtected" -> ent.isProtected
+ "isProtected" -> ent.isProtected,
+ "signature" -> ent.signature
).asJava
}
diff --git a/doc-tool/src/dotty/tools/dottydoc/staticsite/Site.scala b/doc-tool/src/dotty/tools/dottydoc/staticsite/Site.scala
index 6cdff2f22..d522c597c 100644
--- a/doc-tool/src/dotty/tools/dottydoc/staticsite/Site.scala
+++ b/doc-tool/src/dotty/tools/dottydoc/staticsite/Site.scala
@@ -158,7 +158,7 @@ case class Site(val root: JFile, val projectTitle: String, val documentation: Ma
documentation.values.foreach { pkg =>
genDoc(pkg)
- pkg.members.filterNot(_.kind == "package").foreach(genDoc)
+ pkg.children.foreach(genDoc)
}
}
diff --git a/doc-tool/src/dotty/tools/dottydoc/util/mutate.scala b/doc-tool/src/dotty/tools/dottydoc/util/mutate.scala
index a5a4dfec6..739a1e19d 100644
--- a/doc-tool/src/dotty/tools/dottydoc/util/mutate.scala
+++ b/doc-tool/src/dotty/tools/dottydoc/util/mutate.scala
@@ -35,6 +35,8 @@ object setters {
e.parent = to
case e: DefImpl =>
e.parent = to
+ case e: TypeAliasImpl =>
+ e.parent = to
case _ => ()
}
diff --git a/doc-tool/src/dotty/tools/dottydoc/util/Traversing.scala b/doc-tool/src/dotty/tools/dottydoc/util/traversing.scala
index a3b60fa44..9c2e3bf54 100644
--- a/doc-tool/src/dotty/tools/dottydoc/util/Traversing.scala
+++ b/doc-tool/src/dotty/tools/dottydoc/util/traversing.scala
@@ -22,4 +22,22 @@ object traversing {
"../" * (from.path.length - offset) +
to.path.mkString("", "/", ".html")
}
+
+
+ def rootPackages(pkgs: Map[String, Package]): List[String] = {
+ var currentDepth = Int.MaxValue
+ var packs = List.empty[String]
+
+ for (key <- pkgs.keys) {
+ val keyDepth = key.split("\\.").length
+ packs =
+ if (keyDepth < currentDepth) {
+ currentDepth = keyDepth
+ key :: Nil
+ } else if (keyDepth == currentDepth) {
+ key :: packs
+ } else packs
+ }
+ packs
+ }
}
diff --git a/doc-tool/test/ConstructorTest.scala b/doc-tool/test/ConstructorTest.scala
index 4808ceab3..d82115cd0 100644
--- a/doc-tool/test/ConstructorTest.scala
+++ b/doc-tool/test/ConstructorTest.scala
@@ -22,7 +22,7 @@ class Constructors extends DottyDocTest {
checkSources(source :: Nil) { packages =>
packages("scala") match {
- case PackageImpl(_, _, _, List(cls: Class), _, _, _) =>
+ case PackageImpl(_, _, _, List(cls: Class), _, _, _, _) =>
cls.constructors.headOption match {
case Some(ParamListImpl(NamedReference("str", _, false, false) :: Nil, false) :: Nil) =>
// success!
@@ -44,7 +44,7 @@ class Constructors extends DottyDocTest {
checkSources(source :: Nil) { packages =>
packages("scala") match {
- case PackageImpl(_, _, _, List(cls: Class), _, _, _) =>
+ case PackageImpl(_, _, _, List(cls: Class), _, _, _, _) =>
cls.constructors match {
case (
ParamListImpl(NamedReference("str1", _, false, false) :: Nil, false) ::
@@ -69,7 +69,7 @@ class Constructors extends DottyDocTest {
checkSources(source :: Nil) { packages =>
packages("scala") match {
- case PackageImpl(_, _, _, List(cls: Class), _, _, _) =>
+ case PackageImpl(_, _, _, List(cls: Class), _, _, _, _) =>
cls.constructors match {
case (
ParamListImpl(NamedReference("str1", _, false, false) :: Nil, false) ::
@@ -101,7 +101,7 @@ class Constructors extends DottyDocTest {
checkSources(source :: Nil) { packages =>
packages("scala") match {
- case PackageImpl(_, _, _, List(cls: Class), _, _, _) =>
+ case PackageImpl(_, _, _, List(cls: Class), _, _, _, _) =>
cls.constructors match {
case (
ParamListImpl(NamedReference("main", _, false, false) :: Nil, false) :: Nil
@@ -139,7 +139,7 @@ class Constructors extends DottyDocTest {
checkSources(source :: Nil) { packages =>
packages("scala") match {
- case PackageImpl(_, _, _, List(cls: CaseClass, obj: Object), _, _, _) =>
+ case PackageImpl(_, _, _, List(cls: CaseClass, obj: Object), _, _, _, _) =>
cls.constructors match {
case (
ParamListImpl(NamedReference("main", _, false, false) :: Nil, false) :: Nil
@@ -172,7 +172,7 @@ class Constructors extends DottyDocTest {
checkSources(source :: Nil) { packages =>
packages("scala") match {
- case PackageImpl(_, _, _, List(trt: Trait), _, _, _) =>
+ case PackageImpl(_, _, _, List(trt: Trait), _, _, _, _) =>
trt.traitParams match {
case ParamListImpl(NamedReference("main", _, false, false) :: Nil, false) :: Nil =>
case _ =>
@@ -199,7 +199,7 @@ class Constructors extends DottyDocTest {
checkSources(source :: Nil) { packages =>
packages("scala") match {
- case PackageImpl(_, _, _, List(cc: CaseClass, _, cls: Class, trt: Trait), _, _, _) =>
+ case PackageImpl(_, _, _, List(cc: CaseClass, _, cls: Class, trt: Trait), _, _, _, _) =>
import model.json._
lazy val incorrectJson = s"The json generated for:\n$actualSource\n\nIs not correct"
assert(cc.json.contains(s""""constructors":[[{"list":[{"title":"main""""), incorrectJson)
diff --git a/doc-tool/test/PackageStructure.scala b/doc-tool/test/PackageStructure.scala
index b242d2f39..569bfbc1c 100644
--- a/doc-tool/test/PackageStructure.scala
+++ b/doc-tool/test/PackageStructure.scala
@@ -29,7 +29,7 @@ class PackageStructure extends DottyDocTest {
checkSources(source1 :: source2 :: Nil) { packages =>
packages("scala") match {
- case PackageImpl(_, _, _, List(tA, tB), _, _, _) =>
+ case PackageImpl(_, _, _, List(tA, tB), _, _, _, _) =>
assert(
tA.name == "A" && tB.name == "B",
s"trait A had name '${tA.name}' and trait B had name '${tB.name}'"
@@ -65,8 +65,8 @@ class PackageStructure extends DottyDocTest {
_,
_,
"scala",
- List(PackageImpl(_, _, "scala.collection", List(tA, tB), _, _, _)),
- _, _, _
+ List(PackageImpl(_, _, "scala.collection", List(tA, tB), _, _, _, _)),
+ _, _, _, _
) =>
assert(
tA.name == "A" && tB.name == "B",
@@ -78,7 +78,7 @@ class PackageStructure extends DottyDocTest {
}
packages("scala.collection") match {
- case PackageImpl(_, _, "scala.collection", List(tA, tB), _, _, _) =>
+ case PackageImpl(_, _, "scala.collection", List(tA, tB), _, _, _, _) =>
assert(
tA.name == "A" && tB.name == "B",
s"trait A had name '${tA.name}' and trait B had name '${tB.name}'"
diff --git a/doc-tool/test/UsecaseTest.scala b/doc-tool/test/UsecaseTest.scala
index bc896ed8d..4eb072b98 100644
--- a/doc-tool/test/UsecaseTest.scala
+++ b/doc-tool/test/UsecaseTest.scala
@@ -29,7 +29,7 @@ class UsecaseTest extends DottyDocTest {
checkSources(source :: Nil) { packages =>
packages("scala") match {
- case PackageImpl(_, _, _, List(trt: Trait), _, _, _) =>
+ case PackageImpl(_, _, _, List(trt: Trait), _, _, _, _) =>
val List(foo: Def) = trt.members
assert(foo.comment.isDefined, "Lost comment in transformations")
@@ -73,7 +73,7 @@ class UsecaseTest extends DottyDocTest {
checkSources(source :: Nil) { packages =>
packages("scala") match {
- case PackageImpl(_, _, _, List(trt: Trait), _, _, _) =>
+ case PackageImpl(_, _, _, List(trt: Trait), _, _, _, _) =>
val List(foo: Def) = trt.members
val returnValue = foo.returnValue match {
@@ -118,7 +118,7 @@ class UsecaseTest extends DottyDocTest {
checkSources(source :: Nil) { packages =>
packages("scala") match {
- case PackageImpl(_, _, _, List(trt: Trait), _, _, _) =>
+ case PackageImpl(_, _, _, List(trt: Trait), _, _, _, _) =>
val List(foo: Def) = trt.members
val returnValue = foo.returnValue match {
@@ -166,7 +166,7 @@ class UsecaseTest extends DottyDocTest {
checkSources(source :: Nil) { packages =>
packages("scala") match {
- case PackageImpl(_, _, _, List(trt: Trait), _, _, _) =>
+ case PackageImpl(_, _, _, List(trt: Trait), _, _, _, _) =>
val List(map: Def) = trt.members
val returnValue = map.returnValue match {
@@ -209,7 +209,7 @@ class UsecaseTest extends DottyDocTest {
checkSources(source :: Nil) { packages =>
packages("scala") match {
- case PackageImpl(_, _, _, List(trt: Trait), _, _, _) =>
+ case PackageImpl(_, _, _, List(trt: Trait), _, _, _, _) =>
val List(map: Def) = trt.members
assert(map.comment.isDefined, "Lost comment in transformations")