From 59c6c0d1bb1e889ee728931576a461e3014e3cf3 Mon Sep 17 00:00:00 2001 From: Felix Mulder Date: Wed, 17 Aug 2016 09:52:04 +0200 Subject: Properly materialize supertype links --- dottydoc/src/dotty/tools/dottydoc/DottyDoc.scala | 2 +- .../tools/dottydoc/core/TypeLinkingPhases.scala | 40 ++++++++++++++++++---- .../src/dotty/tools/dottydoc/model/internal.scala | 22 ++++++------ .../src/dotty/tools/dottydoc/util/mutate.scala | 12 ------- 4 files changed, 45 insertions(+), 31 deletions(-) (limited to 'dottydoc') 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 -- cgit v1.2.3