Skip to content

Commit d7ecc34

Browse files
authored
Merge pull request #10800 from lampepfl/using-flag
Add using keyword to scala3doc and hide synthetic names
2 parents bbd092b + c42e852 commit d7ecc34

File tree

4 files changed

+38
-15
lines changed

4 files changed

+38
-15
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package tests
2+
package usings
3+
4+
class Named
5+
class ClassTag[T]
6+
given ClassTag[Int] = ClassTag[Int]
7+
given ClassTag[String] = ClassTag[String]
8+
9+
/** ...
10+
*
11+
* @param t: this is an explicit parameter
12+
* @param named: this is an implicit paramter
13+
* @param ClassTag[String]: this is next implicit parameter
14+
*/
15+
def f[T](t: T)(using ClassTag[Int])(using ClassTag[String])(using named: Named)(using ClassTag[T]): Unit = ???
16+
def f2[T](t: T)(using ClassTag[Int])(using ClassTag[Int], ClassTag[String]): Unit = ???

scala3doc/src/dotty/dokka/model/api/api.scala

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,14 +56,14 @@ trait Classlike
5656
enum Kind(val name: String){
5757
case RootPackage extends Kind("")
5858
case Package extends Kind("package")
59-
case Class(typeParams: Seq[TypeParameter], argsLists: Seq[Seq[Parameter]])
59+
case Class(typeParams: Seq[TypeParameter], argsLists: Seq[ParametersList])
6060
extends Kind("class") with Classlike
6161
case Object extends Kind("object") with Classlike
62-
case Trait(typeParams: Seq[TypeParameter], argsLists: Seq[Seq[Parameter]])
62+
case Trait(typeParams: Seq[TypeParameter], argsLists: Seq[ParametersList])
6363
extends Kind("trait") with Classlike
6464
case Enum extends Kind("enum") with Classlike
6565
case EnumCase(kind: Object.type | Type | Val.type) extends Kind("case")
66-
case Def(typeParams: Seq[TypeParameter], argsLists: Seq[Seq[Parameter]])
66+
case Def(typeParams: Seq[TypeParameter], argsLists: Seq[ParametersList])
6767
extends Kind("def")
6868
case Extension(on: ExtensionTarget, m: Kind.Def) extends Kind("def")
6969
case Constructor(base: Kind.Def) extends Kind("def")
@@ -100,10 +100,15 @@ object Annotation:
100100
case class LinkParameter(name: Option[String] = None, dri: DRI, value: String) extends AnnotationParameter
101101
case class UnresolvedParameter(name: Option[String] = None, unresolvedText: String) extends AnnotationParameter
102102

103+
case class ParametersList(
104+
parameters: Seq[Parameter],
105+
modifiers: String
106+
)
107+
103108
case class Parameter(
104109
annotations: Seq[Annotation],
105110
modifiers: String,
106-
name: String,
111+
name: Option[String],
107112
dri: DRI,
108113
signature: Signature,
109114
isExtendedSymbol: Boolean = false,

scala3doc/src/dotty/dokka/tasty/ClassLikeSupport.scala

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ trait ClassLikeSupport:
4545
.filter(s => s.exists && !s.isHiddenByVisibility)
4646
.map( _.tree.asInstanceOf[DefDef])
4747
constr.fold(Nil)(
48-
_.paramss.map(_.map(mkParameter(_, parameterModifier)))
48+
_.paramss.map(pList => ParametersList(pList.map(mkParameter(_, parameterModifier)), if isUsingModifier(pList) then "using " else ""))
4949
)
5050

5151
if classDef.symbol.flags.is(Flags.Module) then Kind.Object
@@ -335,7 +335,7 @@ trait ClassLikeSupport:
335335

336336
val basicKind: Kind.Def = Kind.Def(
337337
genericTypes.map(mkTypeArgument),
338-
paramLists.map(_.map(mkParameter(_, paramPrefix)))
338+
paramLists.map(pList => ParametersList(pList.map(mkParameter(_, paramPrefix)), if isUsingModifier(pList) then "using " else ""))
339339
)
340340

341341
val methodKind =
@@ -376,12 +376,12 @@ trait ClassLikeSupport:
376376
isExtendedSymbol: Boolean = false,
377377
isGrouped: Boolean = false) =
378378
val inlinePrefix = if argument.symbol.flags.is(Flags.Inline) then "inline " else ""
379-
// TODO (https://github.com/lampepfl/dotty/issues/10525): Add using flag
379+
val name = Option.when(!argument.symbol.flags.is(Flags.Synthetic))(argument.symbol.normalizedName)
380380

381381
Parameter(
382382
argument.symbol.getAnnotations(),
383383
inlinePrefix + prefix(argument.symbol),
384-
argument.symbol.normalizedName,
384+
name,
385385
argument.symbol.dri,
386386
argument.tpt.dokkaType.asSignature,
387387
isExtendedSymbol,
@@ -467,3 +467,6 @@ trait ClassLikeSupport:
467467
/*isExpectActual =*/ false,
468468
PropertyContainer.Companion.empty().plus(member.copy(rawDoc = symbol.documentation2)).plus(compositeExt)
469469
)
470+
471+
private def isUsingModifier(parameters: Seq[ValDef]): Boolean =
472+
parameters.size > 0 && parameters(0).symbol.flags.is(Flags.Given)

scala3doc/src/dotty/dokka/translators/ScalaSignatureUtils.scala

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -80,16 +80,15 @@ trait SignatureBuilder extends ScalaSignatureUtils {
8080
bdr.text(e.variance).memberName(e.name, e.dri).signature(e.signature)
8181
}
8282

83-
def functionParameters(params: Seq[Seq[Parameter]]) =
83+
def functionParameters(params: Seq[ParametersList]) =
8484
if params.isEmpty then this.text("")
85-
else if params == List(Nil) then this.text("()")
85+
else if params.size == 1 && params(0).parameters == Nil then this.text("()")
8686
else this.list(params, separator = ""){ (bld, pList) =>
87-
bld.list(pList, "(", ")"){ (bld, p) =>
88-
bld.annotationsInline(p)
87+
bld.list(pList.parameters, s"(${pList.modifiers}", ")"){ (bld, p) =>
88+
val annotationsAndModifiers = bld.annotationsInline(p)
8989
.text(p.modifiers)
90-
.memberName(p.name, p.dri)
91-
.text(": ")
92-
.signature(p.signature)
90+
val name = p.name.fold(annotationsAndModifiers)(annotationsAndModifiers.memberName(_, p.dri).text(": "))
91+
name.signature(p.signature)
9392
}
9493
}
9594
}

0 commit comments

Comments
 (0)