Skip to content

Commit 0c361cf

Browse files
committed
Split type signatures into two separate spans (short and long)
1 parent bca0b44 commit 0c361cf

File tree

2 files changed

+47
-9
lines changed

2 files changed

+47
-9
lines changed

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

Lines changed: 46 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -175,14 +175,52 @@ class MemberRenderer(signatureRenderer: SignatureRenderer)(using DocContext) ext
175175
)
176176

177177
val signature: MemberSignature = signatureProvider.rawSignature(member)()
178-
Seq(
179-
div(cls := "signature")(
180-
span(cls := "modifiers")(signature.prefix.map(renderElement(_))),
181-
span(cls := "kind")(signature.kind.map(renderElement(_))),
182-
signature.name.map(renderElement(_, nameClasses*)),
183-
span(signature.suffix.map(renderElement(_)))
184-
),
185-
)
178+
val isSubtype = signature.suffix.exists {
179+
case Keyword(keyword) => keyword.contains("extends")
180+
case _ => false
181+
}
182+
if !isSubtype then
183+
Seq(
184+
div(cls := "signature")(
185+
(Seq[TagArg](
186+
span(cls := "modifiers")(signature.prefix.map(renderElement(_))),
187+
span(cls := "kind")(signature.kind.map(renderElement(_))),
188+
signature.name.map(renderElement(_, nameClasses*))
189+
) ++ signature.suffix.map(renderElement(_)))*
190+
),
191+
)
192+
else
193+
val (beforeExtends, afterExtends) = signature.suffix.splitAt(signature.suffix.indexOf(Keyword("extends")))
194+
val (shortSuffix, longSuffix) = splitTypeSuffixSignature(beforeExtends, afterExtends)
195+
Seq(
196+
div(cls := "signature")(
197+
span(cls := "signature-short")(
198+
(Seq[TagArg](
199+
span(cls := "modifiers")(signature.prefix.map(renderElement(_))),
200+
span(cls := "kind")(signature.kind.map(renderElement(_))),
201+
signature.name.map(renderElement(_, nameClasses *))
202+
) ++ shortSuffix.map(renderElement(_)))*
203+
),
204+
span(cls := "signature-long")(
205+
longSuffix.map(renderElement(_))*
206+
)
207+
),
208+
)
209+
end memberSignature
210+
211+
def splitTypeSuffixSignature(shortAcc: List[SignaturePart], tail: List[SignaturePart], nestedTypeLevel: Int = 0): (List[SignaturePart], List[SignaturePart]) =
212+
tail match
213+
case Nil =>
214+
(shortAcc, Nil)
215+
case (head @ Plain("[")) :: rest =>
216+
splitTypeSuffixSignature(shortAcc :+ head, rest, nestedTypeLevel + 1)
217+
case (head @ Plain("]")) :: rest =>
218+
splitTypeSuffixSignature(shortAcc :+ head, rest, nestedTypeLevel - 1)
219+
case (head @ Keyword(", ")) :: rest if nestedTypeLevel == 0 =>
220+
(shortAcc :+ head, rest)
221+
case head :: rest =>
222+
splitTypeSuffixSignature(shortAcc :+ head, rest, nestedTypeLevel)
223+
186224

187225
def memberIcon(member: Member) = member.kind match {
188226
case _ =>

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ trait SignatureRenderer:
1515
def currentDri: DRI
1616
def link(dri: DRI): Option[String]
1717

18-
def renderElement(e: SignaturePart, modifiers: AppliedAttr*) = renderElementWith(e, modifiers*)
18+
def renderElement(e: SignaturePart, modifiers: AppliedAttr*): AppliedTag = renderElementWith(e, modifiers*)
1919

2020
def renderLink(name: String, dri: DRI, modifiers: AppliedAttr*) =
2121
renderLinkContent(name, dri, modifiers:_*)

0 commit comments

Comments
 (0)