diff --git a/modules/build/src/main/scala/scala/build/Build.scala b/modules/build/src/main/scala/scala/build/Build.scala index 24f7fb9ce6..3caf358329 100644 --- a/modules/build/src/main/scala/scala/build/Build.scala +++ b/modules/build/src/main/scala/scala/build/Build.scala @@ -385,9 +385,14 @@ object Build { ) ) val testOptions0 = extraTestOptions.orElse(testOptions) + val isScala2 = + value(testOptions0.scalaParams).exists(_.scalaVersion.startsWith("2.")) + val finalSources = if doc && isScala2 then + testSources.withExtraSources(mainSources) + else testSources doBuildScope( testOptions0, - testSources, + finalSources, Scope.Test, actualCompiler = actualCompiler ) diff --git a/modules/build/src/main/scala/scala/build/Sources.scala b/modules/build/src/main/scala/scala/build/Sources.scala index a46ad8954e..5abbd640ed 100644 --- a/modules/build/src/main/scala/scala/build/Sources.scala +++ b/modules/build/src/main/scala/scala/build/Sources.scala @@ -19,6 +19,13 @@ final case class Sources( buildOptions: BuildOptions ) { + def withExtraSources(other: Sources): Sources = + copy( + paths = paths ++ other.paths, + inMemory = inMemory ++ other.inMemory, + resourceDirs = resourceDirs ++ other.resourceDirs + ) + def withVirtualDir(inputs: Inputs, scope: Scope, options: BuildOptions): Sources = { val srcRootPath = inputs.generatedSrcRoot(scope) diff --git a/modules/cli/src/main/scala/scala/cli/commands/doc/Doc.scala b/modules/cli/src/main/scala/scala/cli/commands/doc/Doc.scala index f44de7c5e0..18e3981352 100644 --- a/modules/cli/src/main/scala/scala/cli/commands/doc/Doc.scala +++ b/modules/cli/src/main/scala/scala/cli/commands/doc/Doc.scala @@ -12,7 +12,7 @@ import scala.build.compiler.{ScalaCompilerMaker, SimpleScalaCompilerMaker} import scala.build.errors.BuildException import scala.build.interactive.InteractiveFileOps import scala.build.internal.{Constants, Runner} -import scala.build.options.BuildOptions +import scala.build.options.{BuildOptions, Scope} import scala.cli.CurrentParams import scala.cli.commands.publish.ConfigUtil.* import scala.cli.commands.shared.{HelpCommandGroup, HelpGroup, SharedOptions} @@ -52,33 +52,34 @@ object Doc extends ScalaCommand[DocOptions] { configDb.get(Keys.actions).getOrElse(None) ) - val builds = - Build.build( - inputs, - initialBuildOptions, - compilerMaker, - docCompilerMakerOpt, - logger, - crossBuilds = false, - buildTests = false, - partial = None, - actionableDiagnostics = actionableDiagnostics - ) - .orExit(logger) - builds.main match { - case s: Build.Successful => + val withTestScope = options.scope.test + Build.build( + inputs, + initialBuildOptions, + compilerMaker, + docCompilerMakerOpt, + logger, + crossBuilds = false, + buildTests = withTestScope, + partial = None, + actionableDiagnostics = actionableDiagnostics + ) + .orExit(logger).docBuilds match { + case b if b.forall(_.success) => + val successfulBuilds = b.collect { case s: Build.Successful => s } val res0 = doDoc( logger, options.output.filter(_.nonEmpty), options.force, - s, - args.unparsed + successfulBuilds, + args.unparsed, + withTestScope ) res0.orExit(logger) - case _: Build.Failed => + case b if b.exists(bb => !bb.success && !bb.cancelled) => System.err.println("Compilation failed") sys.exit(1) - case _: Build.Cancelled => + case _ => System.err.println("Build cancelled") sys.exit(1) } @@ -88,8 +89,9 @@ object Doc extends ScalaCommand[DocOptions] { logger: Logger, outputOpt: Option[String], force: Boolean, - build: Build.Successful, - extraArgs: Seq[String] + builds: Seq[Build.Successful], + extraArgs: Seq[String], + withTestScope: Boolean ): Either[BuildException, Unit] = either { def defaultName = "scala-doc" @@ -101,7 +103,7 @@ object Doc extends ScalaCommand[DocOptions] { def alreadyExistsCheck(): Either[BuildException, Unit] = { val alreadyExists = !force && os.exists(destPath) if (alreadyExists) - build.options.interactive.map { interactive => + builds.head.options.interactive.map { interactive => InteractiveFileOps.erasingPath(interactive, printableDest, destPath) { () => val msg = s"$printableDest already exists" System.err.println(s"Error: $msg. Pass -f or --force to force erasing it.") @@ -114,10 +116,9 @@ object Doc extends ScalaCommand[DocOptions] { value(alreadyExistsCheck()) - val docJarPath = value(generateScaladocDirPath(Seq(build), logger, extraArgs)) + val docJarPath = value(generateScaladocDirPath(builds, logger, extraArgs, withTestScope)) value(alreadyExistsCheck()) - if (force) os.copy.over(docJarPath, destPath) - else os.copy(docJarPath, destPath) + if force then os.copy.over(docJarPath, destPath) else os.copy(docJarPath, destPath) val printableOutput = CommandUtils.printablePath(destPath) @@ -138,12 +139,15 @@ object Doc extends ScalaCommand[DocOptions] { def generateScaladocDirPath( builds: Seq[Build.Successful], logger: Logger, - extraArgs: Seq[String] + extraArgs: Seq[String], + withTestScope: Boolean ): Either[BuildException, os.Path] = either { - val docContentDir = builds.head.scalaParams match { - case Some(scalaParams) if scalaParams.scalaVersion.startsWith("2.") => - builds.head.project.scaladocDir - case Some(scalaParams) => + val docContentDir = builds.head.scalaParams + .map(sp => sp -> sp.scalaVersion.startsWith("2.")) match { + case Some((_, true)) if withTestScope => + builds.find(_.scope == Scope.Test).getOrElse(builds.head).project.scaladocDir + case Some((_, true)) => builds.head.project.scaladocDir + case Some((scalaParams, _)) => val res = value { Artifacts.fetchAnyDependencies( Seq(Positioned.none(dep"org.scala-lang::scaladoc:${scalaParams.scalaVersion}")), diff --git a/modules/cli/src/main/scala/scala/cli/commands/doc/DocOptions.scala b/modules/cli/src/main/scala/scala/cli/commands/doc/DocOptions.scala index aceaebeda9..b60a646dff 100644 --- a/modules/cli/src/main/scala/scala/cli/commands/doc/DocOptions.scala +++ b/modules/cli/src/main/scala/scala/cli/commands/doc/DocOptions.scala @@ -4,7 +4,13 @@ import caseapp.* import caseapp.core.help.Help import scala.cli.ScalaCli.fullRunnerName -import scala.cli.commands.shared.{HasSharedOptions, HelpGroup, HelpMessages, SharedOptions} +import scala.cli.commands.shared.{ + HasSharedOptions, + HelpGroup, + HelpMessages, + ScopeOptions, + SharedOptions +} import scala.cli.commands.tags // format: off @@ -27,6 +33,8 @@ final case class DocOptions( @Tag(tags.should) @ExtraName("defaultScaladocOpts") defaultScaladocOptions: Option[Boolean] = None, + @Recurse + scope: ScopeOptions = ScopeOptions() ) extends HasSharedOptions // format: on diff --git a/modules/cli/src/main/scala/scala/cli/commands/package0/Package.scala b/modules/cli/src/main/scala/scala/cli/commands/package0/Package.scala index ea47550103..b051ff2c0b 100644 --- a/modules/cli/src/main/scala/scala/cli/commands/package0/Package.scala +++ b/modules/cli/src/main/scala/scala/cli/commands/package0/Package.scala @@ -87,7 +87,8 @@ object Package extends ScalaCommand[PackageOptions] with BuildCommandHelpers { configDb.get(Keys.actions).getOrElse(None) ) - if (options.watch.watchMode) { + val withTestScope = options.scope.test + if options.watch.watchMode then { var expectedModifyEpochSecondOpt = Option.empty[Long] val watcher = Build.watch( inputs, @@ -96,7 +97,7 @@ object Package extends ScalaCommand[PackageOptions] with BuildCommandHelpers { docCompilerMakerOpt, logger, crossBuilds = cross, - buildTests = options.scope.test, + buildTests = withTestScope, partial = None, actionableDiagnostics = actionableDiagnostics, postAction = () => WatchUtil.printWatchMessage() @@ -114,7 +115,8 @@ object Package extends ScalaCommand[PackageOptions] with BuildCommandHelpers { extraArgs = args.unparsed, expectedModifyEpochSecondOpt = expectedModifyEpochSecondOpt, allowTerminate = !options.watch.watchMode, - mainClassOptions = options.mainClass + mainClassOptions = options.mainClass, + withTestScope = withTestScope ) .orReport(logger) for (valueOpt <- mtimeDestPath) @@ -135,7 +137,7 @@ object Package extends ScalaCommand[PackageOptions] with BuildCommandHelpers { docCompilerMakerOpt, logger, crossBuilds = cross, - buildTests = options.scope.test, + buildTests = withTestScope, partial = None, actionableDiagnostics = actionableDiagnostics ) @@ -153,7 +155,8 @@ object Package extends ScalaCommand[PackageOptions] with BuildCommandHelpers { extraArgs = args.unparsed, expectedModifyEpochSecondOpt = None, allowTerminate = !options.watch.watchMode, - mainClassOptions = options.mainClass + mainClassOptions = options.mainClass, + withTestScope = withTestScope ) res0.orExit(logger) case b if b.exists(bb => !bb.success && !bb.cancelled) => @@ -189,7 +192,8 @@ object Package extends ScalaCommand[PackageOptions] with BuildCommandHelpers { extraArgs: Seq[String], expectedModifyEpochSecondOpt: Option[Long], allowTerminate: Boolean, - mainClassOptions: MainClassOptions + mainClassOptions: MainClassOptions, + withTestScope: Boolean ): Either[BuildException, Option[Long]] = either { if mainClassOptions.mainClassLs.contains(true) then value { @@ -349,7 +353,7 @@ object Package extends ScalaCommand[PackageOptions] with BuildCommandHelpers { else os.write(destPath, content, createFolders = true) destPath case PackageType.DocJar => - val docJarPath = value(docJar(builds, logger, extraArgs)) + val docJarPath = value(docJar(builds, logger, extraArgs, withTestScope)) value(alreadyExistsCheck()) if force then os.copy.over(docJarPath, destPath, createFolders = true) else os.copy(docJarPath, destPath, createFolders = true) @@ -547,7 +551,8 @@ object Package extends ScalaCommand[PackageOptions] with BuildCommandHelpers { def docJar( builds: Seq[Build.Successful], logger: Logger, - extraArgs: Seq[String] + extraArgs: Seq[String], + withTestScope: Boolean ): Either[BuildException, os.Path] = either { val workDir = builds.head.inputs.docJarWorkDir @@ -562,7 +567,7 @@ object Package extends ScalaCommand[PackageOptions] with BuildCommandHelpers { if cacheData.changed then { - val contentDir = value(Doc.generateScaladocDirPath(builds, logger, extraArgs)) + val contentDir = value(Doc.generateScaladocDirPath(builds, logger, extraArgs, withTestScope)) var outputStream: OutputStream = null try { diff --git a/modules/cli/src/main/scala/scala/cli/commands/publish/Publish.scala b/modules/cli/src/main/scala/scala/cli/commands/publish/Publish.scala index 219efb3ef7..314691d6ce 100644 --- a/modules/cli/src/main/scala/scala/cli/commands/publish/Publish.scala +++ b/modules/cli/src/main/scala/scala/cli/commands/publish/Publish.scala @@ -585,8 +585,13 @@ object Publish extends ScalaCommand[PublishOptions] with BuildCommandHelpers { docBuildOpt match { case None => None case Some(docBuild) => - val docJarPath = value(PackageCmd.docJar(Seq(docBuild), logger, Nil)) - val docJar = workingDir / org / s"$moduleName-$ver-javadoc.jar" + val docJarPath = value(PackageCmd.docJar( + builds = Seq(docBuild), + logger = logger, + extraArgs = Nil, + withTestScope = false + )) + val docJar = workingDir / org / s"$moduleName-$ver-javadoc.jar" os.copy.over(docJarPath, docJar, createFolders = true) Some(docJar) } diff --git a/modules/core/src/main/scala/scala/build/errors/NoDocBuildError.scala b/modules/core/src/main/scala/scala/build/errors/NoDocBuildError.scala new file mode 100644 index 0000000000..e573364ab6 --- /dev/null +++ b/modules/core/src/main/scala/scala/build/errors/NoDocBuildError.scala @@ -0,0 +1,5 @@ +package scala.build.errors + +final class NoDocBuildError extends BuildException( + "Doc build not present. It may have been cancelled." + ) diff --git a/modules/integration/src/test/scala/scala/cli/integration/DocTestDefinitions.scala b/modules/integration/src/test/scala/scala/cli/integration/DocTestDefinitions.scala index b3a0b0a5a2..d73dfbfede 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/DocTestDefinitions.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/DocTestDefinitions.scala @@ -9,68 +9,75 @@ abstract class DocTestDefinitions extends ScalaCliSuite with TestScalaVersionArg _: TestScalaVersion => protected lazy val extraOptions: Seq[String] = scalaVersionArgs ++ TestUtil.extraOptions - test("generate static scala doc") { - val dest = os.rel / "doc-static" - val inputs = TestInputs( - os.rel / "lib" / "Messages.scala" -> - """package lib - | - |object Messages { - | def msg = "Hello" - |} - |""".stripMargin, - os.rel / "simple.sc" -> - """val msg = lib.Messages.msg - |println(msg) - |""".stripMargin - ) - inputs.fromRoot { root => - os.proc(TestUtil.cli, "doc", extraOptions, ".", "-o", dest).call( - cwd = root, - stdin = os.Inherit, - stdout = os.Inherit + for { + useTestScope <- Seq(true, false) + scopeOpts = if (useTestScope) Seq("--test", "--power") else Nil + scopeDirective = if (useTestScope) "//> using target.scope test" else "" + scopeDescription = scopeOpts.headOption.getOrElse("main") + } + test(s"generate static scala doc ($scopeDescription)") { + val dest = os.rel / "doc-static" + val inputs = TestInputs( + os.rel / "lib" / "Messages.scala" -> + """package lib + | + |object Messages { + | def msg = "Hello" + |} + |""".stripMargin, + os.rel / "simple.sc" -> + s"""$scopeDirective + |val msg = lib.Messages.msg + |println(msg) + |""".stripMargin ) - - val expectedDestDocPath = root / dest - expect(os.isDir(expectedDestDocPath)) - val expectedEntries = - if (actualScalaVersion.startsWith("2.")) - Seq( - "index.html", - "lib/Messages$.html", - "simple$.html" - ) - else if ( - actualScalaVersion.coursierVersion >= "3.5.0".coursierVersion || - (actualScalaVersion.coursierVersion >= "3.3.4".coursierVersion && - actualScalaVersion.coursierVersion < "3.4.0".coursierVersion) || - actualScalaVersion.startsWith("3.3.4") || - actualScalaVersion.startsWith("3.5") + inputs.fromRoot { root => + os.proc(TestUtil.cli, "doc", extraOptions, ".", "-o", dest, scopeOpts).call( + cwd = root, + stdin = os.Inherit, + stdout = os.Inherit ) - Seq( - "index.html", - "inkuire-db.json", - "$lessempty$greater$/simple$_.html", - "lib/Messages$.html" - ) - else - Seq( - "index.html", - "inkuire-db.json", - "_empty_/simple$_.html", - "lib/Messages$.html" + + val expectedDestDocPath = root / dest + expect(os.isDir(expectedDestDocPath)) + val expectedEntries = + if (actualScalaVersion.startsWith("2.")) + Seq( + "index.html", + "lib/Messages$.html", + "simple$.html" + ) + else if ( + actualScalaVersion.coursierVersion >= "3.5.0".coursierVersion || + (actualScalaVersion.coursierVersion >= "3.3.4".coursierVersion && + actualScalaVersion.coursierVersion < "3.4.0".coursierVersion) || + actualScalaVersion.startsWith("3.3.4") || + actualScalaVersion.startsWith("3.5") ) - val entries = - os.walk(root / dest).filter(!os.isDir(_)).map { path => - path.relativeTo(expectedDestDocPath).toString() -> os.read(path) - }.toMap - expect(expectedEntries.forall(e => entries.contains(e))) + Seq( + "index.html", + "inkuire-db.json", + "$lessempty$greater$/simple$_.html", + "lib/Messages$.html" + ) + else + Seq( + "index.html", + "inkuire-db.json", + "_empty_/simple$_.html", + "lib/Messages$.html" + ) + val entries = + os.walk(root / dest).filter(!os.isDir(_)).map { path => + path.relativeTo(expectedDestDocPath).toString() -> os.read(path) + }.toMap + expect(expectedEntries.forall(e => entries.contains(e))) - val documentableNameElement = - Jsoup.parse(entries("index.html")).select(".documentableName").asScala - documentableNameElement.filter(_.text().contains("lib")).foreach { element => - expect(!element.attr("href").startsWith("http")) + val documentableNameElement = + Jsoup.parse(entries("index.html")).select(".documentableName").asScala + documentableNameElement.filter(_.text().contains("lib")).foreach { element => + expect(!element.attr("href").startsWith("http")) + } } } - } } diff --git a/website/docs/reference/cli-options.md b/website/docs/reference/cli-options.md index 80a3497f07..74ef9b163c 100644 --- a/website/docs/reference/cli-options.md +++ b/website/docs/reference/cli-options.md @@ -1534,7 +1534,7 @@ Run scalafix rule(s) explicitly, overriding the configuration file default. Available in commands: -[`compile`](./commands.md#compile), [`package`](./commands.md#package), [`repl` , `console`](./commands.md#repl), [`run`](./commands.md#run), [`shebang`](./commands.md#shebang) +[`compile`](./commands.md#compile), [`doc`](./commands.md#doc), [`package`](./commands.md#package), [`repl` , `console`](./commands.md#repl), [`run`](./commands.md#run), [`shebang`](./commands.md#shebang) diff --git a/website/docs/reference/commands.md b/website/docs/reference/commands.md index 7009e0e92f..f76b3d0a1c 100644 --- a/website/docs/reference/commands.md +++ b/website/docs/reference/commands.md @@ -94,7 +94,7 @@ All supported types of inputs can be mixed with each other. For detailed documentation refer to our website: https://scala-cli.virtuslab.org/docs/commands/doc -Accepts option groups: [benchmarking](./cli-options.md#benchmarking-options), [compilation server](./cli-options.md#compilation-server-options), [coursier](./cli-options.md#coursier-options), [debug](./cli-options.md#debug-options), [dependency](./cli-options.md#dependency-options), [doc](./cli-options.md#doc-options), [global suppress warning](./cli-options.md#global-suppress-warning-options), [help group](./cli-options.md#help-group-options), [input](./cli-options.md#input-options), [jvm](./cli-options.md#jvm-options), [logging](./cli-options.md#logging-options), [markdown](./cli-options.md#markdown-options), [power](./cli-options.md#power-options), [python](./cli-options.md#python-options), [Scala.js](./cli-options.md#scalajs-options), [Scala Native](./cli-options.md#scala-native-options), [scalac](./cli-options.md#scalac-options), [scalac extra](./cli-options.md#scalac-extra-options), [semantic db](./cli-options.md#semantic-db-options), [shared](./cli-options.md#shared-options), [snippet](./cli-options.md#snippet-options), [source generator](./cli-options.md#source-generator-options), [suppress warning](./cli-options.md#suppress-warning-options), [verbosity](./cli-options.md#verbosity-options), [version](./cli-options.md#version-options), [workspace](./cli-options.md#workspace-options) +Accepts option groups: [benchmarking](./cli-options.md#benchmarking-options), [compilation server](./cli-options.md#compilation-server-options), [coursier](./cli-options.md#coursier-options), [debug](./cli-options.md#debug-options), [dependency](./cli-options.md#dependency-options), [doc](./cli-options.md#doc-options), [global suppress warning](./cli-options.md#global-suppress-warning-options), [help group](./cli-options.md#help-group-options), [input](./cli-options.md#input-options), [jvm](./cli-options.md#jvm-options), [logging](./cli-options.md#logging-options), [markdown](./cli-options.md#markdown-options), [power](./cli-options.md#power-options), [python](./cli-options.md#python-options), [Scala.js](./cli-options.md#scalajs-options), [Scala Native](./cli-options.md#scala-native-options), [scalac](./cli-options.md#scalac-options), [scalac extra](./cli-options.md#scalac-extra-options), [scope](./cli-options.md#scope-options), [semantic db](./cli-options.md#semantic-db-options), [shared](./cli-options.md#shared-options), [snippet](./cli-options.md#snippet-options), [source generator](./cli-options.md#source-generator-options), [suppress warning](./cli-options.md#suppress-warning-options), [verbosity](./cli-options.md#verbosity-options), [version](./cli-options.md#version-options), [workspace](./cli-options.md#workspace-options) ## export diff --git a/website/docs/reference/scala-command/cli-options.md b/website/docs/reference/scala-command/cli-options.md index 25227f2bc6..af8564e687 100644 --- a/website/docs/reference/scala-command/cli-options.md +++ b/website/docs/reference/scala-command/cli-options.md @@ -978,7 +978,7 @@ Turn verbosity on for scalac. This is an alias for --scalac-option -verbose Available in commands: -[`compile`](./commands.md#compile), [`repl` , `console`](./commands.md#repl), [`run`](./commands.md#run), [`shebang`](./commands.md#shebang) +[`compile`](./commands.md#compile), [`doc`](./commands.md#doc), [`repl` , `console`](./commands.md#repl), [`run`](./commands.md#run), [`shebang`](./commands.md#shebang) diff --git a/website/docs/reference/scala-command/commands.md b/website/docs/reference/scala-command/commands.md index 638a9785bb..56c0f29f2f 100644 --- a/website/docs/reference/scala-command/commands.md +++ b/website/docs/reference/scala-command/commands.md @@ -87,7 +87,7 @@ All supported types of inputs can be mixed with each other. For detailed documentation refer to our website: https://scala-cli.virtuslab.org/docs/commands/doc -Accepts option groups: [benchmarking](./cli-options.md#benchmarking-options), [compilation server](./cli-options.md#compilation-server-options), [coursier](./cli-options.md#coursier-options), [debug](./cli-options.md#debug-options), [dependency](./cli-options.md#dependency-options), [doc](./cli-options.md#doc-options), [global suppress warning](./cli-options.md#global-suppress-warning-options), [help group](./cli-options.md#help-group-options), [input](./cli-options.md#input-options), [jvm](./cli-options.md#jvm-options), [logging](./cli-options.md#logging-options), [markdown](./cli-options.md#markdown-options), [power](./cli-options.md#power-options), [python](./cli-options.md#python-options), [Scala.js](./cli-options.md#scalajs-options), [Scala Native](./cli-options.md#scala-native-options), [scalac](./cli-options.md#scalac-options), [scalac extra](./cli-options.md#scalac-extra-options), [semantic db](./cli-options.md#semantic-db-options), [shared](./cli-options.md#shared-options), [snippet](./cli-options.md#snippet-options), [source generator](./cli-options.md#source-generator-options), [suppress warning](./cli-options.md#suppress-warning-options), [verbosity](./cli-options.md#verbosity-options), [version](./cli-options.md#version-options), [workspace](./cli-options.md#workspace-options) +Accepts option groups: [benchmarking](./cli-options.md#benchmarking-options), [compilation server](./cli-options.md#compilation-server-options), [coursier](./cli-options.md#coursier-options), [debug](./cli-options.md#debug-options), [dependency](./cli-options.md#dependency-options), [doc](./cli-options.md#doc-options), [global suppress warning](./cli-options.md#global-suppress-warning-options), [help group](./cli-options.md#help-group-options), [input](./cli-options.md#input-options), [jvm](./cli-options.md#jvm-options), [logging](./cli-options.md#logging-options), [markdown](./cli-options.md#markdown-options), [power](./cli-options.md#power-options), [python](./cli-options.md#python-options), [Scala.js](./cli-options.md#scalajs-options), [Scala Native](./cli-options.md#scala-native-options), [scalac](./cli-options.md#scalac-options), [scalac extra](./cli-options.md#scalac-extra-options), [scope](./cli-options.md#scope-options), [semantic db](./cli-options.md#semantic-db-options), [shared](./cli-options.md#shared-options), [snippet](./cli-options.md#snippet-options), [source generator](./cli-options.md#source-generator-options), [suppress warning](./cli-options.md#suppress-warning-options), [verbosity](./cli-options.md#verbosity-options), [version](./cli-options.md#version-options), [workspace](./cli-options.md#workspace-options) ### repl diff --git a/website/docs/reference/scala-command/runner-specification.md b/website/docs/reference/scala-command/runner-specification.md index 4378d4f30d..db30eebc3d 100644 --- a/website/docs/reference/scala-command/runner-specification.md +++ b/website/docs/reference/scala-command/runner-specification.md @@ -1100,6 +1100,12 @@ Control if Scala CLI should use default options for scaladoc, true by default. U Aliases: `--default-scaladoc-opts` +**--test** + +Include test scope + +Aliases: `--test-scope` ,`--with-test-scope` ,`--with-test` +
### Implementantation specific options