Skip to content

Commit ed1ef0d

Browse files
committed
Add NameNormalizer
1 parent c548048 commit ed1ef0d

File tree

4 files changed

+25
-16
lines changed

4 files changed

+25
-16
lines changed

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

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ trait ClassLikeSupport:
3030
object DClass:
3131
def apply[T >: DClass](classDef: ClassDef)(
3232
dri: DRI = classDef.symbol.dri,
33-
name: String = classDef.name,
33+
name: String = classDef.symbol.normalizedName,
3434
signatureOnly: Boolean = false,
3535
modifiers: Seq[Modifier] = classDef.symbol.getExtraModifiers(),
3636
): DClass =
@@ -109,7 +109,7 @@ trait ClassLikeSupport:
109109
private def parseMember(s: Tree): Option[Member] = processTreeOpt(s)(s match
110110
case dd: DefDef if !dd.symbol.isHiddenByVisibility && !dd.symbol.isSyntheticFunc && dd.symbol.isExtensionMethod =>
111111
dd.symbol.extendedSymbol.map { extSym =>
112-
val target = ExtensionTarget(extSym.symbol.name, extSym.tpt.dokkaType.asSignature, extSym.tpt.symbol.dri)
112+
val target = ExtensionTarget(extSym.symbol.normalizedName, extSym.tpt.dokkaType.asSignature, extSym.tpt.symbol.dri)
113113
parseMethod(dd.symbol, kind = Kind.Extension(target))
114114
}
115115
// TODO check given methods?
@@ -164,7 +164,7 @@ trait ClassLikeSupport:
164164
private def parseInheritedMember(s: Tree): Option[Member] = processTreeOpt(s)(s match
165165
case c: ClassDef if c.symbol.shouldDocumentClasslike && !c.symbol.isGiven => Some(parseClasslike(c, signatureOnly = true))
166166
case other => parseMember(other)
167-
).map(_.withOrigin(Origin.InheritedFrom(s.symbol.owner.name, s.symbol.owner.dri)))
167+
).map(_.withOrigin(Origin.InheritedFrom(s.symbol.owner.normalizedName, s.symbol.owner.dri)))
168168

169169
extension (c: ClassDef):
170170
def membersToDocument = c.body.filterNot(_.symbol.isHiddenByVisibility)
@@ -197,7 +197,7 @@ trait ClassLikeSupport:
197197
}.toList
198198

199199
def getParameterModifier(parameter: Symbol): String =
200-
val fieldSymbol = c.symbol.field(parameter.name)
200+
val fieldSymbol = c.symbol.field(parameter.normalizedName)
201201
if fieldSymbol.flags.is(Flags.Mutable) then "var "
202202
else if fieldSymbol.flags.is(Flags.ParamAccessor) && !c.symbol.flags.is(Flags.Case) && !fieldSymbol.flags.is(Flags.Private) then "val "
203203
else ""
@@ -221,7 +221,6 @@ trait ClassLikeSupport:
221221

222222
def parseObject(classDef: ClassDef, signatureOnly: Boolean = false)(using ctx: Context): DClass =
223223
DClass(classDef)(
224-
name = classDef.name.stripSuffix("$"),
225224
// All objects are final so we do not need final modifer!
226225
modifiers = classDef.symbol.getExtraModifiers().filter(_ != Modifier.Final),
227226
signatureOnly = signatureOnly
@@ -266,11 +265,7 @@ trait ClassLikeSupport:
266265
Kind.Implicit(Kind.Def, None)
267266
else kind
268267

269-
val name = methodKind match
270-
case Kind.Constructor => "this"
271-
case Kind.Given(_, _) => methodSymbol.name.stripPrefix("given_")
272-
case Kind.Extension(_) => methodSymbol.name.stripPrefix("extension_")
273-
case _ => methodSymbol.name
268+
val name = method.symbol.normalizedName
274269

275270
new DFunction(
276271
methodSymbol.dri,
@@ -302,7 +297,7 @@ trait ClassLikeSupport:
302297
def parseArgument(argument: ValDef, prefix: Symbol => String, isExtendedSymbol: Boolean = false, isGrouped: Boolean = false): DParameter =
303298
new DParameter(
304299
argument.symbol.dri,
305-
prefix(argument.symbol) + argument.symbol.name,
300+
prefix(argument.symbol) + argument.symbol.normalizedName,
306301
argument.symbol.documentation.asJava,
307302
null,
308303
argument.tpt.dokkaType,
@@ -320,7 +315,7 @@ trait ClassLikeSupport:
320315
else ""
321316

322317
new DTypeParameter(
323-
Invariance(TypeParameter(argument.symbol.dri, variancePrefix + argument.symbol.name, null)),
318+
Invariance(TypeParameter(argument.symbol.dri, variancePrefix + argument.symbol.normalizedName, null)),
324319
argument.symbol.documentation.asJava,
325320
null,
326321
JList(argument.rhs.dokkaType),
@@ -343,7 +338,7 @@ trait ClassLikeSupport:
343338

344339
new DProperty(
345340
typeDef.symbol.dri,
346-
typeDef.name,
341+
typeDef.symbol.normalizedName,
347342
/*documentation =*/ typeDef.symbol.documentation.asJava,
348343
/*expectPresentInSet =*/ null, // unused
349344
/*sources =*/ JMap(),
@@ -374,7 +369,7 @@ trait ClassLikeSupport:
374369

375370
new DProperty(
376371
valDef.symbol.dri,
377-
valDef.name,
372+
valDef.symbol.normalizedName,
378373
/*documentation =*/ valDef.symbol.documentation.asJava,
379374
/*expectPresentInSet =*/ null, // unused
380375
/*sources =*/ JMap(),
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package dotty.dokka.tasty
2+
3+
import dotty.dokka._
4+
5+
trait NameNormalizer:
6+
self: TastyParser =>
7+
import qctx.reflect._
8+
extension (s: Symbol) def normalizedName: String = {
9+
val withoutGivenPrefix = if s.isGiven then s.name.stripPrefix("given_") else s.name
10+
val withoutExtensionPrefix = if s.isExtensionMethod then withoutGivenPrefix.stripPrefix("extension_") else withoutGivenPrefix
11+
val withoutObjectSuffix = if s.flags.is(Flags.Object) then withoutExtensionPrefix.stripSuffix("$") else withoutExtensionPrefix
12+
val constructorNormalizedName = if s.isClassConstructor then "this" else withoutObjectSuffix
13+
constructorNormalizedName
14+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ trait DokkaBaseTastyInspector:
157157

158158
/** Parses a single Tasty compilation unit. */
159159
case class TastyParser(qctx: QuoteContext, inspector: DokkaBaseTastyInspector, config: DottyDokkaConfig)
160-
extends ScaladocSupport with BasicSupport with TypesSupport with ClassLikeSupport with SyntheticsSupport with PackageSupport:
160+
extends ScaladocSupport with BasicSupport with TypesSupport with ClassLikeSupport with SyntheticsSupport with PackageSupport with NameNormalizer:
161161
import qctx.reflect._
162162

163163
def sourceSet = inspector.sourceSet

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ trait TypesSupport:
6161

6262
private def link(symbol: Symbol)(using cxt: Context): List[JProjection] = {
6363
val suffix = if symbol.isValDef then texts(".type") else Nil
64-
(new TypeParameter(symbol.dri, symbol.name, null)) :: suffix
64+
(new TypeParameter(symbol.dri, symbol.normalizedName, null)) :: suffix
6565
}
6666

6767
private def commas(lists: List[List[JProjection]]) = lists match

0 commit comments

Comments
 (0)