Skip to content

Commit 4b4e463

Browse files
committed
Apply suggestions from code review
- move `maybePrintSimpleScalacOutput` back to `ScalaCommand` - remove ScalacLikeCommand trait - remove the `-X` alias for cross-compilation - remove unnecessary exit status code verification in Run command ITs
1 parent c651f68 commit 4b4e463

File tree

11 files changed

+59
-81
lines changed

11 files changed

+59
-81
lines changed

modules/cli-options/src/main/scala/scala/cli/commands/CompileCrossOptions.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import caseapp._
55
// format: off
66
final case class CompileCrossOptions(
77
@HelpMessage("Cross-compile sources")
8-
@ExtraName("X")
98
@Hidden
109
cross: Option[Boolean] = None
1110
)

modules/cli-options/src/main/scala/scala/cli/commands/CrossOptions.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import caseapp._
44

55
// format: off
66
final case class CrossOptions(
7-
@ExtraName("X")
87
cross: Option[Boolean] = None
98
)
109
// format: on

modules/cli-options/src/main/scala/scala/cli/commands/ScalacOptions.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ final case class ScalacOptions(
1717
scalacOption: List[String] = Nil
1818
)
1919
// format: on
20+
2021
object ScalacOptions {
2122

2223
private val scalacOptionsArg = Arg("scalacOption")

modules/cli/src/main/scala/scala/cli/commands/Compile.scala

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,21 @@ import caseapp._
44

55
import java.io.File
66

7-
import scala.build.options.{BuildOptions, Scope}
7+
import scala.build.options.Scope
88
import scala.build.{Build, BuildThreads, Builds, Os}
99
import scala.cli.CurrentParams
1010
import scala.cli.commands.util.SharedOptionsUtil._
1111

12-
object Compile extends ScalaCommand[CompileOptions] with ScalacLikeCommand[CompileOptions] {
12+
object Compile extends ScalaCommand[CompileOptions] {
1313
override def group = "Main"
1414
override def sharedOptions(options: CompileOptions): Option[SharedOptions] = Some(options.shared)
15-
override def buildOptions(options: CompileOptions): BuildOptions = options.shared.buildOptions()
1615

1716
def outputPath(options: CompileOptions): Option[os.Path] =
1817
options.output.filter(_.nonEmpty).map(p => os.Path(p, Os.pwd))
1918

2019
def run(options: CompileOptions, args: RemainingArgs): Unit = {
2120
maybePrintGroupHelp(options)
22-
maybePrintSimpleScalacOutput(options)
21+
maybePrintSimpleScalacOutput(options, options.shared.buildOptions())
2322
CurrentParams.verbosity = options.shared.logging.verbosity
2423
val inputs = options.shared.inputsOrExit(args)
2524
CurrentParams.workspaceOpt = Some(inputs.workspace)

modules/cli/src/main/scala/scala/cli/commands/Package.scala

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import scala.build.EitherCps.{either, value}
1919
import scala.build._
2020
import scala.build.errors.{BuildException, MalformedCliInputError, ScalaNativeBuildError}
2121
import scala.build.internal.{Runner, ScalaJsLinkerConfig}
22-
import scala.build.options.{BuildOptions, PackageType, Platform}
22+
import scala.build.options.{PackageType, Platform}
2323
import scala.cli.CurrentParams
2424
import scala.cli.commands.OptionsHelper._
2525
import scala.cli.commands.util.PackageOptionsUtil._
@@ -29,14 +29,13 @@ import scala.cli.internal.{CachedBinary, ProcUtil, ScalaJsLinker}
2929
import scala.cli.packaging.{Library, NativeImage}
3030
import scala.util.Properties
3131

32-
object Package extends ScalaCommand[PackageOptions] with ScalacLikeCommand[PackageOptions] {
32+
object Package extends ScalaCommand[PackageOptions] {
3333
override def name = "package"
3434
override def group = "Main"
3535
override def sharedOptions(options: PackageOptions): Option[SharedOptions] = Some(options.shared)
36-
override def buildOptions(po: PackageOptions): BuildOptions = po.buildOptions
3736
def run(options: PackageOptions, args: RemainingArgs): Unit = {
3837
maybePrintGroupHelp(options)
39-
maybePrintSimpleScalacOutput(options)
38+
maybePrintSimpleScalacOutput(options, options.buildOptions)
4039
CurrentParams.verbosity = options.shared.logging.verbosity
4140
val inputs = options.shared.inputsOrExit(args.remaining)
4241
CurrentParams.workspaceOpt = Some(inputs.workspace)

modules/cli/src/main/scala/scala/cli/commands/Run.scala

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,13 @@ import scala.cli.commands.util.SharedOptionsUtil._
1414
import scala.cli.internal.ProcUtil
1515
import scala.util.Properties
1616

17-
object Run extends ScalaCommand[RunOptions] with ScalacLikeCommand[RunOptions] {
17+
object Run extends ScalaCommand[RunOptions] {
1818
override def group = "Main"
1919

2020
override def sharedOptions(options: RunOptions): Option[SharedOptions] = Some(options.shared)
2121

2222
def run(options: RunOptions, args: RemainingArgs): Unit = {
2323
maybePrintGroupHelp(options)
24-
maybePrintSimpleScalacOutput(options)
2524
run(
2625
options,
2726
args.remaining,
@@ -30,7 +29,7 @@ object Run extends ScalaCommand[RunOptions] with ScalacLikeCommand[RunOptions] {
3029
)
3130
}
3231

33-
override def buildOptions(options: RunOptions): BuildOptions = {
32+
def buildOptions(options: RunOptions): BuildOptions = {
3433
import options._
3534
val baseOptions = shared.buildOptions(
3635
enableJmh = benchmarking.jmh.contains(true),
@@ -53,12 +52,13 @@ object Run extends ScalaCommand[RunOptions] with ScalacLikeCommand[RunOptions] {
5352
defaultInputs: () => Option[Inputs]
5453
): Unit = {
5554
CurrentParams.verbosity = options.shared.logging.verbosity
55+
val initialBuildOptions = buildOptions(options)
56+
maybePrintSimpleScalacOutput(options, initialBuildOptions)
57+
5658
val inputs = options.shared.inputsOrExit(inputArgs, defaultInputs = defaultInputs)
5759
CurrentParams.workspaceOpt = Some(inputs.workspace)
58-
59-
val initialBuildOptions = buildOptions(options)
60-
val logger = options.shared.logger
61-
val threads = BuildThreads.create()
60+
val logger = options.shared.logger
61+
val threads = BuildThreads.create()
6262

6363
val compilerMaker = options.shared.compilerMaker(threads)
6464

modules/cli/src/main/scala/scala/cli/commands/ScalaCommand.scala

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ import caseapp.core.parser.Parser
88
import caseapp.core.util.Formatter
99
import caseapp.core.{Arg, Error}
1010

11+
import scala.build.compiler.SimpleScalaCompiler
1112
import scala.build.internal.Constants
13+
import scala.build.options.{BuildOptions, Scope}
1214
import scala.cli.commands.util.CommandHelpers
1315
import scala.cli.commands.util.SharedOptionsUtil._
1416
import scala.util.{Properties, Try}
@@ -99,6 +101,42 @@ abstract class ScalaCommand[T](implicit parser: Parser[T], help: Help[T])
99101
for (shared <- sharedOptions(options))
100102
shared.helpGroups.maybePrintGroupHelp(help, helpFormat)
101103

104+
/** Print `scalac` output if passed options imply no inputs are necessary and raw `scalac` output
105+
* is required instead. (i.e. `--scalac-option -help`)
106+
* @param options
107+
* command options
108+
*/
109+
def maybePrintSimpleScalacOutput(options: T, buildOptions: BuildOptions): Unit =
110+
for {
111+
shared <- sharedOptions(options)
112+
scalacOptions = shared.scalac.scalacOption.toSeq
113+
updatedScalacOptions =
114+
if (shared.scalacHelp && !scalacOptions.contains("-help"))
115+
scalacOptions.appended("-help")
116+
else scalacOptions
117+
if updatedScalacOptions.exists(ScalacOptions.ScalacPrintOptions)
118+
logger = shared.logger
119+
artifacts <- buildOptions.artifacts(logger, Scope.Main).toOption
120+
scalaArtifacts <- artifacts.scalaOpt
121+
compilerClassPath = scalaArtifacts.compilerClassPath
122+
scalaVersion = scalaArtifacts.params.scalaVersion
123+
compileClassPath = artifacts.compileClassPath
124+
simpleScalaCompiler = SimpleScalaCompiler("java", Nil, scaladoc = false)
125+
javacOptions = buildOptions.javaOptions.javacOptions
126+
javaHome = buildOptions.javaHomeLocation().value
127+
} {
128+
val exitCode = simpleScalaCompiler.runSimpleScalacLike(
129+
scalaVersion,
130+
Option(javaHome),
131+
javacOptions,
132+
updatedScalacOptions,
133+
compileClassPath,
134+
compilerClassPath,
135+
logger
136+
)
137+
sys.exit(exitCode)
138+
}
139+
102140
override def helpFormat =
103141
HelpFormat.default()
104142
.withSortedGroups(Some(Seq(

modules/cli/src/main/scala/scala/cli/commands/ScalacLikeCommand.scala

Lines changed: 0 additions & 52 deletions
This file was deleted.

modules/cli/src/main/scala/scala/cli/commands/Test.scala

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@ import scala.build.{Build, BuildThreads, Builds, CrossKey, Logger, Positioned}
1414
import scala.cli.CurrentParams
1515
import scala.cli.commands.util.SharedOptionsUtil._
1616

17-
object Test extends ScalaCommand[TestOptions] with ScalacLikeCommand[TestOptions] {
17+
object Test extends ScalaCommand[TestOptions] {
1818
override def group = "Main"
1919
override def sharedOptions(options: TestOptions): Option[SharedOptions] = Some(options.shared)
2020

2121
private def gray = "\u001b[90m"
2222
private def reset = Console.RESET
2323

24-
override def buildOptions(opts: TestOptions): BuildOptions = {
24+
def buildOptions(opts: TestOptions): BuildOptions = {
2525
import opts._
2626
val baseOptions = shared.buildOptions()
2727
baseOptions.copy(
@@ -41,8 +41,11 @@ object Test extends ScalaCommand[TestOptions] with ScalacLikeCommand[TestOptions
4141

4242
def run(options: TestOptions, args: RemainingArgs): Unit = {
4343
maybePrintGroupHelp(options)
44-
maybePrintSimpleScalacOutput(options)
4544
CurrentParams.verbosity = options.shared.logging.verbosity
45+
46+
val initialBuildOptions = buildOptions(options)
47+
maybePrintSimpleScalacOutput(options, initialBuildOptions)
48+
4649
val inputs = options.shared.inputsOrExit(args.remaining)
4750
CurrentParams.workspaceOpt = Some(inputs.workspace)
4851
val logger = options.shared.logger
@@ -56,8 +59,7 @@ object Test extends ScalaCommand[TestOptions] with ScalacLikeCommand[TestOptions
5659
if (CommandUtils.shouldCheckUpdate)
5760
Update.checkUpdateSafe(logger)
5861

59-
val initialBuildOptions = buildOptions(options)
60-
val threads = BuildThreads.create()
62+
val threads = BuildThreads.create()
6163

6264
val compilerMaker = options.shared.compilerMaker(threads)
6365

modules/integration/src/test/scala/scala/cli/integration/RunTestDefinitions.scala

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1708,7 +1708,6 @@ abstract class RunTestDefinitions(val scalaVersionOpt: Option[String])
17081708
"--scalac-help"
17091709
)
17101710
.call(cwd = root, mergeErrIntoOut = true)
1711-
expect(res1.exitCode == 0)
17121711
expect(res1.out.text().contains("scalac <options> <source files>"))
17131712

17141713
val res2 = os.proc(
@@ -1718,7 +1717,6 @@ abstract class RunTestDefinitions(val scalaVersionOpt: Option[String])
17181717
"-help"
17191718
)
17201719
.call(cwd = root, mergeErrIntoOut = true)
1721-
expect(res2.exitCode == 0)
17221720
expect(res1.out.text() == res2.out.text())
17231721
}
17241722
}
@@ -1741,7 +1739,6 @@ abstract class RunTestDefinitions(val scalaVersionOpt: Option[String])
17411739
printOption
17421740
)
17431741
.call(cwd = root, mergeErrIntoOut = true)
1744-
expect(res.exitCode == 0)
17451742
expect(res.out.text().nonEmpty)
17461743
}
17471744
}

0 commit comments

Comments
 (0)