aboutsummaryrefslogtreecommitdiff
path: root/dottydoc
diff options
context:
space:
mode:
authorFelix Mulder <felix.mulder@gmail.com>2016-08-17 09:52:04 +0200
committerFelix Mulder <felix.mulder@gmail.com>2016-08-19 15:37:35 +0200
commit59c6c0d1bb1e889ee728931576a461e3014e3cf3 (patch)
tree5cdaedc59f68dce0c70dd101ecfec28c6429fca7 /dottydoc
parent9879b906772ff24dbe3da53c4dc6c9700935c483 (diff)
downloaddotty-59c6c0d1bb1e889ee728931576a461e3014e3cf3.tar.gz
dotty-59c6c0d1bb1e889ee728931576a461e3014e3cf3.tar.bz2
dotty-59c6c0d1bb1e889ee728931576a461e3014e3cf3.zip
Properly materialize supertype links
Diffstat (limited to 'dottydoc')
-rw-r--r--dottydoc/src/dotty/tools/dottydoc/DottyDoc.scala2
-rw-r--r--dottydoc/src/dotty/tools/dottydoc/core/TypeLinkingPhases.scala40
-rw-r--r--dottydoc/src/dotty/tools/dottydoc/model/internal.scala22
-rw-r--r--dottydoc/src/dotty/tools/dottydoc/util/mutate.scala12
4 files changed, 45 insertions, 31 deletions
diff --git a/dottydoc/src/dotty/tools/dottydoc/DottyDoc.scala b/dottydoc/src/dotty/tools/dottydoc/DottyDoc.scala
index a05cd8c25..61de1cfd8 100644
--- a/dottydoc/src/dotty/tools/dottydoc/DottyDoc.scala
+++ b/dottydoc/src/dotty/tools/dottydoc/DottyDoc.scala
@@ -34,6 +34,7 @@ class DocCompiler extends Compiler {
List(DocMiniTransformations(new LinkReturnTypes,
new LinkParamListTypes,
new LinkImplicitlyAddedTypes,
+ new LinkSuperTypes,
new SortMembers))
)
}
@@ -59,7 +60,6 @@ abstract class DocDriver extends Driver {
override def newCompiler(implicit ctx: Context): Compiler = new DocCompiler
-
def compiledDocs(args: Array[String]): collection.Map[String, Package] = {
val (fileNames, ctx) = setup(args, initCtx.fresh)
doCompile(newCompiler(ctx), fileNames)(ctx)
diff --git a/dottydoc/src/dotty/tools/dottydoc/core/TypeLinkingPhases.scala b/dottydoc/src/dotty/tools/dottydoc/core/TypeLinkingPhases.scala
index c2d647290..ae07effa9 100644
--- a/dottydoc/src/dotty/tools/dottydoc/core/TypeLinkingPhases.scala
+++ b/dottydoc/src/dotty/tools/dottydoc/core/TypeLinkingPhases.scala
@@ -38,6 +38,32 @@ class LinkParamListTypes extends DocMiniPhase with TypeLinker {
}
}
+class LinkSuperTypes extends DocMiniPhase with TypeLinker {
+ def linkSuperTypes(ent: Entity with SuperTypes)(implicit ctx: Context): List[MaterializableLink] =
+ ent.superTypes.collect {
+ case UnsetLink(title, query) =>
+ val packages = ctx.docbase.packages[Package].toMap
+ val entityLink = makeEntityLink(ent, packages, Text(title), NoPosition, query).link
+ handleEntityLink(title, entityLink, ent)
+ }
+
+ override def transformClass(implicit ctx: Context) = { case cls: ClassImpl =>
+ cls.copy(superTypes = linkSuperTypes(cls))
+ }
+
+ override def transformCaseClass(implicit ctx: Context) = { case cc: CaseClassImpl =>
+ cc.copy(superTypes = linkSuperTypes(cc))
+ }
+
+ override def transformTrait(implicit ctx: Context) = { case trt: TraitImpl =>
+ trt.copy(superTypes = linkSuperTypes(trt))
+ }
+
+ override def transformObject(implicit ctx: Context) = { case obj: ObjectImpl =>
+ obj.copy(superTypes = linkSuperTypes(obj))
+ }
+}
+
class LinkImplicitlyAddedTypes extends DocMiniPhase with TypeLinker {
override def transformDef(implicit ctx: Context) = {
case df: DefImpl if df.implicitlyAddedFrom.isDefined =>
@@ -53,6 +79,12 @@ class LinkImplicitlyAddedTypes extends DocMiniPhase with TypeLinker {
}
trait TypeLinker extends MemberLookup {
+ def handleEntityLink(title: String, lt: LinkTo, ent: Entity): MaterializableLink = lt match {
+ case Tooltip(str) => NoLink(title, str)
+ case LinkToExternal(_, url) => MaterializedLink(title, url)
+ case LinkToEntity(target) => MaterializedLink(title, util.traversing.relativePath(ent, target))
+ }
+
def linkReference(ent: Entity, ref: Reference, packs: Map[String, Package]): Reference = {
def linkRef(ref: Reference) = linkReference(ent, ref, packs)
@@ -61,13 +93,7 @@ trait TypeLinker extends MemberLookup {
val inlineToHtml = InlineToHtml(ent)
val title = t
- def handleEntityLink(title: String, lt: LinkTo): MaterializableLink = lt match {
- case Tooltip(str) => NoLink(title, str)
- case LinkToExternal(_, url) => MaterializedLink(title, url)
- case LinkToEntity(target) => MaterializedLink(title, util.traversing.relativePath(ent, target))
- }
-
- val target = handleEntityLink(title, makeEntityLink(ent, packs, Text(t), NoPosition, query).link)
+ val target = handleEntityLink(title, makeEntityLink(ent, packs, Text(t), NoPosition, query).link, ent)
val tpTargets = tps.map(linkReference(ent, _, packs))
ref.copy(tpeLink = target, paramLinks = tpTargets)
case ref @ OrTypeReference(left, right) =>
diff --git a/dottydoc/src/dotty/tools/dottydoc/model/internal.scala b/dottydoc/src/dotty/tools/dottydoc/model/internal.scala
index 82185b5ae..63e97743d 100644
--- a/dottydoc/src/dotty/tools/dottydoc/model/internal.scala
+++ b/dottydoc/src/dotty/tools/dottydoc/model/internal.scala
@@ -25,8 +25,8 @@ object internal {
members: List[Entity],
modifiers: List[String],
path: List[String],
- var typeParams: List[String] = Nil,
- var superTypes: List[MaterializableLink] = Nil,
+ typeParams: List[String] = Nil,
+ superTypes: List[MaterializableLink] = Nil,
var comment: Option[Comment] = None
) extends Class with Impl
@@ -35,8 +35,8 @@ object internal {
members: List[Entity],
modifiers: List[String],
path: List[String],
- var typeParams: List[String] = Nil,
- var superTypes: List[MaterializableLink] = Nil,
+ typeParams: List[String] = Nil,
+ superTypes: List[MaterializableLink] = Nil,
var comment: Option[Comment] = None
) extends CaseClass with Impl
@@ -45,8 +45,8 @@ object internal {
members: List[Entity],
modifiers: List[String],
path: List[String],
- var typeParams: List[String] = Nil,
- var superTypes: List[MaterializableLink] = Nil,
+ typeParams: List[String] = Nil,
+ superTypes: List[MaterializableLink] = Nil,
var comment: Option[Comment] = None
) extends Trait with Impl
@@ -55,7 +55,7 @@ object internal {
members: List[Entity],
modifiers: List[String],
path: List[String],
- var superTypes: List[MaterializableLink] = Nil,
+ superTypes: List[MaterializableLink] = Nil,
var comment: Option[Comment] = None
) extends Object with Impl
@@ -63,9 +63,9 @@ object internal {
name: String,
modifiers: List[String],
path: List[String],
- var returnValue: Reference,
- var typeParams: List[String] = Nil,
- var paramLists: List[ParamList] = Nil,
+ returnValue: Reference,
+ typeParams: List[String] = Nil,
+ paramLists: List[ParamList] = Nil,
var comment: Option[Comment] = None,
implicitlyAddedFrom: Option[Reference] = None
) extends Def with Impl
@@ -74,7 +74,7 @@ object internal {
name: String,
modifiers: List[String],
path: List[String],
- var returnValue: Reference,
+ returnValue: Reference,
var comment: Option[Comment] = None,
implicitlyAddedFrom: Option[Reference] = None
) extends Val with Impl
diff --git a/dottydoc/src/dotty/tools/dottydoc/util/mutate.scala b/dottydoc/src/dotty/tools/dottydoc/util/mutate.scala
index e02dc60af..a5a4dfec6 100644
--- a/dottydoc/src/dotty/tools/dottydoc/util/mutate.scala
+++ b/dottydoc/src/dotty/tools/dottydoc/util/mutate.scala
@@ -18,18 +18,6 @@ object setters {
case x: ValImpl => x.comment = to
}
-
- def setReturnValue(ent: Entity, ref: Reference) = ent match {
- case x: DefImpl => x.returnValue = ref
- case x: ValImpl => x.returnValue = ref
- case _ => ()
- }
-
- def setParamLists(ent: Entity, refs: List[ParamList]) = ent match {
- case x: DefImpl => x.paramLists = refs
- case _ => ()
- }
-
def setParent(ent: Entity, to: Entity): Unit = ent match {
case e: ClassImpl =>
e.parent = to