@@ -175,14 +175,52 @@ class MemberRenderer(signatureRenderer: SignatureRenderer)(using DocContext) ext
175
175
)
176
176
177
177
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
+
186
224
187
225
def memberIcon (member : Member ) = member.kind match {
188
226
case _ =>
0 commit comments