@@ -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 _ =>
0 commit comments