From 3e9451d79b3e6845c4b1c0906401108a609eddf8 Mon Sep 17 00:00:00 2001 From: Felix Mulder Date: Sat, 21 Jan 2017 19:56:10 +0100 Subject: Fix insertion of package nodes in doc AST --- doc-tool/resources/_layouts/api-page.html | 2 +- doc-tool/resources/css/dottydoc.css | 1 + .../dotty/tools/dottydoc/core/DocASTPhase.scala | 102 ++++++++++++++++----- .../tools/dottydoc/core/MiniPhaseTransform.scala | 44 ++++----- .../tools/dottydoc/core/TypeLinkingPhases.scala | 6 ++ .../src/dotty/tools/dottydoc/model/entities.scala | 9 ++ .../src/dotty/tools/dottydoc/model/internal.scala | 62 +++++++------ doc-tool/src/dotty/tools/dottydoc/model/java.scala | 24 +++-- .../src/dotty/tools/dottydoc/staticsite/Site.scala | 2 +- .../src/dotty/tools/dottydoc/util/Traversing.scala | 25 ----- .../src/dotty/tools/dottydoc/util/mutate.scala | 2 + .../src/dotty/tools/dottydoc/util/traversing.scala | 43 +++++++++ doc-tool/test/ConstructorTest.scala | 14 +-- doc-tool/test/PackageStructure.scala | 8 +- doc-tool/test/UsecaseTest.scala | 10 +- 15 files changed, 230 insertions(+), 124 deletions(-) delete mode 100644 doc-tool/src/dotty/tools/dottydoc/util/Traversing.scala create mode 100644 doc-tool/src/dotty/tools/dottydoc/util/traversing.scala (limited to 'doc-tool') 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:
{% for member in entity.members %} -
+
{% 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/Traversing.scala b/doc-tool/src/dotty/tools/dottydoc/util/Traversing.scala deleted file mode 100644 index a3b60fa44..000000000 --- a/doc-tool/src/dotty/tools/dottydoc/util/Traversing.scala +++ /dev/null @@ -1,25 +0,0 @@ -package dotty.tools.dottydoc -package util - -object traversing { - import model._ - - def mutateEntities(e: Entity)(trans: Entity => Unit): Unit = e match { - case e: Entity with Members => - trans(e) - e.members.map(mutateEntities(_)(trans)) - case e: Entity => trans(e) - } - - def relativePath(from: Entity, to: Entity) = { - val offset = from match { - case v: Val if v.implicitlyAddedFrom.isDefined => 3 - case d: Def if d.implicitlyAddedFrom.isDefined => 3 - case _: Val | _: Def => 2 - case _ => 1 - } - - "../" * (from.path.length - offset) + - to.path.mkString("", "/", ".html") - } -} 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 new file mode 100644 index 000000000..9c2e3bf54 --- /dev/null +++ b/doc-tool/src/dotty/tools/dottydoc/util/traversing.scala @@ -0,0 +1,43 @@ +package dotty.tools.dottydoc +package util + +object traversing { + import model._ + + def mutateEntities(e: Entity)(trans: Entity => Unit): Unit = e match { + case e: Entity with Members => + trans(e) + e.members.map(mutateEntities(_)(trans)) + case e: Entity => trans(e) + } + + def relativePath(from: Entity, to: Entity) = { + val offset = from match { + case v: Val if v.implicitlyAddedFrom.isDefined => 3 + case d: Def if d.implicitlyAddedFrom.isDefined => 3 + case _: Val | _: Def => 2 + case _ => 1 + } + + "../" * (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") -- cgit v1.2.3