Skip to content

Commit 513664a

Browse files
committed
Fix scaladoc TastyInspector regressions
Adds an inspectAllTastyFilesInContext method in scaladoc-only version of TastyInspector.
1 parent a672e05 commit 513664a

File tree

7 files changed

+51
-9
lines changed

7 files changed

+51
-9
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
ThisBuild / scalaVersion := sys.props("plugin.scalaVersion")
2+
3+
lazy val i20476 = project
4+
.in(file("i20476"))
5+
.enablePlugins(ScalaJSPlugin)
6+
7+
lazy val i18231 = project
8+
.in(file("i18231"))
9+
.settings(scalacOptions += "-release:8")
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
object Foo {
2+
@Deprecated
3+
def foo(): Unit = ???
4+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package demo
2+
3+
import scala.scalajs.js
4+
5+
def bar: js.Promise[Int] = js.Promise.resolve(()).`then`(_ => 1)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
addSbtPlugin("org.scala-js" % "sbt-scalajs" % sys.props("plugin.scalaJSVersion"))
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
> i18231/doc
2+
> i20476/doc

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ object ScaladocTastyInspector:
160160
report.error("File extension is not `tasty` or `jar`: " + invalidPath)
161161

162162
if tastyPaths.nonEmpty then
163-
TastyInspector.inspectAllTastyFiles(tastyPaths, jarPaths, classpath)(inspector)
163+
TastyInspector.inspectAllTastyFilesInContext(tastyPaths, jarPaths, classpath)(inspector)(using ctx.compilerContext)
164164

165165
val all = inspector.topLevels.result()
166166
all.groupBy(_._1).map { case (pckName, members) =>

scaladoc/src/scala/tasty/inspector/TastyInspector.scala

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
// Copy of tasty-inspector/src/scala/tasty/inspector/TastyInspector.scala
22
// FIXME remove this copy of the file
3+
// Since copying, an inspectAllTastyFilesInContext ,ethod was added for scaladoc only
4+
// to fix regressions introduced by the switch from old to a new TastyInspector
35

46
package scala.tasty.inspector
57

@@ -41,6 +43,32 @@ object TastyInspector:
4143
def inspectTastyFilesInJar(jar: String)(inspector: Inspector): Boolean =
4244
inspectAllTastyFiles(Nil, List(jar), Nil)(inspector)
4345

46+
private def checkFiles(tastyFiles: List[String], jars: List[String]): Unit =
47+
def checkFile(fileName: String, ext: String): Unit =
48+
val file = dotty.tools.io.Path(fileName)
49+
if !file.ext.toLowerCase.equalsIgnoreCase(ext) then
50+
throw new IllegalArgumentException(s"File extension is not `.$ext`: $file")
51+
else if !file.exists then
52+
throw new IllegalArgumentException(s"File not found: ${file.toAbsolute}")
53+
tastyFiles.foreach(checkFile(_, "tasty"))
54+
jars.foreach(checkFile(_, "jar"))
55+
56+
/**
57+
* Added for Scaladoc-only.
58+
* Meant to fix regressions introduces by the switch from old to new TastyInspector:
59+
* https://github.com/scala/scala3/issues/18231
60+
* https://github.com/scala/scala3/issues/20476
61+
* Stable TastyInspector API does not support passing compiler context.
62+
*/
63+
def inspectAllTastyFilesInContext(tastyFiles: List[String], jars: List[String], dependenciesClasspath: List[String])(inspector: Inspector)(using Context): Boolean =
64+
checkFiles(tastyFiles, jars)
65+
val classes = tastyFiles ::: jars
66+
classes match
67+
case Nil => true
68+
case _ =>
69+
val reporter = inspectorDriver(inspector).process(inspectorArgs(dependenciesClasspath, classes), summon[Context])
70+
!reporter.hasErrors
71+
4472
/** Load and process TASTy files using TASTy reflect
4573
*
4674
* @param tastyFiles List of paths of `.tasty` files
@@ -50,14 +78,7 @@ object TastyInspector:
5078
* @return boolean value indicating whether the process succeeded
5179
*/
5280
def inspectAllTastyFiles(tastyFiles: List[String], jars: List[String], dependenciesClasspath: List[String])(inspector: Inspector): Boolean =
53-
def checkFile(fileName: String, ext: String): Unit =
54-
val file = dotty.tools.io.Path(fileName)
55-
if !file.ext.toLowerCase.equalsIgnoreCase(ext) then
56-
throw new IllegalArgumentException(s"File extension is not `.$ext`: $file")
57-
else if !file.exists then
58-
throw new IllegalArgumentException(s"File not found: ${file.toAbsolute}")
59-
tastyFiles.foreach(checkFile(_, "tasty"))
60-
jars.foreach(checkFile(_, "jar"))
81+
checkFiles(tastyFiles, jars)
6182
val files = tastyFiles ::: jars
6283
inspectFiles(dependenciesClasspath, files)(inspector)
6384

0 commit comments

Comments
 (0)