Skip to content

Commit 39e2653

Browse files
committed
Add companion icons. Add fqname, companion badge. Style main signature
1 parent ddaf1a7 commit 39e2653

File tree

10 files changed

+77
-15
lines changed

10 files changed

+77
-15
lines changed

scaladoc/resources/dotty_res/styles/theme/components/navigation-item.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@
107107
color: var(--action-primary-content-selected);
108108
}
109109

110-
.micon {
110+
nav .micon {
111111
box-sizing: content-box;
112112
margin-right: calc(1 * var(--base-spacing));
113113
color: transparent;

scaladoc/resources/dotty_res/styles/theme/layout/content.css

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@
6060
#content h1,
6161
#content h2 {
6262
color: var(--text-primary);
63+
margin-block-end: 0;
64+
margin-block-start: 0;
6365
}
6466

6567
/* content paragraph */
@@ -208,8 +210,45 @@
208210

209211
.cover-header {
210212
display: flex;
213+
align-items: center;
211214
}
212215

213216
.cover-header .micon {
214-
margin-right: calc(2 * var(--base-spacing));
217+
position: relative;
218+
z-index: 10;
219+
}
220+
221+
.cover-header .micon.companion {
222+
position: relative;
223+
left: -16px;
224+
z-index: 0;
225+
}
226+
227+
.cover-header .icon {
228+
width: 72px;
229+
}
230+
231+
.fqname {
232+
color: var(--text-secondary);
233+
}
234+
235+
.companion-badge {
236+
color: var(--text-primary);
237+
padding: 16px;
238+
background-color: var(--indigo3);
239+
}
240+
241+
.companion-badge .micon {
242+
margin-left: 0.5em;
243+
margin-right: 0.5em;
244+
}
245+
246+
.main-signature {
247+
background-color: var(--action-primary-background-default-solid);
248+
padding: 24px;
249+
border-radius: 4px;
250+
}
251+
252+
#content>div>* {
253+
margin-bottom: 24px;
215254
}

scaladoc/src/dotty/tools/scaladoc/ScalaModuleProvider.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ object ScalaModuleProvider:
1616
def flattenMember(m: Member): Seq[(DRI, Member)] = (m.dri -> m) +: m.members.flatMap(flattenMember)
1717

1818
val topLevelPackage =
19-
Member("API", site.apiPageDRI, Kind.RootPackage, members = packageMembers, docs = rootDoc)
19+
Member("API", "", site.apiPageDRI, Kind.RootPackage, members = packageMembers, docs = rootDoc)
2020

2121
val original = Module(topLevelPackage, flattenMember(topLevelPackage).toMap)
2222

scaladoc/src/dotty/tools/scaladoc/api.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ object HierarchyGraph:
153153

154154
case class Member(
155155
name: String,
156+
fullName: String,
156157
dri: DRI,
157158
kind: Kind,
158159
visibility: Visibility = Visibility.Unrestricted,
@@ -169,7 +170,7 @@ case class Member(
169170
parents: Seq[LinkToType] = Nil,
170171
selfType: Option[LinkToType] = None,
171172
knownChildren: Seq[LinkToType] = Nil,
172-
companion: Option[DRI] = None,
173+
companion: Option[(Kind, DRI)] = None,
173174
deprecated: Option[Annotation] = None,
174175
):
175176
def needsOwnPage: Boolean =

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

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ class MemberRenderer(signatureRenderer: SignatureRenderer)(using DocContext) ext
6767
list("Example:", d.example)
6868
)
6969

70-
def companion(m: Member): Seq[AppliedTag] = m.companion.fold(Nil){dri =>
70+
def companion(m: Member): Seq[AppliedTag] = m.companion.fold(Nil){ (_, dri) =>
7171
val kindName = if m.kind == Kind.Object then "class" else "object"
7272
tableRow("Companion:", signatureRenderer.renderLink(kindName, dri))
7373
}
@@ -152,9 +152,13 @@ class MemberRenderer(signatureRenderer: SignatureRenderer)(using DocContext) ext
152152

153153
def memberIcon(member: Member) = member.kind match {
154154
case _ =>
155-
val withCompanion = member.companion.fold("")(_ => "-wc")
156-
val iconSpan = span(cls := s"micon ${member.kind.name.take(2)}$withCompanion")()
157-
Seq(member.companion.flatMap(link(_)).fold(iconSpan)(link => a(href := link)(iconSpan)))
155+
156+
// val iconSpan = span(cls := s"micon ${member.kind.name.take(2)}$withCompanion")()
157+
val iconSpan = span(cls := "icon")(
158+
span(cls := s"micon ${member.kind.name.take(2)}"),
159+
member.companion.map((kind, _) => span(cls := s"micon companion ${kind.name.take(2)}")).toList
160+
)
161+
Seq(member.companion.flatMap( (_, dri) => link(dri)).fold(iconSpan)(link => a(href := link)(iconSpan)))
158162
}
159163

160164
def annotations(member: Member) =
@@ -389,6 +393,18 @@ class MemberRenderer(signatureRenderer: SignatureRenderer)(using DocContext) ext
389393
button(cls := "clearButton label-only-button", testId := "filterBarClearButton")("Clear all"),
390394
)
391395

396+
private def companionBadge(m: Member): Seq[AppliedTag] = m.companion.fold(Nil) { companion =>
397+
Seq(div(cls := "companion-badge body-small")(
398+
span(
399+
"See the",
400+
span(cls := s"micon ${companion._1.name.take(2)}"),
401+
a(href := link(companion._2).getOrElse(""))(m.name),
402+
" companion ",
403+
companion._1.name
404+
)
405+
))
406+
}
407+
392408
def fullMember(m: Member): PageContent =
393409
val intro = m.kind match
394410
case Kind.RootPackage =>Seq(h1(summon[DocContext].args.name))
@@ -398,7 +414,12 @@ class MemberRenderer(signatureRenderer: SignatureRenderer)(using DocContext) ext
398414
memberIcon(m),
399415
h1(cls := "h600")(m.name)
400416
),
401-
div(cls := "signature monospace")(
417+
div(cls := "fqname body-large")(
418+
span(m.fullName)
419+
)
420+
) ++ companionBadge(m) ++
421+
Seq(
422+
div(cls := "main-signature mono-medium")(
402423
annotations(m),
403424
memberSignature(m)
404425
)

scaladoc/src/dotty/tools/scaladoc/tasty/ClassLikeSupport.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -286,10 +286,10 @@ trait ClassLikeSupport:
286286
def getTypeParams: List[TypeDef] =
287287
c.body.collect { case targ: TypeDef => targ }.filter(_.symbol.isTypeParam)
288288

289-
def getCompanion: Option[DRI] = c.symbol.getCompanionSymbol
289+
def getCompanion: Option[(Kind, DRI)] = c.symbol.getCompanionSymbol
290290
.filter(!_.flags.is(Flags.Synthetic))
291291
.filterNot(_.isHiddenByVisibility)
292-
.map(_.dri)
292+
.map(s => (bareClasslikeKind(s), s.dri))
293293

294294

295295
def parseClasslike(classDef: ClassDef, signatureOnly: Boolean = false): Member = classDef match
@@ -466,6 +466,7 @@ trait ClassLikeSupport:
466466
deprecated: Option[Annotation] = None,
467467
) = Member(
468468
name = symbol.normalizedName,
469+
fullName = symbol.fullName,
469470
dri = symbol.dri,
470471
kind = kind,
471472
visibility = symbol.getVisibility(),

scaladoc/src/dotty/tools/scaladoc/tasty/PackageSupport.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ trait PackageSupport:
1313

1414
def parsePackage(pck: PackageClause): (String, Member) =
1515
val name = pck.symbol.fullName
16-
(name, Member(name, pck.symbol.dri, Kind.Package))
16+
(name, Member(name, "", pck.symbol.dri, Kind.Package))
1717

1818
def parsePackageObject(pckObj: ClassDef): (String, Member) =
1919
pckObj.symbol.packageName -> parseClasslike(pckObj).withKind(Kind.Package)

scaladoc/src/dotty/tools/scaladoc/tasty/TastyParser.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ case class ScaladocTastyInspector()(using ctx: DocContext) extends DocTastyInspe
135135
topLevels ++= intrinsicTypeDefs
136136
val scalaPckg = defn.ScalaPackage
137137
given parser.qctx.type = parser.qctx
138-
topLevels += "scala" -> Member(scalaPckg.fullName, scalaPckg.dri, Kind.Package)
138+
topLevels += "scala" -> Member(scalaPckg.fullName, "", scalaPckg.dri, Kind.Package)
139139
topLevels += mergeAnyRefAliasAndObject(parser)
140140

141141
def result(): (List[Member], Option[Comment]) =

scaladoc/src/dotty/tools/scaladoc/transformers/ImplicitMembersExtensionTransformer.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ class ImplicitMembersExtensionTransformer(using DocContext) extends(Module => Mo
55
override def apply(original: Module): Module =
66
val classlikeMap = original.members
77

8-
def retrieveCompanion(m: Member) = m.companion.flatMap { dri =>
8+
def retrieveCompanion(m: Member) = m.companion.flatMap { (_, dri) =>
99
val res = classlikeMap.get(dri)
1010
if res.isEmpty then
1111
report.warning(s"Companion for class ${m.name} exists but is missing in classlike map")

scaladoc/src/dotty/tools/scaladoc/translators/ScalaSignatureUtils.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ case class SignatureBuilder(content: Signature = Nil) extends ScalaSignatureUtil
7272
if filtered.nonEmpty then keyword(filtered.toSignatureString()) else this
7373

7474
def kind(t: Member) =
75-
keyword(t.kind.name)
75+
keyword(t.kind.name + " ")
7676

7777
def generics(on: Seq[TypeParameter]) = list(on.toList, List(Plain("[")), List(Plain("]"))){ (bdr, e) =>
7878
bdr.annotationsInline(e).keyword(e.variance).tpe(e.name, Some(e.dri)).signature(e.signature)

0 commit comments

Comments
 (0)