Skip to content

Commit 59c6c0d

Browse files
committed
Properly materialize supertype links
1 parent 9879b90 commit 59c6c0d

File tree

4 files changed

+45
-31
lines changed

4 files changed

+45
-31
lines changed

dottydoc/src/dotty/tools/dottydoc/DottyDoc.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class DocCompiler extends Compiler {
3434
List(DocMiniTransformations(new LinkReturnTypes,
3535
new LinkParamListTypes,
3636
new LinkImplicitlyAddedTypes,
37+
new LinkSuperTypes,
3738
new SortMembers))
3839
)
3940
}
@@ -59,7 +60,6 @@ abstract class DocDriver extends Driver {
5960

6061
override def newCompiler(implicit ctx: Context): Compiler = new DocCompiler
6162

62-
6363
def compiledDocs(args: Array[String]): collection.Map[String, Package] = {
6464
val (fileNames, ctx) = setup(args, initCtx.fresh)
6565
doCompile(newCompiler(ctx), fileNames)(ctx)

dottydoc/src/dotty/tools/dottydoc/core/TypeLinkingPhases.scala

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,32 @@ class LinkParamListTypes extends DocMiniPhase with TypeLinker {
3838
}
3939
}
4040

41+
class LinkSuperTypes extends DocMiniPhase with TypeLinker {
42+
def linkSuperTypes(ent: Entity with SuperTypes)(implicit ctx: Context): List[MaterializableLink] =
43+
ent.superTypes.collect {
44+
case UnsetLink(title, query) =>
45+
val packages = ctx.docbase.packages[Package].toMap
46+
val entityLink = makeEntityLink(ent, packages, Text(title), NoPosition, query).link
47+
handleEntityLink(title, entityLink, ent)
48+
}
49+
50+
override def transformClass(implicit ctx: Context) = { case cls: ClassImpl =>
51+
cls.copy(superTypes = linkSuperTypes(cls))
52+
}
53+
54+
override def transformCaseClass(implicit ctx: Context) = { case cc: CaseClassImpl =>
55+
cc.copy(superTypes = linkSuperTypes(cc))
56+
}
57+
58+
override def transformTrait(implicit ctx: Context) = { case trt: TraitImpl =>
59+
trt.copy(superTypes = linkSuperTypes(trt))
60+
}
61+
62+
override def transformObject(implicit ctx: Context) = { case obj: ObjectImpl =>
63+
obj.copy(superTypes = linkSuperTypes(obj))
64+
}
65+
}
66+
4167
class LinkImplicitlyAddedTypes extends DocMiniPhase with TypeLinker {
4268
override def transformDef(implicit ctx: Context) = {
4369
case df: DefImpl if df.implicitlyAddedFrom.isDefined =>
@@ -53,6 +79,12 @@ class LinkImplicitlyAddedTypes extends DocMiniPhase with TypeLinker {
5379
}
5480

5581
trait TypeLinker extends MemberLookup {
82+
def handleEntityLink(title: String, lt: LinkTo, ent: Entity): MaterializableLink = lt match {
83+
case Tooltip(str) => NoLink(title, str)
84+
case LinkToExternal(_, url) => MaterializedLink(title, url)
85+
case LinkToEntity(target) => MaterializedLink(title, util.traversing.relativePath(ent, target))
86+
}
87+
5688
def linkReference(ent: Entity, ref: Reference, packs: Map[String, Package]): Reference = {
5789
def linkRef(ref: Reference) = linkReference(ent, ref, packs)
5890

@@ -61,13 +93,7 @@ trait TypeLinker extends MemberLookup {
6193
val inlineToHtml = InlineToHtml(ent)
6294
val title = t
6395

64-
def handleEntityLink(title: String, lt: LinkTo): MaterializableLink = lt match {
65-
case Tooltip(str) => NoLink(title, str)
66-
case LinkToExternal(_, url) => MaterializedLink(title, url)
67-
case LinkToEntity(target) => MaterializedLink(title, util.traversing.relativePath(ent, target))
68-
}
69-
70-
val target = handleEntityLink(title, makeEntityLink(ent, packs, Text(t), NoPosition, query).link)
96+
val target = handleEntityLink(title, makeEntityLink(ent, packs, Text(t), NoPosition, query).link, ent)
7197
val tpTargets = tps.map(linkReference(ent, _, packs))
7298
ref.copy(tpeLink = target, paramLinks = tpTargets)
7399
case ref @ OrTypeReference(left, right) =>

dottydoc/src/dotty/tools/dottydoc/model/internal.scala

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ object internal {
2525
members: List[Entity],
2626
modifiers: List[String],
2727
path: List[String],
28-
var typeParams: List[String] = Nil,
29-
var superTypes: List[MaterializableLink] = Nil,
28+
typeParams: List[String] = Nil,
29+
superTypes: List[MaterializableLink] = Nil,
3030
var comment: Option[Comment] = None
3131
) extends Class with Impl
3232

@@ -35,8 +35,8 @@ object internal {
3535
members: List[Entity],
3636
modifiers: List[String],
3737
path: List[String],
38-
var typeParams: List[String] = Nil,
39-
var superTypes: List[MaterializableLink] = Nil,
38+
typeParams: List[String] = Nil,
39+
superTypes: List[MaterializableLink] = Nil,
4040
var comment: Option[Comment] = None
4141
) extends CaseClass with Impl
4242

@@ -45,8 +45,8 @@ object internal {
4545
members: List[Entity],
4646
modifiers: List[String],
4747
path: List[String],
48-
var typeParams: List[String] = Nil,
49-
var superTypes: List[MaterializableLink] = Nil,
48+
typeParams: List[String] = Nil,
49+
superTypes: List[MaterializableLink] = Nil,
5050
var comment: Option[Comment] = None
5151
) extends Trait with Impl
5252

@@ -55,17 +55,17 @@ object internal {
5555
members: List[Entity],
5656
modifiers: List[String],
5757
path: List[String],
58-
var superTypes: List[MaterializableLink] = Nil,
58+
superTypes: List[MaterializableLink] = Nil,
5959
var comment: Option[Comment] = None
6060
) extends Object with Impl
6161

6262
final case class DefImpl(
6363
name: String,
6464
modifiers: List[String],
6565
path: List[String],
66-
var returnValue: Reference,
67-
var typeParams: List[String] = Nil,
68-
var paramLists: List[ParamList] = Nil,
66+
returnValue: Reference,
67+
typeParams: List[String] = Nil,
68+
paramLists: List[ParamList] = Nil,
6969
var comment: Option[Comment] = None,
7070
implicitlyAddedFrom: Option[Reference] = None
7171
) extends Def with Impl
@@ -74,7 +74,7 @@ object internal {
7474
name: String,
7575
modifiers: List[String],
7676
path: List[String],
77-
var returnValue: Reference,
77+
returnValue: Reference,
7878
var comment: Option[Comment] = None,
7979
implicitlyAddedFrom: Option[Reference] = None
8080
) extends Val with Impl

dottydoc/src/dotty/tools/dottydoc/util/mutate.scala

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,6 @@ object setters {
1818
case x: ValImpl => x.comment = to
1919
}
2020

21-
22-
def setReturnValue(ent: Entity, ref: Reference) = ent match {
23-
case x: DefImpl => x.returnValue = ref
24-
case x: ValImpl => x.returnValue = ref
25-
case _ => ()
26-
}
27-
28-
def setParamLists(ent: Entity, refs: List[ParamList]) = ent match {
29-
case x: DefImpl => x.paramLists = refs
30-
case _ => ()
31-
}
32-
3321
def setParent(ent: Entity, to: Entity): Unit = ent match {
3422
case e: ClassImpl =>
3523
e.parent = to

0 commit comments

Comments
 (0)