Skip to content

Commit bc7a1f0

Browse files
committed
Better self type prefixes in scaladoc
1 parent 55e03b8 commit bc7a1f0

File tree

5 files changed

+19
-3
lines changed

5 files changed

+19
-3
lines changed

scaladoc-testcases/src/tests/selftypes.scala

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@ package tests.selftypes
33
class A:
44
def a: Unit = ???
55

6+
class C
7+
8+
class HasAnAndSelfType:
9+
self: A & C =>
10+
def b: Unit = ???
11+
612
class HasASelfType:
713
self: A =>
814
def b: Unit = ???

scaladoc/src/dotty/tools/scaladoc/api.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ enum Kind(val name: String){
6969
extends Kind("given") with ImplicitConversionProvider
7070
case Implicit(kind: Kind.Def | Kind.Val.type, conversion: Option[ImplicitConversion])
7171
extends Kind(kind.name) with ImplicitConversionProvider
72+
case SelfType(selfName: String) extends Kind("self")
7273
case Unknown extends Kind("Unknown")
7374
}
7475

scaladoc/src/dotty/tools/scaladoc/renderers/MemberRenderer.scala

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -349,9 +349,18 @@ class MemberRenderer(signatureRenderer: SignatureRenderer)(using DocContext) ext
349349
div(link.kind.name," ", link.signature.map(renderElement))
350350
)))
351351

352+
def selfTypeList(list: List[LinkToType]): Seq[AppliedTag] =
353+
if list.isEmpty then Nil
354+
else Seq(div(cls := "symbol monospace") { list.map {
355+
case link if link.kind.isInstanceOf[Kind.SelfType] =>
356+
div(link.kind.asInstanceOf[Kind.SelfType].selfName, ": ", link.signature.map(renderElement))
357+
case link =>
358+
div("self: ", link.signature.map(renderElement))
359+
}})
360+
352361
val supertypes = signatureList(m.parents)
353362
val subtypes = signatureList(m.knownChildren)
354-
val selfType = signatureList(m.selfType.toSeq)
363+
val selfType = selfTypeList(m.selfType.toList)
355364

356365
renderTabs(
357366
singleSelection = true,

scaladoc/src/dotty/tools/scaladoc/tasty/ClassLikeSupport.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ trait ClassLikeSupport:
8585
val selfType = classDef.self.map { (valdef: ValDef) =>
8686
val symbol = valdef.symbol
8787
val tpe = valdef.tpt.tpe
88-
LinkToType(tpe.asSignature, symbol.dri, bareClasslikeKind(symbol))
88+
LinkToType(tpe.asSignature, symbol.dri, Kind.SelfType(valdef.name))
8989
}
9090
val selfSignature: DSignature = typeForClass(classDef).asSignature
9191

scaladoc/src/dotty/tools/scaladoc/translators/ScalaSignatureProvider.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ object ScalaSignatureProvider:
3838
builder.text("package ").name(documentable.name, documentable.dri)
3939
case Kind.RootPackage =>
4040
builder
41-
case Kind.Unknown =>
41+
case Kind.Unknown | _: Kind.SelfType =>
4242
???
4343

4444
private def enumEntrySignature(member: Member, cls: Kind.Class, bdr: SignatureBuilder): SignatureBuilder =

0 commit comments

Comments
 (0)