Skip to content

Commit e8014ef

Browse files
pikinier20romanowski
authored andcommitted
Change usage of DRI. Change pages structure to more standarized. Minor fixes to external location mechanism.
1 parent a809691 commit e8014ef

16 files changed

+125
-79
lines changed

project/Build.scala

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1565,7 +1565,17 @@ object Build {
15651565
generateDocumentation(
15661566
classDirectory.in(Compile).value.getAbsolutePath,
15671567
"scala3doc", "scala3doc/output/self", VersionUtil.gitHash,
1568-
"-siteroot scala3doc/documentation -project-logo scala3doc/documentation/logo.svg")
1568+
"-siteroot scala3doc/documentation -project-logo scala3doc/documentation/logo.svg " +
1569+
"-external-mappings " + raw".*scala\/quoted.*" + "::" +
1570+
"scala3doc" + "::" +
1571+
"http://dotty.epfl.ch/api/" + ":::" +
1572+
raw".*java.*" + "::" +
1573+
"javadoc" + "::" +
1574+
"https://docs.oracle.com/javase/8/docs/api/" + ":::" +
1575+
raw".*scala.*" + "::" +
1576+
"scaladoc" + "::" +
1577+
"https://www.scala-lang.org/api/current/"
1578+
)
15691579
}.value,
15701580

15711581
generateScala3Documentation := Def.inputTaskDyn {
@@ -1589,7 +1599,14 @@ object Build {
15891599
IO.write(dest / "CNAME", "dotty.epfl.ch")
15901600
}.dependsOn(generateDocumentation(
15911601
roots, "Scala 3", dest.getAbsolutePath, "master",
1592-
"-comment-syntax wiki -siteroot scala3doc/scala3-docs -project-logo scala3doc/scala3-docs/logo.svg"))
1602+
"-comment-syntax wiki -siteroot scala3doc/scala3-docs -project-logo scala3doc/scala3-docs/logo.svg " +
1603+
"-external-mappings " + raw".*java.*" + "::" +
1604+
"javadoc" + "::" +
1605+
"https://docs.oracle.com/javase/8/docs/api/" + ":::" +
1606+
raw".*scala.*" + "::" +
1607+
"scaladoc" + "::" +
1608+
"https://www.scala-lang.org/api/current/"
1609+
))
15931610
}.evaluated,
15941611

15951612
generateTestcasesDocumentation := Def.taskDyn {

scala3doc/src/dotty/dokka/DocContext.scala

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -141,24 +141,6 @@ case class DocContext(args: Scala3doc.Args, compilerContext: CompilerContext)
141141
res
142142
}
143143

144-
//val externalDocumentationLinks: List[Scala3docExternalDocumentationLink] = List(
145-
// Scala3docExternalDocumentationLink(
146-
// List(raw".*scala\/quoted.*".r),
147-
// new URL("http://127.0.0.1:5500/scala3doc/output/scala3/"),
148-
// DocumentationKind.Scala3doc
149-
// ).withPackageList(new URL("http://127.0.0.1:5500/scala3doc/output/scala3/-scala%203/package-list")),
150-
// Scala3docExternalDocumentationLink(
151-
// List(raw".*java.*".r),
152-
// new URL("https://docs.oracle.com/javase/8/docs/api/"),
153-
// DocumentationKind.Javadoc
154-
// ).withPackageList(new URL("https://docs.oracle.com/javase/8/docs/api/package-list")),
155-
// Scala3docExternalDocumentationLink(
156-
// List(raw".*scala.*".r),
157-
// new URL("https://www.scala-lang.org/api/current/"),
158-
// DocumentationKind.Scaladoc
159-
// )
160-
//)
161-
162144
override def getPluginsConfiguration: JList[DokkaConfiguration.PluginConfiguration] =
163145
JNil
164146

scala3doc/src/dotty/dokka/Scala3doc.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ object Scala3doc:
6565
defaultSyntax: CommentSyntax = CommentSyntax.Markdown,
6666
sourceLinks: List[String] = Nil,
6767
revision: Option[String] = None,
68-
externalMappings: List[List[String]]
68+
externalMappings: List[List[String]] = List.empty
6969
)
7070

7171
def run(args: Array[String], rootContext: CompilerContext): Reporter =

scala3doc/src/dotty/dokka/compat.scala

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@ import java.util.stream.Collectors
1414
import org.jetbrains.dokka.plugability._
1515
import kotlin.jvm.JvmClassMappingKt.getKotlinClass
1616

17-
def mkDRI(packageName: String = null, extra: String = null) = new DRI(packageName, null, null, PointingToDeclaration.INSTANCE, extra)
18-
1917
val U: kotlin.Unit = kotlin.Unit.INSTANCE
2018

2119
def JList[T](e: T*): JList[T] = e.asJava

scala3doc/src/dotty/dokka/location/ScalaExternalLocationProvider.scala

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import org.jetbrains.dokka.base.resolvers.anchors._
88
import org.jetbrains.dokka.links.DRI
99
import org.jetbrains.dokka.model.DisplaySourceSet
1010
import org.jetbrains.dokka.pages.RootPageNode
11+
import dotty.dokka.model.api._
1112
import org.jetbrains.dokka.plugability._
1213
import collection.JavaConverters._
1314
import java.util.{Set => JSet}
@@ -34,20 +35,20 @@ class ScalaExternalLocationProvider(
3435
}
3536

3637
private def constructPathForJavadoc(dri: DRI): String = {
37-
val packagePrefix = dri.getPackageName.replace(".","/")
38-
val origin = originRegex.findFirstIn(dri.getExtra)
39-
val className = origin match {
40-
case Some(path) =>
41-
path.split("/").last.stripSuffix(".class")
42-
case None => dri.getClassNames
43-
}
44-
getDocURL + packagePrefix + "/" + className + extension
38+
val location = "\\$+".r.replaceAllIn(dri.location.replace(".","/"), _ => ".")
39+
val origin = originRegex.findFirstIn(dri.extra)
40+
val anchor = dri.anchor
41+
getDocURL + location + extension + anchor.fold("")(a => s"#$a")
4542
}
4643

4744
private def constructPathForScaladoc(dri: DRI): String = {
48-
val packagePrefix = dri.getPackageName.replace(".","/")
49-
val className = dri.getClassNames
50-
getDocURL + packagePrefix + "/" + className + extension
45+
val location = dri.location.replace(".","/")
46+
val anchor = dri.anchor
47+
getDocURL + location + extension + anchor.fold("")(a => s"#$a")
5148
}
5249

53-
private def constructPathForScala3doc(dri: DRI): String = super.constructPath(dri)
50+
private def constructPathForScala3doc(dri: DRI): String = {
51+
val location = dri.location.replace(".","/")
52+
val anchor = dri.anchor
53+
getDocURL + location + anchor.fold(extension)(a => s"/$a$extension")
54+
}

scala3doc/src/dotty/dokka/model/api/api.scala

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import org.jetbrains.dokka.model.doc._
99
import org.jetbrains.dokka.model.properties._
1010
import org.jetbrains.dokka.pages._
1111
import dotty.dokka.tasty.comments.Comment
12+
import org.jetbrains.dokka.links._
1213

1314
enum Visibility(val name: String):
1415
case Unrestricted extends Visibility("")
@@ -182,14 +183,33 @@ extension (module: DModule)
182183
def driMap: Map[DRI, Member] = ModuleExtension.getFrom(module).fold(Map.empty)(_.driMap)
183184

184185
extension (dri: DRI):
185-
def withNoOrigin = DRI(
186-
dri.getPackageName,
187-
dri.getClassNames,
188-
dri.getCallable,
189-
dri.getTarget,
190-
Option(dri.getExtra).fold(null)(e => raw"\[origin:(.*)\]".r.replaceAllIn(e, ""))
186+
def withNoOrigin = dri._copy(
187+
extra = Option(dri.getExtra).fold(null)(e => raw"\[origin:(.*)\]".r.replaceAllIn(e, ""))
191188
)
192189

190+
def location: String = dri.getPackageName
191+
192+
def anchor: Option[String] = Option(dri.getClassNames).filterNot(_.isEmpty)
193+
194+
def extra: String = dri.getExtra
195+
196+
def target: DriTarget = dri.getTarget
197+
198+
def _copy(
199+
location: String = dri.location,
200+
anchor: Option[String] = dri.anchor,
201+
target: DriTarget = dri.target,
202+
extra: String = dri.extra
203+
) = new DRI(location, anchor.getOrElse(""), null, target, extra)
204+
205+
object DRI:
206+
def apply(
207+
location: String = "",
208+
anchor: Option[String] = None,
209+
target: DriTarget = PointingToDeclaration.INSTANCE,
210+
extra: String = ""
211+
) = new DRI(location, anchor.getOrElse(""), null, target, extra)
212+
193213
case class TastyDocumentableSource(val path: String, val lineNumber: Int)
194214

195215
type DocPart = DocTag

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import org.jetbrains.dokka.pages._
1010

1111
import scala.collection.JavaConverters._
1212

13+
import dotty.dokka.model.api._
14+
1315
class SitePagesCreator(using ctx: DocContext) extends BaseStaticSiteProcessor:
1416
private def mkRootPage(input: RootPageNode, children: List[PageNode]): AContentPage =
1517
input match
@@ -44,7 +46,7 @@ class SitePagesCreator(using ctx: DocContext) extends BaseStaticSiteProcessor:
4446
val msg = s"ERROR: Multiple index pages for doc found ${indexes.map(_.template.file)}"
4547
report.error(msg)
4648

47-
def emptyContent = ctx.asContent(Text(), mkDRI(extra = "root_content")).get(0)
49+
def emptyContent = ctx.asContent(Text(), DRI(extra = "root_content")).get(0)
4850

4951
val root = ctx.indexPage().toList.map(_.copy(getDri = JSet(docsRootDRI)))
5052
val docsRoot = AContentPage(

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ import util.Try
2020

2121
import scala.collection.JavaConverters._
2222

23+
import dotty.dokka.model.api._
24+
2325
class StaticSiteContext(
2426
val root: File,
2527
sourceSets: Set[SourceSetWrapper],
@@ -166,7 +168,7 @@ class StaticSiteContext(
166168
}.toOption
167169
pathsDri.getOrElse(memberLinkResolver(link).toList)
168170

169-
def driFor(dest: Path): DRI = mkDRI(s"_.${root.toPath.relativize(dest)}")
171+
def driFor(dest: Path): DRI = DRI(location = s"_.${root.toPath.relativize(dest)}")
170172

171173
def relativePath(myTemplate: LoadedTemplate) = root.toPath.relativize(myTemplate.file.toPath)
172174

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ 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.model.DPackage
89
import org.jetbrains.dokka.plugability.DokkaContext
910
import org.jetbrains.dokka.base.resolvers.external._
1011
import org.jetbrains.dokka.base.resolvers.shared._
@@ -16,6 +17,7 @@ import scala.collection.JavaConverters._
1617
import java.nio.file.Paths
1718
import java.nio.file.Path
1819
import scala.util.matching._
20+
import dotty.dokka.model.api._
1921

2022
class StaticSiteLocationProviderFactory(using ctx: DokkaContext) extends LocationProviderFactory:
2123
override def getLocationProvider(pageNode: RootPageNode): LocationProvider =
@@ -69,6 +71,13 @@ class StaticSiteLocationProvider(pageNode: RootPageNode)(using ctx: DokkaContext
6971

7072
case _: ModulePage if summon[DocContext].staticSiteContext.isEmpty =>
7173
JList("index")
74+
case page: ContentPage if page.getDocumentable != null =>
75+
(
76+
List("api") ++
77+
page.getDocumentable.getDri.location.split(Array('.')).toList ++
78+
(if(page.getDocumentable.isInstanceOf[DPackage]) then List("index") else List.empty) ++
79+
page.getDocumentable.getDri.anchor
80+
).asJava
7281
case _ =>
7382
jpath
7483

@@ -116,7 +125,7 @@ class StaticSiteLocationProvider(pageNode: RootPageNode)(using ctx: DokkaContext
116125

117126
override def getExternalLocation(dri: DRI, sourceSets: JSet[DisplaySourceSet]): String =
118127
val regex = raw"\[origin:(.*)\]".r
119-
val origin = regex.findFirstIn(Option(dri.getExtra).getOrElse(""))
128+
val origin = regex.findFirstIn(Option(dri.extra).getOrElse(""))
120129
origin match {
121130
case Some(path) => externalLocationProviders.find { (regexes, provider) =>
122131
regexes.exists(r => r.matches(path))

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package site
33

44
import java.io.File
55
import java.nio.file.Files
6+
import dotty.dokka.model.api._
67

78
import com.vladsch.flexmark.ext.anchorlink.AnchorLinkExtension
89
import com.vladsch.flexmark.ext.autolink.AutolinkExtension
@@ -22,9 +23,9 @@ import org.jetbrains.dokka.pages._
2223

2324
import scala.collection.JavaConverters._
2425

25-
val docsRootDRI: DRI = mkDRI("_.index.md")
26-
val docsDRI: DRI = mkDRI("_.docs/index.md")
27-
val apiPageDRI: DRI = mkDRI(packageName = "api", extra = "__api__")
26+
val docsRootDRI: DRI = DRI(location = "_.index.md")
27+
val docsDRI: DRI = DRI(location = "_.docs/index.md")
28+
val apiPageDRI: DRI = DRI(location = "api", extra = "__api__")
2829

2930
val defaultMarkdownOptions: DataHolder =
3031
new MutableDataSet()

0 commit comments

Comments
 (0)