Skip to content

Commit 27fe46f

Browse files
committed
Add support for experimental (separate section)
1 parent 6261d39 commit 27fe46f

File tree

4 files changed

+41
-6
lines changed

4 files changed

+41
-6
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ case class Member(
172172
knownChildren: Seq[LinkToType] = Nil,
173173
companion: Option[(Kind, DRI)] = None,
174174
deprecated: Option[Annotation] = None,
175+
experimental: Option[Annotation] = None
175176
):
176177
def needsOwnPage: Boolean =
177178
def properKind(kind: Kind): Boolean = kind match

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

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,8 @@ class MemberRenderer(signatureRenderer: SignatureRenderer)(using DocContext) ext
9898
tableRow("Deprecated", content*)
9999
}
100100

101+
def experimental(m: Member) = m.experimental.fold(Nil)(_ => tableRow("Experimental", Seq("true")))
102+
101103
def typeParams(m: Member): Seq[AppliedTag] = m.docs.fold(Nil)(d => flattenedDocPart(d.typeParams))
102104
def valueParams(m: Member): Seq[AppliedTag] = m.docs.fold(Nil)(d => flattenedDocPart(d.valueParams))
103105

@@ -113,6 +115,7 @@ class MemberRenderer(signatureRenderer: SignatureRenderer)(using DocContext) ext
113115
docAttributes(m),
114116
companion(m),
115117
deprecation(m),
118+
experimental(m),
116119
defintionClasses(m),
117120
inheritedFrom(m),
118121
source(m),
@@ -304,6 +307,10 @@ class MemberRenderer(signatureRenderer: SignatureRenderer)(using DocContext) ext
304307
case m: Member => m.deprecated.nonEmpty
305308
case g: MGroup => g.members.exists(isDeprecated)
306309

310+
private def isExperimental(m: Member | MGroup): Boolean = m match
311+
case m: Member => m.experimental.nonEmpty
312+
case g: MGroup => g.members.exists(isExperimental)
313+
307314
private def isInherited(m: Member | MGroup): Boolean = m match
308315
case m: Member => m.inheritedFrom.nonEmpty
309316
case g: MGroup => g.members.exists(isInherited)
@@ -315,7 +322,8 @@ class MemberRenderer(signatureRenderer: SignatureRenderer)(using DocContext) ext
315322
private type SubGroup = (String, Seq[Member | MGroup])
316323
private def buildGroup(name: String, subgroups: Seq[SubGroup]): Tab =
317324
val all = subgroups.map { case (name, members) =>
318-
val (allInherited, allDefined) = members.partition(isInherited)
325+
val (experimental, nonExperimental) = members.partition(isExperimental)
326+
val (allInherited, allDefined) = nonExperimental.partition(isInherited)
319327
val (depDefined, defined) = allDefined.partition(isDeprecated)
320328
val (depInherited, inherited) = allInherited.partition(isDeprecated)
321329
val normalizedName = name.toLowerCase
@@ -331,7 +339,8 @@ class MemberRenderer(signatureRenderer: SignatureRenderer)(using DocContext) ext
331339
definedWithGroup ++ List(
332340
actualGroup(s"Deprecated ${normalizedName}", depDefined),
333341
actualGroup(s"Inherited ${normalizedName}", inherited),
334-
actualGroup(s"Deprecated and Inherited ${normalizedName}", depInherited)
342+
actualGroup(s"Deprecated and Inherited ${normalizedName}", depInherited),
343+
actualGroup(name = s"Experimental ${normalizedName}", experimental)
335344
)
336345
}
337346

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,5 +66,10 @@ trait BasicSupport:
6666
a.symbol.packageName == "java.lang" && a.symbol.className.contains("Deprecated")
6767
}.map(parseAnnotation)
6868

69+
def isExperimental(): Option[Annotation] =
70+
sym.annotations.find { a =>
71+
a.symbol.packageName == "scala.annotation" && a.symbol.className.contains("experimental")
72+
}.map(parseAnnotation)
73+
6974
def isLeftAssoc: Boolean = !sym.name.endsWith(":")
7075
end extension

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

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ trait ClassLikeSupport:
110110
modifiers = modifiers,
111111
graph = graph,
112112
deprecated = classDef.symbol.isDeprecated(),
113+
experimental = classDef.symbol.isExperimental()
113114
).copy(
114115
directParents = classDef.getParentsAsLinkToTypes,
115116
parents = supertypes,
@@ -382,7 +383,16 @@ trait ClassLikeSupport:
382383
.filterNot(m => m == Modifier.Lazy || m == Modifier.Final)
383384
case _ => methodSymbol.getExtraModifiers()
384385

385-
mkMember(methodSymbol, methodKind, method.returnTpt.tpe.asSignature)(modifiers = modifiers, origin = origin, deprecated = methodSymbol.isDeprecated())
386+
mkMember(
387+
methodSymbol,
388+
methodKind,
389+
method.returnTpt.tpe.asSignature
390+
)(
391+
modifiers = modifiers,
392+
origin = origin,
393+
deprecated = methodSymbol.isDeprecated(),
394+
experimental = methodSymbol.isExperimental()
395+
)
386396

387397
def mkParameter(
388398
argument: ValDef,
@@ -450,7 +460,11 @@ trait ClassLikeSupport:
450460
Some(Link(l.tpe.typeSymbol.owner.name, l.tpe.typeSymbol.owner.dri))
451461
case _ => None
452462
}
453-
mkMember(typeDef.symbol, Kind.Exported(kind), tpeTree.asSignature)(deprecated = typeDef.symbol.isDeprecated(), origin = Origin.ExportedFrom(origin))
463+
mkMember(typeDef.symbol, Kind.Exported(kind), tpeTree.asSignature)(
464+
deprecated = typeDef.symbol.isDeprecated(),
465+
origin = Origin.ExportedFrom(origin),
466+
experimental = typeDef.symbol.isExperimental()
467+
)
454468
}
455469
else mkMember(typeDef.symbol, kind, tpeTree.asSignature)(deprecated = typeDef.symbol.isDeprecated())
456470

@@ -468,14 +482,19 @@ trait ClassLikeSupport:
468482
.filterNot(m => m == Modifier.Lazy || m == Modifier.Final)
469483
case _ => valDef.symbol.getExtraModifiers()
470484

471-
mkMember(valDef.symbol, kind, memberInfo.res.asSignature)(modifiers = modifiers, deprecated = valDef.symbol.isDeprecated())
485+
mkMember(valDef.symbol, kind, memberInfo.res.asSignature)(
486+
modifiers = modifiers,
487+
deprecated = valDef.symbol.isDeprecated(),
488+
experimental = valDef.symbol.isExperimental()
489+
)
472490

473491
def mkMember(symbol: Symbol, kind: Kind, signature: DSignature)(
474492
modifiers: Seq[Modifier] = symbol.getExtraModifiers(),
475493
origin: Origin = Origin.RegularlyDefined,
476494
inheritedFrom: Option[InheritedFrom] = None,
477495
graph: HierarchyGraph = HierarchyGraph.empty,
478496
deprecated: Option[Annotation] = None,
497+
experimental: Option[Annotation] = None
479498
) = Member(
480499
name = symbol.normalizedName,
481500
fullName = symbol.fullName,
@@ -490,7 +509,8 @@ trait ClassLikeSupport:
490509
inheritedFrom = inheritedFrom,
491510
graph = graph,
492511
docs = symbol.documentation,
493-
deprecated = deprecated
512+
deprecated = deprecated,
513+
experimental = experimental
494514
)
495515

496516
object EvidenceOnlyParameterList

0 commit comments

Comments
 (0)