Skip to content

Commit ade9f92

Browse files
committed
chore: render @consume at the consume modifier
1 parent 746ebc8 commit ade9f92

File tree

4 files changed

+41
-23
lines changed

4 files changed

+41
-23
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ enum Modifier(val name: String, val prefix: Boolean):
4545
case Infix extends Modifier("infix", true)
4646
case AbsOverride extends Modifier("abstract override", true)
4747
case Update extends Modifier("update", true)
48+
case Consume extends Modifier("consume", true)
4849

4950
case class ExtensionTarget(name: String, typeParams: Seq[TypeParameter], argsLists: Seq[TermParameterList], signature: Signature, dri: DRI, position: Long)
5051
case class ImplicitConversion(from: DRI, to: DRI)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ trait BasicSupport:
5757
)
5858
val fqNameAllowlist =
5959
if ccEnabled then
60-
fqNameAllowlist0 + CaptureDefs.useAnnotFullName + CaptureDefs.consumeAnnotFullName
60+
fqNameAllowlist0 + CaptureDefs.useAnnotFullName
6161
else fqNameAllowlist0
6262
val documentedSymbol = summon[Quotes].reflect.Symbol.requiredClass("java.lang.annotation.Documented")
6363
val annotations = sym.annotations.filter { a =>

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ trait ClassLikeSupport:
2323

2424
extension (symbol: Symbol) {
2525
def getExtraModifiers(): Seq[Modifier] =
26-
val mods = SymOps.getExtraModifiers(symbol)()
26+
val mods = SymOps.getExtraModifiers(symbol)(self)
2727
if ccEnabled && symbol.flags.is(Flags.Mutable)then
2828
mods :+ Modifier.Update
2929
else
@@ -452,12 +452,13 @@ trait ClassLikeSupport:
452452
) =
453453
val symbol = argument.symbol
454454
val inlinePrefix = if symbol.flags.is(Flags.Inline) then "inline " else ""
455+
val comsumePrefix = if self.ccEnabled && symbol.hasAnnotation(cc.CaptureDefs.ConsumeAnnot) then "consume " else ""
455456
val name = symbol.normalizedName
456457
val nameIfNotSynthetic = Option.when(!symbol.flags.is(Flags.Synthetic))(name)
457458
val defaultValue = Option.when(symbol.flags.is(Flags.HasDefault))(Plain(" = ..."))
458459
api.TermParameter(
459460
symbol.getAnnotations(),
460-
inlinePrefix + prefix(symbol),
461+
comsumePrefix + inlinePrefix + prefix(symbol),
461462
nameIfNotSynthetic,
462463
symbol.dri,
463464
argument.tpt.asSignature(classDef, symbol.owner) :++ defaultValue,

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

Lines changed: 36 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -82,27 +82,43 @@ object SymOps:
8282

8383

8484
// Order here determines order in documenation
85-
def getExtraModifiers(): Seq[Modifier] =
85+
def getExtraModifiers(parser: TastyParser): Seq[Modifier] =
8686
import reflect._
87-
Seq(
88-
Flags.Final -> Modifier.Final,
89-
Flags.Sealed -> Modifier.Sealed,
90-
Flags.Erased -> Modifier.Erased,
91-
Flags.Abstract -> Modifier.Abstract,
92-
Flags.Deferred -> Modifier.Deferred,
93-
Flags.Implicit -> Modifier.Implicit,
94-
Flags.Infix -> Modifier.Infix,
95-
Flags.Transparent -> Modifier.Transparent,
96-
Flags.Inline -> Modifier.Inline,
97-
Flags.Lazy -> Modifier.Lazy,
98-
Flags.Open -> Modifier.Open,
99-
Flags.Override -> Modifier.Override,
100-
Flags.Case -> Modifier.Case,
101-
Flags.Opaque -> Modifier.Opaque,
102-
Flags.AbsOverride -> Modifier.AbsOverride,
103-
).collect {
104-
case (flag, mod) if sym.flags.is(flag) => mod
105-
}
87+
def getModifiersFromFlags: Seq[Modifier] =
88+
Seq(
89+
Flags.Final -> Modifier.Final,
90+
Flags.Sealed -> Modifier.Sealed,
91+
Flags.Erased -> Modifier.Erased,
92+
Flags.Abstract -> Modifier.Abstract,
93+
Flags.Deferred -> Modifier.Deferred,
94+
Flags.Implicit -> Modifier.Implicit,
95+
Flags.Infix -> Modifier.Infix,
96+
Flags.Transparent -> Modifier.Transparent,
97+
Flags.Inline -> Modifier.Inline,
98+
Flags.Lazy -> Modifier.Lazy,
99+
Flags.Open -> Modifier.Open,
100+
Flags.Override -> Modifier.Override,
101+
Flags.Case -> Modifier.Case,
102+
Flags.Opaque -> Modifier.Opaque,
103+
Flags.AbsOverride -> Modifier.AbsOverride,
104+
).collect {
105+
case (flag, mod) if sym.flags.is(flag) => mod
106+
}
107+
end getModifiersFromFlags
108+
109+
def isConsumeModifier(sym: Symbol): Boolean =
110+
parser.ccEnabled && sym.hasAnnotation(cc.CaptureDefs.ConsumeAnnot)
111+
112+
def getModifiersFromAnnotations: Seq[Modifier] =
113+
Seq (
114+
isConsumeModifier -> Modifier.Consume
115+
).collect {
116+
case (predicate, mod) if predicate(sym) => mod
117+
}
118+
end getModifiersFromAnnotations
119+
120+
getModifiersFromFlags ++ getModifiersFromAnnotations
121+
end getExtraModifiers
106122

107123
def isHiddenByVisibility(using dctx: DocContext): Boolean =
108124
import VisibilityScope._

0 commit comments

Comments
 (0)