Skip to content

Commit dfcc26a

Browse files
Merge pull request #12324 from dotty-staging/clenup-scaladoc-quotes
Cleanup scaladoc quotes
2 parents 8957e51 + 0b0fafd commit dfcc26a

15 files changed

+275
-196
lines changed

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

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,18 @@ import collection.JavaConverters._
55
import dotty.tools.scaladoc._
66
import scala.quoted._
77

8+
import SymOps._
9+
import ScaladocSupport._
10+
811
trait BasicSupport:
912
self: TastyParser =>
10-
import qctx.reflect._
11-
object SymOps extends SymOps[qctx.type](qctx)
12-
export SymOps._
1313

14-
def parseAnnotation(annotTerm: Term): Annotation =
14+
object SymOpsWithLinkCache extends SymOpsWithLinkCache
15+
export SymOpsWithLinkCache._
16+
17+
18+
def parseAnnotation(using Quotes)(annotTerm: reflect.Term): Annotation =
19+
import reflect._
1520
import dotty.tools.dotc.ast.Trees.{SeqLiteral}
1621
val dri = annotTerm.tpe.typeSymbol.dri
1722
def inner(t: Term): List[Annotation.AnnotationParameter] = t match {
@@ -24,18 +29,17 @@ trait BasicSupport:
2429
case other => List(Annotation.UnresolvedParameter(None, other.show))
2530
}
2631

27-
2832
val params = annotTerm match
2933
case Apply(target, appliedWith) => {
3034
appliedWith.flatMap(inner)
3135
}
3236

3337
Annotation(dri, params)
3438

35-
extension (sym: Symbol)
39+
extension (using Quotes)(sym: reflect.Symbol)
3640
def documentation = sym.docstring.map(parseComment(_, sym.tree))
3741

38-
def source(using Quotes) =
42+
def source =
3943
val path = sym.pos.map(_.sourceFile.jpath).filter(_ != null).map(_.toAbsolutePath)
4044
path.map(TastyMemberSource(_, sym.pos.get.startLine))
4145

@@ -49,5 +53,4 @@ trait BasicSupport:
4953
}.map(parseAnnotation)
5054

5155
def isLeftAssoc: Boolean = !sym.name.endsWith(":")
52-
53-
56+
end extension

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

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,25 @@ import collection.JavaConverters._
44
import dotty.tools.scaladoc._
55
import dotty.tools.scaladoc.{Signature => DSignature}
66

7+
import scala.quoted._
8+
9+
import SymOps._
10+
import NameNormalizer._
11+
import SyntheticsSupport._
12+
713
trait ClassLikeSupport:
814
self: TastyParser =>
915
import qctx.reflect._
1016

11-
private def bareClasslikeKind(symbol: Symbol): Kind =
12-
if symbol.flags.is(Flags.Module) then Kind.Object
13-
else if symbol.flags.is(Flags.Trait) then Kind.Trait(Nil, Nil)
14-
else if symbol.flags.is(Flags.Enum) then Kind.Enum(Nil, Nil)
15-
else if symbol.flags.is(Flags.Enum) && symbol.flags.is(Flags.Case) then Kind.EnumCase(Kind.Object)
16-
else Kind.Class(Nil, Nil)
17+
private given qctx.type = qctx
18+
19+
private def bareClasslikeKind(using Quotes)(symbol: reflect.Symbol): Kind =
20+
import reflect._
21+
if symbol.flags.is(Flags.Module) then Kind.Object
22+
else if symbol.flags.is(Flags.Trait) then Kind.Trait(Nil, Nil)
23+
else if symbol.flags.is(Flags.Enum) then Kind.Enum(Nil, Nil)
24+
else if symbol.flags.is(Flags.Enum) && symbol.flags.is(Flags.Case) then Kind.EnumCase(Kind.Object)
25+
else Kind.Class(Nil, Nil)
1726

1827
private def kindForClasslike(classDef: ClassDef): Kind =
1928
def typeArgs = classDef.getTypeParams.map(mkTypeArgument(_))
@@ -208,14 +217,16 @@ trait ClassLikeSupport:
208217
}
209218
).map(_.copy(inheritedFrom = inheritance))
210219

211-
extension (c: ClassDef)
220+
extension (using Quotes)(c: reflect.ClassDef)
221+
212222
def membersToDocument = c.body.filterNot(_.symbol.isHiddenByVisibility)
213223

214224
def getNonTrivialInheritedMemberTrees =
215225
c.symbol.getmembers.filterNot(s => s.isHiddenByVisibility || s.maybeOwner == c.symbol)
216226
.filter(s => s.maybeOwner != defn.ObjectClass && s.maybeOwner != defn.AnyClass)
217227
.map(_.tree)
218228

229+
extension (c: ClassDef)
219230
def extractMembers: Seq[Member] = {
220231
val inherited = c.getNonTrivialInheritedMemberTrees.collect {
221232
case dd: DefDef if !dd.symbol.isClassConstructor && !(dd.symbol.isSuperBridgeMethod || dd.symbol.isDefaultHelperMethod) => dd
@@ -265,7 +276,7 @@ trait ClassLikeSupport:
265276
if parentSymbol != defn.ObjectClass && parentSymbol != defn.AnyClass
266277
yield (parentTree, parentSymbol)
267278

268-
def getConstructors: List[Symbol] = membersToDocument.collect {
279+
def getConstructors: List[Symbol] = c.membersToDocument.collect {
269280
case d: DefDef if d.symbol.isClassConstructor && c.constructor.symbol != d.symbol => d.symbol
270281
}.toList
271282

@@ -444,7 +455,7 @@ trait ClassLikeSupport:
444455
modifiers = modifiers,
445456
annotations = symbol.getAnnotations(),
446457
signature = signature,
447-
sources = symbol.source(using qctx),
458+
sources = symbol.source,
448459
origin = origin,
449460
inheritedFrom = inheritedFrom,
450461
graph = graph,

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

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,33 +5,32 @@ import scala.quoted._
55
import dotty.tools.scaladoc.util.Escape._
66
import scala.util.matching.Regex
77

8-
trait JavadocAnchorCreator:
9-
self: SymOps[_] =>
8+
object JavadocAnchorCreator:
109

11-
import self.q.reflect._
10+
private def javadocPrimitives(using Quotes)(sym: reflect.Symbol) =
11+
import reflect.*
12+
if sym == defn.IntClass then Some("int")
13+
else if sym == defn.FloatClass then Some("float")
14+
else if sym == defn.DoubleClass then Some("double")
15+
else if sym == defn.LongClass then Some("long")
16+
else if sym == defn.ByteClass then Some("byte")
17+
else if sym == defn.BooleanClass then Some("boolean")
18+
else if sym == defn.CharClass then Some("char")
19+
else if sym == defn.ShortClass then Some("short")
20+
else if sym == defn.ObjectClass then Some("java.lang.Object")
21+
else None
1222

13-
private val javadocPrimitivesMap = Map(
14-
defn.IntClass -> "int",
15-
defn.FloatClass -> "float",
16-
defn.DoubleClass -> "double",
17-
defn.LongClass -> "long",
18-
defn.ByteClass -> "byte",
19-
defn.BooleanClass -> "boolean",
20-
defn.CharClass -> "char",
21-
defn.ShortClass -> "short",
22-
defn.ObjectClass -> "java.lang.Object"
23-
)
24-
25-
private def transformPrimitiveType(tpe: TypeRepr): String = tpe.classSymbol
26-
.flatMap(javadocPrimitivesMap.get)
23+
private def transformPrimitiveType(using Quotes)(tpe: reflect.TypeRepr): String = tpe.classSymbol
24+
.flatMap(javadocPrimitives)
2725
.filter(_ => !tpe.typeSymbol.isTypeParam)
2826
.getOrElse(tpe.show)
2927

30-
private def transformType(tpe: TypeRepr): String = tpe.simplified match {
31-
case AppliedType(tpe, typeList) if tpe.classSymbol.fold(false)(_ == defn.ArrayClass) => transformType(typeList.head) + ":A"
32-
case AppliedType(tpe, typeList) if tpe.classSymbol.fold(false)(_ == defn.RepeatedParamClass) => transformType(typeList.head) + "..."
33-
case AppliedType(tpe, typeList) => transformPrimitiveType(tpe)
34-
case other => transformPrimitiveType(other)
35-
}
28+
private def transformType(using Quotes)(tpe: reflect.TypeRepr): String =
29+
import reflect.*
30+
tpe.simplified match
31+
case AppliedType(tpe, typeList) if tpe.classSymbol.fold(false)(_ == defn.ArrayClass) => transformType(typeList.head) + ":A"
32+
case AppliedType(tpe, typeList) if tpe.classSymbol.fold(false)(_ == defn.RepeatedParamClass) => transformType(typeList.head) + "..."
33+
case AppliedType(tpe, typeList) => transformPrimitiveType(tpe)
34+
case other => transformPrimitiveType(other)
3635

37-
def getJavadocType(s: TypeRepr) = transformType(s)
36+
def getJavadocType(using Quotes)(s: reflect.TypeRepr) = transformType(s)

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,13 @@ import dotty.tools.scaladoc._
44
import dotty.tools.dotc.core.StdNames.nme.keywords
55
import dotty.tools.dotc.core.Names.termName
66

7-
trait NameNormalizer { self: TastyParser =>
8-
import qctx.reflect._
9-
extension (s: Symbol) def normalizedName: String = {
7+
import scala.quoted._
8+
import SymOps._
9+
10+
object NameNormalizer {
11+
12+
extension (using Quotes)(s: reflect.Symbol) def normalizedName: String = {
13+
import reflect.*
1014
val withoutGivenPrefix = if s.isGiven then s.name.stripPrefix("given_") else s.name
1115
val withoutObjectSuffix = if s.flags.is(Flags.Module) then withoutGivenPrefix.stripSuffix("$") else withoutGivenPrefix
1216
val constructorNormalizedName = if s.isClassConstructor then "this" else withoutObjectSuffix

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,14 @@ package tasty
33

44
import collection.JavaConverters._
55

6+
import SymOps._
7+
68
trait PackageSupport:
79
self: TastyParser =>
810
import qctx.reflect._
911

12+
private given qctx.type = qctx
13+
1014
def parsePackage(pck: PackageClause): (String, Member) =
1115
val name = pck.symbol.fullName
1216
(name, Member(name, pck.symbol.dri, Kind.Package))

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

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@ import scala.jdk.CollectionConverters._
66
import dotty.tools.scaladoc.Scaladoc.CommentSyntax
77
import dotty.tools.scaladoc.tasty.comments.Comment
88

9-
trait ScaladocSupport { self: TastyParser =>
10-
import qctx.reflect._
9+
import scala.quoted._
1110

12-
def parseCommentString(comment: String, sym: Symbol, pos: Option[Position]): Comment =
11+
object ScaladocSupport:
12+
13+
def parseCommentString(using Quotes, DocContext)(comment: String, sym: reflect.Symbol, pos: Option[reflect.Position]): Comment =
14+
import reflect.report
1315
val preparsed = comments.Preparser.preparse(comments.Cleaner.clean(comment))
1416

1517
val commentSyntax =
@@ -22,22 +24,22 @@ trait ScaladocSupport { self: TastyParser =>
2224

2325
CommentSyntax.default
2426
}
25-
case None => ctx.args.defaultSyntax
27+
case None => summon[DocContext].args.defaultSyntax
2628
}
2729

2830
val parser = commentSyntax match {
2931
case CommentSyntax.Wiki =>
30-
comments.WikiCommentParser(comments.Repr(qctx)(sym))
32+
comments.WikiCommentParser(comments.Repr(quotes)(sym))
3133
case CommentSyntax.Markdown =>
32-
comments.MarkdownCommentParser(comments.Repr(qctx)(sym))
34+
comments.MarkdownCommentParser(comments.Repr(quotes)(sym))
3335
}
3436
parser.parse(preparsed)
3537

36-
def parseComment(docstring: String, tree: Tree): Comment =
38+
def parseComment(using Quotes, DocContext)(docstring: String, tree: reflect.Tree): Comment =
3739
val commentString: String =
3840
if tree.symbol.isClassDef || tree.symbol.owner.isClassDef then
3941
import dotty.tools.dotc
40-
given ctx: dotc.core.Contexts.Context = qctx.asInstanceOf[scala.quoted.runtime.impl.QuotesImpl].ctx
42+
given ctx: dotc.core.Contexts.Context = quotes.asInstanceOf[scala.quoted.runtime.impl.QuotesImpl].ctx
4143

4244
val sym = tree.symbol.asInstanceOf[dotc.core.Symbols.Symbol]
4345

@@ -47,5 +49,3 @@ trait ScaladocSupport { self: TastyParser =>
4749
docstring
4850

4951
parseCommentString(commentString, tree.symbol, Some(tree.pos))
50-
51-
}

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

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,12 @@ import scala.quoted._
55
import dotty.tools.scaladoc.util.Escape._
66
import scala.util.matching.Regex
77

8-
trait Scaladoc2AnchorCreator:
9-
self: SymOps[_] =>
8+
object Scaladoc2AnchorCreator:
109

11-
import self.q.reflect._
12-
13-
implicit private val printer: Printer[Tree] = Printer.TreeShortCode
14-
15-
def getScaladoc2Type(t: Tree) = {
16-
(t match {
17-
case d: DefDef => d.show.split("def", 2)(1)
18-
case t: TypeDef => t.show.split("type", 2)(1)
19-
case v: ValDef => v.show.split("val|var", 2)(1)
20-
}).replace(" ","")
21-
}
10+
def getScaladoc2Type(using Quotes)(t: reflect.Tree) =
11+
import reflect.*
12+
val regex = t match
13+
case d: DefDef => "def"
14+
case t: TypeDef => "type"
15+
case v: ValDef => "val|var"
16+
t.show(using Printer.TreeShortCode).split(regex, 2)(1).replace(" ","")

0 commit comments

Comments
 (0)