Skip to content

Commit 73f46e8

Browse files
committed
Migrate away from dokka outside doc comments
This is huge and scarry commit
1 parent 74dbbaa commit 73f46e8

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+449
-1972
lines changed

scala3doc/resources/META-INF/services/org.jetbrains.dokka.plugability.DokkaPlugin

Lines changed: 0 additions & 1 deletion
This file was deleted.

scala3doc/src/dotty/dokka/DRI.scala

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package dotty.dokka
2+
3+
import java.nio.file.Path
4+
import org.jetbrains.dokka.links.PointingToDeclaration
5+
6+
val staticFileSymbolUUID = "___staticFile___"
7+
8+
val topLevelDri = DRI("/")
9+
10+
type DDRI = org.jetbrains.dokka.links.DRI
11+
12+
// we may need target...
13+
case class DRI(
14+
location: String,
15+
anchor: String = "",
16+
origin: String = "",
17+
symbolUUID: String = ""
18+
):
19+
def withNoOrigin = copy(origin = "")
20+
21+
def isStaticFile = symbolUUID == staticFileSymbolUUID
22+
23+
def asDokka: DDRI = new DDRI(
24+
location,
25+
anchor,
26+
null,
27+
PointingToDeclaration.INSTANCE,
28+
origin + ":" + symbolUUID
29+
)
30+
31+
object DRI:
32+
def forPath(path: Path) = DRI(location = path.toString, symbolUUID = staticFileSymbolUUID)
33+
34+
extension (dokkaDri: DDRI)
35+
def asScala: DRI =
36+
val elements = dokkaDri.getExtra.split(":")
37+
val origin = elements.headOption.getOrElse("")
38+
val symbolUUID = elements.drop(1).mkString(":")
39+
DRI(
40+
dokkaDri.getPackageName,
41+
dokkaDri.getClassNames,
42+
origin,
43+
symbolUUID
44+
)

scala3doc/src/dotty/dokka/DocContext.scala

Lines changed: 2 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package dotty.dokka
22

33
import org.jetbrains.dokka._
4-
import org.jetbrains.dokka.DokkaSourceSetImpl
54
import org.jetbrains.dokka.plugability.DokkaContext
65
import java.io.File
76
import java.nio.file.Files
@@ -80,7 +79,7 @@ case class DocContext(args: Scala3doc.Args, compilerContext: CompilerContext)
8079
override def getCacheRoot: File = null
8180
override def getOfflineMode: Boolean = false
8281
override def getFailOnWarning: Boolean = false
83-
override def getSourceSets: JList[DokkaSourceSet] = JList(mkSourceSet)
82+
override def getSourceSets: JList[DokkaSourceSet] = JNil
8483
override def getModules: JList[DokkaConfiguration.DokkaModuleDescription] = JNil
8584
override def getPluginsClasspath: JList[File] = JNil
8685
override def getModuleName(): String = "ModuleName"
@@ -97,41 +96,11 @@ case class DocContext(args: Scala3doc.Args, compilerContext: CompilerContext)
9796

9897
lazy val staticSiteContext = args.docsRoot.map(path => StaticSiteContext(
9998
File(path).getAbsoluteFile(),
100-
Set(mkSourceSet.asInstanceOf[SourceSetWrapper]),
10199
args,
102100
sourceLinks
103101
)(using compilerContext))
104102

105103
val externalDocumentationLinks = args.externalMappings
106104

107105
override def getPluginsConfiguration: JList[DokkaConfiguration.PluginConfiguration] =
108-
JNil
109-
110-
val mkSourceSet: DokkaSourceSet =
111-
new DokkaSourceSetImpl(
112-
/*displayName=*/ args.name,
113-
/*sourceSetID=*/ new DokkaSourceSetID(args.name, "main"),
114-
/*classpath=*/ JNil,
115-
/*sourceRoots=*/ JSet(),
116-
/*dependentSourceSets=*/ JSet(),
117-
/*samples=*/ JSet(),
118-
/*includes=*/ JSet(),
119-
/*includeNonPublic=*/ true,
120-
/* changed because of exception in reportUndocumentedTransformer - there's 'when' which doesnt match because it contains only KotlinVisbility cases */
121-
/*reportUndocumented=*/ false,
122-
// Now all our packages are empty from dokka perspective
123-
/*skipEmptyPackages=*/ false,
124-
/*skipDeprecated=*/ true,
125-
/*jdkVersion=*/ 8,
126-
/*sourceLinks=*/ JSet(),
127-
/*perPackageOptions=*/ JList(),
128-
/*externalDocumentationLinks=*/ JSet(),
129-
/*languageVersion=*/ null,
130-
/*apiVersion=*/ null,
131-
/*noStdlibLink=*/ true,
132-
/*noJdkLink=*/ true,
133-
/*suppressedFiles=*/ JSet(),
134-
/*suppressedFiles=*/ Platform.jvm
135-
).asInstanceOf[DokkaSourceSet] // Why I do need to cast here? Kotlin magic?
136-
137-
val sourceSet = mkSourceSet.asInstanceOf[SourceSetWrapper]
106+
JNil

scala3doc/src/dotty/dokka/DottyDokkaPlugin.scala

Lines changed: 0 additions & 157 deletions
This file was deleted.

scala3doc/src/dotty/dokka/Main.scala

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
package dotty.dokka
22

3-
import org.jetbrains.dokka._
4-
import org.jetbrains.dokka.utilities._
5-
import org.jetbrains.dokka.plugability._
63
import java.util.ServiceLoader
74
import java.io.File
85
import java.util.jar._

scala3doc/src/dotty/dokka/Scala3doc.scala

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,22 @@ object Scala3doc:
9393
ctx.reporter
9494

9595

96-
private [dokka] def run(args: Args)(using ctx: CompilerContext) =
97-
val docContext = new DocContext(args, ctx)
98-
new DokkaGenerator(docContext, docContext.logger).generate()
99-
96+
private [dokka] def run(args: Args)(using ctx: CompilerContext): DocContext =
97+
98+
given docContext: DocContext = new DocContext(args, ctx)
99+
100+
val module = ScalaModuleProvider.mkModule()
101+
given dokkaContext: DokkaContext =
102+
DokkaContext.Companion.create(docContext, docContext.logger, JList())
103+
val dokkaRenderer = new DokkaScalaHtmlRenderer
104+
105+
val renderer = new dotty.dokka.renderers.HtmlRenderer(
106+
module.rootPackage,
107+
module.members,
108+
dri => c => dokkaRenderer.buildWithKotlinx(c, FakeContentPage(dri.asDokka, c), null)
109+
)
110+
dokkaRenderer.init(renderer)
111+
renderer.render()
112+
report.inform("generation completed successfully")
113+
docContext
100114

scala3doc/src/dotty/dokka/Scala3docArgs.scala

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
package dotty.dokka
22

3-
import org.jetbrains.dokka._
4-
import org.jetbrains.dokka.utilities._
5-
import org.jetbrains.dokka.plugability._
63
import java.util.ServiceLoader
74
import java.io.File
85
import java.util.jar._
Lines changed: 12 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,28 @@
11
package dotty.dokka
22

3-
import org.jetbrains.dokka.{ DokkaConfiguration$DokkaSourceSet => DokkaSourceSet }
4-
import org.jetbrains.dokka.plugability.DokkaContext
5-
import org.jetbrains.dokka.model.properties.PropertyContainer
6-
import org.jetbrains.dokka.model.DModule
7-
import org.jetbrains.dokka.transformers.sources.SourceToDocumentableTranslator
8-
93
import dotty.dokka.tasty.DokkaTastyInspector
10-
import org.jetbrains.dokka.pages.{Kind => _, _}
114
import dotty.dokka.model.api._
12-
import org.jetbrains.dokka.model._
135
import org.jetbrains.dokka.base.parsers.MarkdownParser
146
import collection.JavaConverters._
157
import kotlin.coroutines.Continuation
168

17-
class ScalaModuleProvider(using ctx: DocContext) extends SourceToDocumentableTranslator:
18-
override def invoke(sourceSet: DokkaSourceSet, cxt: DokkaContext, unused: Continuation[? >: DModule]) =
9+
case class Module(rootPackage: Member, members: Map[DRI, Member])
10+
11+
object ScalaModuleProvider:
12+
def mkModule()(using ctx: DocContext): Module =
1913
val (result, rootDoc) = DokkaTastyInspector(new MarkdownParser(_ => null)).result()
20-
val (rootPck, rest) = result.partition(_.name == "<empty>")
21-
val packageMembers = (rest ++ rootPck.flatMap(_.allMembers)).sortBy(_.name)
14+
val (rootPck, rest) = result.partition(_.name == "API")
15+
val packageMembers = (rest ++ rootPck.flatMap(_.members)).sortBy(_.name)
2216

23-
def flattenMember(m: Member): Seq[(DRI, Member)] = (m.dri -> m) +: m.allMembers.flatMap(flattenMember)
17+
def flattenMember(m: Member): Seq[(DRI, Member)] = (m.dri -> m) +: m.members.flatMap(flattenMember)
2418

25-
val topLevelPackage = new DPackage(
26-
DRI(location = "<empty>"),
27-
JNil,
28-
JNil,
29-
JNil,
30-
JNil,
31-
JMap(),
32-
null,
33-
JSet(ctx.sourceSet),
34-
PropertyContainer.Companion.empty()
35-
).withNewMembers(packageMembers).withKind(Kind.RootPackage).withDocs(rootDoc).asInstanceOf[DPackage]
19+
val topLevelPackage =
20+
Member("API", site.apiPageDRI, Kind.RootPackage, members = packageMembers, docs = rootDoc)
21+
22+
val original = Module(topLevelPackage, flattenMember(topLevelPackage).toMap)
3623

3724
val transformers = List(
3825
ImplicitMembersExtensionTransformer(),
3926
InheritanceInformationTransformer()
4027
)
41-
42-
val module = new DModule(
43-
sourceSet.getDisplayName,
44-
JList(topLevelPackage),
45-
JMap(),
46-
null,
47-
sourceSet.toSet,
48-
PropertyContainer.Companion.empty() plus ModuleExtension(flattenMember(topLevelPackage).toMap)
49-
)
50-
51-
transformers.foldLeft(module)( (module, transformer) => transformer(module) )
52-
53-
object EmptyModuleProvider extends SourceToDocumentableTranslator:
54-
override def invoke(sourceSet: DokkaSourceSet, cxt: DokkaContext, unused: Continuation[? >: DModule]) =
55-
DModule("", JList(), Map.empty.asJava, null, Set(sourceSet).asJava, PropertyContainer.Companion.empty())
28+
transformers.foldLeft(original)((module, transformer) => transformer.apply(module))

0 commit comments

Comments
 (0)