diff --git a/scaladoc/src/dotty/tools/scaladoc/api.scala b/scaladoc/src/dotty/tools/scaladoc/api.scala index 41ccd8fb2280..8106bd349e34 100644 --- a/scaladoc/src/dotty/tools/scaladoc/api.scala +++ b/scaladoc/src/dotty/tools/scaladoc/api.scala @@ -45,6 +45,7 @@ enum Modifier(val name: String, val prefix: Boolean): case Infix extends Modifier("infix", true) case AbsOverride extends Modifier("abstract override", true) case Update extends Modifier("update", true) + case Consume extends Modifier("consume", true) case class ExtensionTarget(name: String, typeParams: Seq[TypeParameter], argsLists: Seq[TermParameterList], signature: Signature, dri: DRI, position: Long) case class ImplicitConversion(from: DRI, to: DRI) diff --git a/scaladoc/src/dotty/tools/scaladoc/tasty/BasicSupport.scala b/scaladoc/src/dotty/tools/scaladoc/tasty/BasicSupport.scala index 06fe658b850e..c96b6899501d 100644 --- a/scaladoc/src/dotty/tools/scaladoc/tasty/BasicSupport.scala +++ b/scaladoc/src/dotty/tools/scaladoc/tasty/BasicSupport.scala @@ -57,7 +57,7 @@ trait BasicSupport: ) val fqNameAllowlist = if ccEnabled then - fqNameAllowlist0 + CaptureDefs.useAnnotFullName + CaptureDefs.consumeAnnotFullName + fqNameAllowlist0 + CaptureDefs.useAnnotFullName else fqNameAllowlist0 val documentedSymbol = summon[Quotes].reflect.Symbol.requiredClass("java.lang.annotation.Documented") val annotations = sym.annotations.filter { a => diff --git a/scaladoc/src/dotty/tools/scaladoc/tasty/ClassLikeSupport.scala b/scaladoc/src/dotty/tools/scaladoc/tasty/ClassLikeSupport.scala index 690a19c6e78b..baebea484aa8 100644 --- a/scaladoc/src/dotty/tools/scaladoc/tasty/ClassLikeSupport.scala +++ b/scaladoc/src/dotty/tools/scaladoc/tasty/ClassLikeSupport.scala @@ -23,11 +23,12 @@ trait ClassLikeSupport: extension (symbol: Symbol) { def getExtraModifiers(): Seq[Modifier] = - val mods = SymOps.getExtraModifiers(symbol)() - if ccEnabled && symbol.flags.is(Flags.Mutable)then - mods :+ Modifier.Update - else - mods + var mods = SymOps.getExtraModifiers(symbol)() + if ccEnabled && symbol.flags.is(Flags.Mutable) then + mods :+= Modifier.Update + if ccEnabled && symbol.hasAnnotation(cc.CaptureDefs.ConsumeAnnot) then + mods :+= Modifier.Consume + mods } private def bareClasslikeKind(using Quotes)(symbol: reflect.Symbol): Kind = @@ -452,11 +453,12 @@ trait ClassLikeSupport: ) = val symbol = argument.symbol val inlinePrefix = if symbol.flags.is(Flags.Inline) then "inline " else "" + val comsumePrefix = if self.ccEnabled && symbol.hasAnnotation(cc.CaptureDefs.ConsumeAnnot) then "consume " else "" val name = symbol.normalizedName val nameIfNotSynthetic = Option.when(!symbol.flags.is(Flags.Synthetic))(name) api.TermParameter( symbol.getAnnotations(), - inlinePrefix + prefix(symbol), + comsumePrefix + inlinePrefix + prefix(symbol), nameIfNotSynthetic, symbol.dri, argument.tpt.asSignature(classDef, symbol.owner),