Skip to content

Commit 74c45cf

Browse files
committed
Allow linking to any members
1 parent 750b30a commit 74c45cf

File tree

2 files changed

+33
-11
lines changed

2 files changed

+33
-11
lines changed

scala3doc/src/dotty/dokka/site/StaticSiteLocationProvider.scala

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,14 @@ import org.jetbrains.dokka.pages.ContentPage
55
import org.jetbrains.dokka.pages.PageNode
66
import org.jetbrains.dokka.pages.RootPageNode
77
import org.jetbrains.dokka.pages.ModulePage
8+
import org.jetbrains.dokka.pages.ClasslikePageNode
89
import org.jetbrains.dokka.model.DPackage
910
import org.jetbrains.dokka.plugability.DokkaContext
1011
import org.jetbrains.dokka.base.resolvers.external._
1112
import org.jetbrains.dokka.base.resolvers.shared._
1213
import org.jetbrains.dokka.base.resolvers.local._
1314
import org.jetbrains.dokka.model.DisplaySourceSet
14-
import dotty.dokka.model.api.withNoOrigin
15+
import dotty.dokka.withNoOrigin
1516

1617
import scala.collection.JavaConverters._
1718
import java.nio.file.Paths
@@ -86,17 +87,35 @@ class StaticSiteLocationProvider(pageNode: RootPageNode)(using ctx: DokkaContext
8687
override val getPathsIndex: JMap[PageNode, JList[String]] =
8788
super.getPathsIndex.asScala.mapValuesInPlace(updatePageEntry).asJava
8889

90+
// We should build our own provider at some point
91+
val ourPages: Map[String, ClasslikePageNode] = getPathsIndex.asScala.collect {
92+
case (node: ClasslikePageNode, path) => node.getDri.asScala.head.location -> node
93+
}.toMap
94+
95+
96+
override def resolve(
97+
dri: DRI,
98+
sourceSets: JSet[DisplaySourceSet],
99+
context: PageNode): String =
100+
ourPages.get(dri.location).fold(super.resolve(dri, sourceSets, context)){ page =>
101+
val path = pathTo(page,context) match
102+
case "" => ""
103+
case path => s"$path.html"
104+
dri.anchor.fold(path)(hash => s"$path#$hash")
105+
}
89106

90107
override def pathTo(node: PageNode, context: PageNode): String =
91-
val nodePaths = getPathsIndex.get(node).asScala
92-
val contextPaths = Option(context).fold(Nil)(getPathsIndex.get(_).asScala.dropRight(1))
93-
val commonPaths = nodePaths.zip(contextPaths).takeWhile{ case (a, b) => a == b }.size
94-
95-
val contextPath = contextPaths.drop(commonPaths).map(_ => "..")
96-
val nodePath = nodePaths.drop(commonPaths) match
97-
case l if l.isEmpty => Seq("index")
98-
case l => l
99-
(contextPath ++ nodePath).mkString("/")
108+
if node == context then ""
109+
else
110+
val nodePaths = getPathsIndex.get(node).asScala
111+
val contextPaths = Option(context).fold(Nil)(getPathsIndex.get(_).asScala.dropRight(1))
112+
val commonPaths = nodePaths.zip(contextPaths).takeWhile{ case (a, b) => a == b }.size
113+
114+
val contextPath = contextPaths.drop(commonPaths).map(_ => "..")
115+
val nodePath = nodePaths.drop(commonPaths) match
116+
case l if l.isEmpty => Seq("index")
117+
case l => l
118+
(contextPath ++ nodePath).mkString("/")
100119

101120
val externalLocationProviders: List[(List[Regex], ExternalLocationProvider)] =
102121
val sourceSet = ctx.getConfiguration.getSourceSets.asScala(0)

scala3doc/src/dotty/dokka/tasty/SymOps.scala

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,11 @@ class SymOps[Q <: Quotes](val q: Q):
128128
val csym = sym.asInstanceOf[dotc.core.Symbols.Symbol]
129129
Option(csym.associatedFile).map(_.path).fold("")(p => s"[origin:$p]")
130130
}
131+
// We want package object to point to package
132+
val className = sym.className.filter(_ != "package$")
133+
131134
DRI(
132-
sym.className.fold(sym.packageName)(cn => s"${sym.packageName}.${cn}"),
135+
className.fold(sym.packageName)(cn => s"${sym.packageName}.${cn}"),
133136
sym.anchor.getOrElse(""), // TODO do we need any of this fields?
134137
null,
135138
pointsTo,

0 commit comments

Comments
 (0)