@@ -68,7 +68,7 @@ class MemberRenderer(signatureRenderer: SignatureRenderer)(using DocContext) ext
68
68
69
69
def source (m : Member ): Seq [AppliedTag ] =
70
70
summon[DocContext ].sourceLinks.pathTo(m).fold(Nil ){ link =>
71
- tableRow(" Source" , a(href := link)(" (source)" ))
71
+ tableRow(" Source" , a(href := link)(m.sources.fold( " (source)" )(_.path.getFileName().toString()) ))
72
72
}
73
73
74
74
def deprecation (m : Member ): Seq [AppliedTag ] = m.deprecated.fold(Nil ){ a =>
@@ -123,7 +123,7 @@ class MemberRenderer(signatureRenderer: SignatureRenderer)(using DocContext) ext
123
123
case _ => Nil
124
124
}
125
125
126
- def memberSingnature (member : Member ) =
126
+ def memberSignature (member : Member ) =
127
127
val depStyle = if member.deprecated.isEmpty then " " else " deprecated"
128
128
val nameClasses = cls := s " documentableName $depStyle"
129
129
@@ -164,7 +164,7 @@ class MemberRenderer(signatureRenderer: SignatureRenderer)(using DocContext) ext
164
164
div(topLevelAttr:_* )(
165
165
a(href := (if member.needsOwnPage then link(member.dri).getOrElse(" #" ) else s " # ${member.dri.anchor}" ), cls := " documentableAnchor" ),
166
166
div(annotations(member)),
167
- div(cls := " header monospace" )(memberSingnature (member)),
167
+ div(cls := " header monospace" )(memberSignature (member)),
168
168
div(cls := " docs" )(
169
169
span(cls := " modifiers" ), // just to have padding on left
170
170
div(
@@ -202,22 +202,34 @@ class MemberRenderer(signatureRenderer: SignatureRenderer)(using DocContext) ext
202
202
case m : Member => m.inheritedFrom.nonEmpty
203
203
case g : MGroup => g.members.exists(isInherited)
204
204
205
+ private def isAbstract (m : Member | MGroup ): Boolean = m match
206
+ case m : Member => m.modifiers.exists(Set (Modifier .Abstract , Modifier .Deferred ).contains)
207
+ case g : MGroup => g.members.exists(isAbstract)
208
+
205
209
private type SubGroup = (String , Seq [Member | MGroup ])
206
210
private def buildGroup (name : String , subgroups : Seq [SubGroup ]): Tab =
207
211
val all = subgroups.map { case (name, members) =>
208
212
val (allInherited, allDefined) = members.partition(isInherited)
209
213
val (depDefined, defined) = allDefined.partition(isDeprecated)
210
214
val (depInherited, inherited) = allInherited.partition(isDeprecated)
211
- (
212
- actualGroup(name, defined),
213
- actualGroup(s " Deprecated ${name.toLowerCase}" , depDefined),
214
- actualGroup(s " Inherited ${name.toLowerCase}" , inherited),
215
- actualGroup(s " Deprecated and Inherited ${name.toLowerCase}" , depInherited)
215
+ val normalizedName = name.toLowerCase
216
+ val definedWithGroup = if Set (" methods" , " fields" ).contains(normalizedName) then
217
+ val (abstr, concr) = defined.partition(isAbstract)
218
+ Seq (
219
+ actualGroup(s " Abstract ${normalizedName}" , abstr),
220
+ actualGroup(s " Concrete ${normalizedName}" , concr)
221
+ )
222
+ else
223
+ Seq (actualGroup(name, defined))
224
+
225
+ definedWithGroup ++ List (
226
+ actualGroup(s " Deprecated ${normalizedName}" , depDefined),
227
+ actualGroup(s " Inherited ${normalizedName}" , inherited),
228
+ actualGroup(s " Deprecated and Inherited ${normalizedName}" , depInherited)
216
229
)
217
230
}
218
231
219
- val children =
220
- all.flatMap(_._1) ++ all.flatMap(_._2) ++ all.flatMap(_._3) ++ all.flatMap(_._4)
232
+ val children = all.flatten.flatten
221
233
if children.isEmpty then emptyTab
222
234
else Tab (name, name, h2(tabAttr(name))(name) +: children, " selected" )
223
235
@@ -363,7 +375,7 @@ class MemberRenderer(signatureRenderer: SignatureRenderer)(using DocContext) ext
363
375
),
364
376
div(cls := " signature monospace" )(
365
377
annotations(m),
366
- memberSingnature (m)
378
+ memberSignature (m)
367
379
)
368
380
)
369
381
0 commit comments