Skip to content

Commit 31055bd

Browse files
committed
Add using keyword to scala3doc and hide synthetic names
1 parent d08dc3c commit 31055bd

File tree

4 files changed

+39
-16
lines changed

4 files changed

+39
-16
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
@@ -54,14 +54,14 @@ trait ImplicitConversionProvider { def conversion: Option[ImplicitConversion] }
5454
trait Classlike
5555

5656
enum Kind(val name: String){
57-
case Class(typeParams: Seq[TypeParameter], argsLists: Seq[Seq[Parameter]])
57+
case Class(typeParams: Seq[TypeParameter], argsLists: Seq[ParametersList])
5858
extends Kind("class") with Classlike
5959
case Object extends Kind("object") with Classlike
60-
case Trait(typeParams: Seq[TypeParameter], argsLists: Seq[Seq[Parameter]])
60+
case Trait(typeParams: Seq[TypeParameter], argsLists: Seq[ParametersList])
6161
extends Kind("trait") with Classlike
6262
case Enum extends Kind("enum") with Classlike
6363
case EnumCase(kind: Object.type | Type | Val.type) extends Kind("case")
64-
case Def(typeParams: Seq[TypeParameter], argsLists: Seq[Seq[Parameter]])
64+
case Def(typeParams: Seq[TypeParameter], argsLists: Seq[ParametersList])
6565
extends Kind("def")
6666
case Extension(on: ExtensionTarget, m: Kind.Def) extends Kind("def")
6767
case Constructor(base: Kind.Def) extends Kind("def")
@@ -98,10 +98,15 @@ object Annotation:
9898
case class LinkParameter(name: Option[String] = None, dri: DRI, value: String) extends AnnotationParameter
9999
case class UnresolvedParameter(name: Option[String] = None, unresolvedText: String) extends AnnotationParameter
100100

101+
case class ParametersList(
102+
parameters: Seq[Parameter],
103+
modifiers: String
104+
)
105+
101106
case class Parameter(
102107
annotations: Seq[Annotation],
103108
modifiers: String,
104-
name: String,
109+
name: Option[String],
105110
dri: DRI,
106111
signature: Signature,
107112
isExtendedSymbol: Boolean = false,

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

Lines changed: 8 additions & 5 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,
@@ -464,4 +464,7 @@ trait ClassLikeSupport:
464464
ctx.sourceSet.toSet,
465465
/*isExpectActual =*/ false,
466466
PropertyContainer.Companion.empty().plus(member.copy(rawDoc = symbol.documentation2)).plus(compositeExt)
467-
)
467+
)
468+
469+
private def isUsingModifier(parameters: Seq[ValDef]): Boolean =
470+
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
@@ -81,16 +81,15 @@ trait SignatureBuilder extends ScalaSignatureUtils {
8181
bdr.text(e.variance).memberName(e.name, e.dri).signature(e.signature)
8282
}
8383

84-
def functionParameters(params: Seq[Seq[Parameter]]) =
84+
def functionParameters(params: Seq[ParametersList]) =
8585
if params.isEmpty then this.text("")
86-
else if params == List(Nil) then this.text("()")
86+
else if params.size == 1 && params(0).parameters == Nil then this.text("()")
8787
else this.list(params, separator = ""){ (bld, pList) =>
88-
bld.list(pList, "(", ")"){ (bld, p) =>
89-
bld.annotationsInline(p)
88+
bld.list(pList.parameters, s"(${pList.modifiers}", ")"){ (bld, p) =>
89+
val annotationsAndModifiers = bld.annotationsInline(p)
9090
.text(p.modifiers)
91-
.memberName(p.name, p.dri)
92-
.text(": ")
93-
.signature(p.signature)
91+
val name = p.name.fold(annotationsAndModifiers)(annotationsAndModifiers.memberName(_, p.dri).text(": "))
92+
name.signature(p.signature)
9493
}
9594
}
9695
}

0 commit comments

Comments
 (0)