Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 12 additions & 1 deletion modules/cli/src/main/scala/scala/cli/commands/doc/Doc.scala
Original file line number Diff line number Diff line change
Expand Up @@ -273,8 +273,19 @@ object Doc extends ScalaCommand[DocOptions] with BuildCommandHelpers {
.getOrElse(true)
then defaultScaladocArgs(scalaParams.scalaVersion, javaVersion)
else Nil
// scaladoc has its own `-scalajs` flag, but passing it on triggers JS backend
// codegen phases (e.g. JUnitBootstrappers) that crash on otherwise valid code
// (VirtusLab/scala-cli#3006). The doc content is platform-agnostic, so drop it.
val (scalaJsScalacOptions, otherScalacOptions) = builds.head.project.scalaCompiler
.map(_.scalacOptions).getOrElse(Nil)
.partition(_ == "-scalajs")
if scalaJsScalacOptions.nonEmpty then
logger.log(
s"Not passing ${scalaJsScalacOptions.mkString(", ")} to scaladoc, " +
"as it can cause it to crash on valid code (VirtusLab/scala-cli#3006)"
)
val args = baseArgs ++
builds.head.project.scalaCompiler.map(_.scalacOptions).getOrElse(Nil) ++
otherScalacOptions ++
extraArgs ++
defaultArgs ++
builds.map(_.output.toString)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -190,4 +190,26 @@ abstract class DocTestDefinitions
}
}
}

// `-scalajs` triggers JS codegen phases (e.g. JUnitBootstrappers) that crash on valid code
if (!actualScalaVersion.startsWith("2."))
test("generate scala doc for a Scala.js project") {
val dest = os.rel / "doc-js"
TestInputs(
os.rel / "Hello.scala" ->
"""/** Greeter. */
|object Hello {
| def greet: String = "hi"
|}
|""".stripMargin
).fromRoot { root =>
os.proc(TestUtil.cli, "doc", extraOptions, "--js", ".", "-o", dest).call(
cwd = root,
stdin = os.Inherit,
stdout = os.Inherit
)
expect(os.isDir(root / dest))
expect(os.list(root / dest).exists(_.last.endsWith(".html")))
}
}
}