@@ -68,7 +68,7 @@ class MemberRenderer(signatureRenderer: SignatureRenderer)(using DocContext) ext
6868
6969 def source (m : Member ): Seq [AppliedTag ] =
7070 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()) ))
7272 }
7373
7474 def deprecation (m : Member ): Seq [AppliedTag ] = m.deprecated.fold(Nil ){ a =>
@@ -123,7 +123,7 @@ class MemberRenderer(signatureRenderer: SignatureRenderer)(using DocContext) ext
123123 case _ => Nil
124124 }
125125
126- def memberSingnature (member : Member ) =
126+ def memberSignature (member : Member ) =
127127 val depStyle = if member.deprecated.isEmpty then " " else " deprecated"
128128 val nameClasses = cls := s " documentableName $depStyle"
129129
@@ -164,7 +164,7 @@ class MemberRenderer(signatureRenderer: SignatureRenderer)(using DocContext) ext
164164 div(topLevelAttr:_* )(
165165 a(href := (if member.needsOwnPage then link(member.dri).getOrElse(" #" ) else s " # ${member.dri.anchor}" ), cls := " documentableAnchor" ),
166166 div(annotations(member)),
167- div(cls := " header monospace" )(memberSingnature (member)),
167+ div(cls := " header monospace" )(memberSignature (member)),
168168 div(cls := " docs" )(
169169 span(cls := " modifiers" ), // just to have padding on left
170170 div(
@@ -202,22 +202,34 @@ class MemberRenderer(signatureRenderer: SignatureRenderer)(using DocContext) ext
202202 case m : Member => m.inheritedFrom.nonEmpty
203203 case g : MGroup => g.members.exists(isInherited)
204204
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+
205209 private type SubGroup = (String , Seq [Member | MGroup ])
206210 private def buildGroup (name : String , subgroups : Seq [SubGroup ]): Tab =
207211 val all = subgroups.map { case (name, members) =>
208212 val (allInherited, allDefined) = members.partition(isInherited)
209213 val (depDefined, defined) = allDefined.partition(isDeprecated)
210214 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)
216229 )
217230 }
218231
219- val children =
220- all.flatMap(_._1) ++ all.flatMap(_._2) ++ all.flatMap(_._3) ++ all.flatMap(_._4)
232+ val children = all.flatten.flatten
221233 if children.isEmpty then emptyTab
222234 else Tab (name, name, h2(tabAttr(name))(name) +: children, " selected" )
223235
@@ -363,7 +375,7 @@ class MemberRenderer(signatureRenderer: SignatureRenderer)(using DocContext) ext
363375 ),
364376 div(cls := " signature monospace" )(
365377 annotations(m),
366- memberSingnature (m)
378+ memberSignature (m)
367379 )
368380 )
369381
0 commit comments