Skip to content

Commit 3c2b323

Browse files
committed
Add support for scaladoc2 anchors
1 parent ac6acf7 commit 3c2b323

File tree

4 files changed

+37
-8
lines changed

4 files changed

+37
-8
lines changed

scaladoc-testcases/src/tests/externalLocations/scaladoc2.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,5 @@ class Test {
1010
def c: Regex.Match = ???
1111
}
1212

13+
abstract class MySeq[T] extends scala.collection.immutable.Seq[T]
14+
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package dotty.tools.scaladoc
2+
package tasty
3+
4+
import scala.quoted._
5+
import dotty.tools.scaladoc.util.Escape._
6+
import scala.util.matching.Regex
7+
8+
trait Scaladoc2AnchorCreator:
9+
self: SymOps[_] =>
10+
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+
}

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

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ package tasty
44
import scala.quoted._
55
import dotty.tools.scaladoc.util.Escape._
66

7-
class SymOps[Q <: Quotes](val q: Q) extends JavadocAnchorCreator:
7+
class SymOps[Q <: Quotes](val q: Q) extends JavadocAnchorCreator with Scaladoc2AnchorCreator:
88
import q.reflect._
99

1010
given Q = q
@@ -115,17 +115,21 @@ class SymOps[Q <: Quotes](val q: Q) extends JavadocAnchorCreator:
115115
val docURL = link.documentationUrl.toString
116116
def constructPathForJavadoc: String =
117117
val l = "\\$+".r.replaceAllIn(location.replace(".","/"), _ => ".")
118-
val javadocAnchor = {
118+
val javadocAnchor = if anchor.isDefined then {
119119
val paramSigs = sym.paramSymss.flatten.map(_.tree).collect {
120120
case v: ValDef => v.tpt.tpe
121121
}.map(getJavadocType)
122-
paramSigs.mkString("-","-","-")
123-
}
124-
docURL + l + extension + anchor.fold("")(a => "#" + sym.name + javadocAnchor)
122+
"#" + sym.name + paramSigs.mkString("-","-","-")
123+
} else ""
124+
docURL + l + extension + javadocAnchor
125125

126126
//TODO #263: Add anchor support
127127
def constructPathForScaladoc2: String =
128-
docURL + escapeUrl(location).replace(".", "/") + extension
128+
val l = escapeUrl(location).replace(".", "/")
129+
val scaladoc2Anchor = if anchor.isDefined then {
130+
"#" + getScaladoc2Type(sym.tree)
131+
} else ""
132+
docURL + l + extension + scaladoc2Anchor
129133

130134
// TODO Add tests for it!
131135
def constructPathForScaladoc3: String =

scaladoc/test/dotty/tools/scaladoc/ExternalLocationProviderIntegrationTest.scala

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,10 @@ class Scaladoc2ExternalLocationProviderIntegrationTest extends ExternalLocationP
2828
List(".*scala.*::scaladoc2::https://www.scala-lang.org/api/current/"),
2929
List(
3030
"https://www.scala-lang.org/api/current/scala/util/matching/Regex$$Match.html",
31-
"https://www.scala-lang.org/api/current/scala/Predef$.html",
32-
"https://www.scala-lang.org/api/current/scala/collection/immutable/Map.html"
31+
"https://www.scala-lang.org/api/current/scala/Predef$.html#String",
32+
"https://www.scala-lang.org/api/current/scala/collection/immutable/Map.html",
33+
"https://www.scala-lang.org/api/current/scala/collection/IterableOnceOps.html#addString(b:StringBuilder,start:String,sep:String,end:String):StringBuilder",
34+
"https://www.scala-lang.org/api/current/scala/collection/IterableOnceOps.html#mkString(start:String,sep:String,end:String):String"
3335
)
3436
)
3537

0 commit comments

Comments
 (0)