Skip to content

Commit ee74d83

Browse files
committed
Scala3doc: manually document patched definitions
1 parent 1ed636e commit ee74d83

File tree

1 file changed

+35
-9
lines changed

1 file changed

+35
-9
lines changed

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

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,13 @@ trait ClassLikeSupport:
6969

7070
val fullExtra =
7171
if (signatureOnly) baseExtra
72-
else baseExtra.plus(CompositeMemberExtension(
73-
classDef.extractMembers,
74-
classDef.getParents.map(_.dokkaType.asSignature),
75-
supertypes,
76-
Nil))
72+
else
73+
baseExtra.plus(CompositeMemberExtension(
74+
classDef.extractPatchedMembers,
75+
classDef.getParents.map(_.dokkaType.asSignature),
76+
supertypes,
77+
Nil))
78+
end if
7779

7880
new DClass(
7981
dri,
@@ -109,9 +111,9 @@ trait ClassLikeSupport:
109111
case dd: DefDef if !dd.symbol.isHiddenByVisibility && !dd.symbol.isSyntheticFunc && dd.symbol.isExtensionMethod =>
110112
dd.symbol.extendedSymbol.map { extSym =>
111113
val target = ExtensionTarget(
112-
extSym.symbol.normalizedName,
113-
extSym.tpt.dokkaType.asSignature,
114-
extSym.tpt.symbol.dri,
114+
extSym.symbol.normalizedName,
115+
extSym.tpt.dokkaType.asSignature,
116+
extSym.tpt.symbol.dri,
115117
extSym.symbol.pos.start
116118
)
117119
parseMethod(dd.symbol, kind = Kind.Extension(target))
@@ -203,6 +205,31 @@ trait ClassLikeSupport:
203205
inherited.flatMap(s => parseInheritedMember(s))
204206
}
205207

208+
/** Extracts members while taking Dotty logic for patching the stdlib into account. */
209+
def extractPatchedMembers: Seq[Member] = {
210+
val ownMembers = c.extractMembers
211+
def extractPatchMembers(sym: Symbol) = {
212+
// NOTE for some reason scala.language$.experimental$ class doesn't show up here, so we manually add the name
213+
val ownMemberDRIs = ownMembers.iterator.map(_.name).toSet + "experimental$"
214+
sym.tree.asInstanceOf[ClassDef]
215+
.membersToDocument.filterNot(m => ownMemberDRIs.contains(m.symbol.name))
216+
.flatMap(parseMember)
217+
}
218+
c.symbol.show match {
219+
case "scala.Predef$" =>
220+
ownMembers ++
221+
extractPatchMembers(qctx.reflect.Symbol.requiredClass("scala.runtime.stdLibPatches.Predef$"))
222+
case "scala.language$" =>
223+
ownMembers ++
224+
extractPatchMembers(qctx.reflect.Symbol.requiredModule("scala.runtime.stdLibPatches.language").moduleClass)
225+
case "scala.language$.experimental$" =>
226+
ownMembers ++
227+
extractPatchMembers(qctx.reflect.Symbol.requiredModule("scala.runtime.stdLibPatches.language.experimental").moduleClass)
228+
case _ => ownMembers
229+
}
230+
231+
}
232+
206233
def getParents: List[Tree] =
207234
for
208235
parentTree <- c.parents if isValidPos(parentTree.pos) // We assume here that order is correct
@@ -417,4 +444,3 @@ trait ClassLikeSupport:
417444
valDef.symbol.source
418445
))
419446
)
420-

0 commit comments

Comments
 (0)