Skip to content

Commit 0c8d0fd

Browse files
authored
NIT: Refactor: Rely on global --power option where able in cli commands (#2480)
1 parent 9e22d4a commit 0c8d0fd

File tree

11 files changed

+25
-38
lines changed

11 files changed

+25
-38
lines changed

modules/cli/src/main/scala/scala/cli/ScalaCli.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ object ScalaCli {
265265
// Enable ANSI output in Windows terminal
266266
coursier.jniutils.WindowsAnsiTerminal.enableAnsiOutput()
267267

268-
new ScalaCliCommands(progName, baseRunnerName, fullRunnerName, isSipScala)
268+
new ScalaCliCommands(progName, baseRunnerName, fullRunnerName)
269269
.main(scalaCliArgs)
270270
}
271271
}

modules/cli/src/main/scala/scala/cli/ScalaCliCommands.scala

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,10 @@ import scala.cli.commands.shared.ScalaCliHelp
1111
class ScalaCliCommands(
1212
val progName: String,
1313
baseRunnerName: String,
14-
fullRunnerName: String,
15-
isSipScala: Boolean
14+
fullRunnerName: String
1615
) extends CommandsEntryPoint {
1716

18-
lazy val actualDefaultCommand = new default.Default(help, isSipScala)
17+
lazy val actualDefaultCommand = new default.Default(help)
1918

2019
// for debugging purposes - allows to run the scala-cli-signing binary from the Scala CLI JVM launcher
2120
private lazy val pgpUseBinaryCommands =

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

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import scala.build.internals.FeatureType
2323
import scala.build.options.{BuildOptions, ScalacOpt, Scope}
2424
import scala.build.{Artifacts, Directories, Logger, Positioned, ReplArtifacts}
2525
import scala.cli.commands.default.LegacyScalaOptions
26-
import scala.cli.commands.shared._
26+
import scala.cli.commands.shared.*
2727
import scala.cli.commands.util.CommandHelpers
2828
import scala.cli.commands.util.ScalacOptionsUtil.*
2929
import scala.cli.config.{ConfigDb, Keys}
@@ -35,15 +35,19 @@ import scala.util.{Properties, Try}
3535
abstract class ScalaCommand[T <: HasGlobalOptions](implicit myParser: Parser[T], help: Help[T])
3636
extends Command()(myParser, help)
3737
with NeedsArgvCommand with CommandHelpers with RestrictableCommand[T] {
38+
private val globalOptionsAtomic: AtomicReference[GlobalOptions] =
39+
new AtomicReference(GlobalOptions.default)
40+
41+
private def globalOptions: GlobalOptions = globalOptionsAtomic.get()
3842

3943
def sharedOptions(t: T): Option[SharedOptions] = // hello borked unused warning
4044
None
41-
override def hasFullHelp = true
42-
override def hidden = shouldExcludeInSip
43-
protected var argvOpt = Option.empty[Array[String]]
44-
45-
private val shouldExcludeInSip =
46-
(isRestricted || isExperimental) && !ScalaCli.allowRestrictedFeatures
45+
override def hasFullHelp = true
46+
override def hidden: Boolean = shouldExcludeInSip
47+
protected var argvOpt = Option.empty[Array[String]]
48+
protected def allowRestrictedFeatures: Boolean =
49+
ScalaCli.allowRestrictedFeatures || globalOptions.powerOptions.power
50+
private def shouldExcludeInSip = (isRestricted || isExperimental) && !allowRestrictedFeatures
4751
override def setArgv(argv: Array[String]): Unit = {
4852
argvOpt = Some(argv)
4953
}
@@ -316,10 +320,6 @@ abstract class ScalaCommand[T <: HasGlobalOptions](implicit myParser: Parser[T],
316320
sharedOptions(options).foreach(_.logger.debug("build options could not be initialized"))
317321
sys.exit(1)
318322
}
319-
320-
private val globalOptionsAtomic: AtomicReference[GlobalOptions] =
321-
new AtomicReference(GlobalOptions.default)
322-
private def globalOptions: GlobalOptions = globalOptionsAtomic.get()
323323
override def shouldSuppressExperimentalFeatureWarnings: Boolean =
324324
globalOptions.globalSuppress.suppressExperimentalFeatureWarning
325325
.orElse {

modules/cli/src/main/scala/scala/cli/commands/clean/Clean.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ import caseapp.*
55
import scala.build.input.Inputs
66
import scala.build.internal.Constants
77
import scala.build.{Logger, Os}
8+
import scala.cli.CurrentParams
89
import scala.cli.commands.ScalaCommand
910
import scala.cli.commands.setupide.SetupIde
1011
import scala.cli.commands.shared.HelpCommandGroup
11-
import scala.cli.{CurrentParams, ScalaCli}
1212

1313
object Clean extends ScalaCommand[CleanOptions] {
1414
override def group: String = HelpCommandGroup.Main.toString
@@ -21,7 +21,7 @@ object Clean extends ScalaCommand[CleanOptions] {
2121
Os.pwd,
2222
defaultInputs = () => Inputs.default(),
2323
forcedWorkspace = options.workspace.forcedWorkspaceOpt,
24-
allowRestrictedFeatures = ScalaCli.allowRestrictedFeatures,
24+
allowRestrictedFeatures = allowRestrictedFeatures,
2525
extraClasspathWasPassed = false
2626
) match {
2727
case Left(message) =>

modules/cli/src/main/scala/scala/cli/commands/config/Config.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import scala.build.errors.{BuildException, CompositeBuildException, MalformedCli
1111
import scala.build.internal.util.WarningMessages
1212
import scala.build.internals.FeatureType
1313
import scala.build.{Directories, Logger}
14-
import scala.cli.ScalaCli.allowRestrictedFeatures
1514
import scala.cli.commands.pgp.PgpScalaSigningOptions
1615
import scala.cli.commands.publish.ConfigUtil.*
1716
import scala.cli.commands.shared.HelpGroup

modules/cli/src/main/scala/scala/cli/commands/default/Default.scala

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,18 @@
11
package scala.cli.commands.default
22

3-
import caseapp.core.help.{Help, HelpCompanion, RuntimeCommandsHelp}
3+
import caseapp.core.help.RuntimeCommandsHelp
44
import caseapp.core.{Error, RemainingArgs}
55

66
import scala.build.Logger
77
import scala.build.input.{Inputs, ScalaCliInvokeData, SubCommand}
8-
import scala.build.internal.Constants
9-
import scala.build.options.BuildOptions
10-
import scala.cli.CurrentParams
8+
import scala.cli.commands.ScalaCommandWithCustomHelp
119
import scala.cli.commands.repl.{Repl, ReplOptions}
1210
import scala.cli.commands.run.{Run, RunOptions}
13-
import scala.cli.commands.shared.ScalaCliHelp.helpFormat
1411
import scala.cli.commands.shared.{HelpCommandGroup, SharedOptions}
1512
import scala.cli.commands.version.{Version, VersionOptions}
16-
import scala.cli.commands.{ScalaCommand, ScalaCommandWithCustomHelp}
17-
import scala.cli.launcher.LauncherOptions
18-
19-
class Default(
20-
actualHelp: => RuntimeCommandsHelp,
21-
isSipScala: Boolean
22-
) extends ScalaCommandWithCustomHelp[DefaultOptions](actualHelp) {
2313

14+
class Default(actualHelp: => RuntimeCommandsHelp)
15+
extends ScalaCommandWithCustomHelp[DefaultOptions](actualHelp) {
2416
private lazy val defaultCommandHelp: String =
2517
s"""
2618
|When no subcommand is passed explicitly, an implicit subcommand is used based on context:

modules/cli/src/main/scala/scala/cli/commands/shared/ScalaCliHelp.scala

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ package scala.cli.commands.shared
33
import caseapp.core.Arg
44
import caseapp.core.help.HelpFormat
55

6-
import scala.cli.ScalaCli.allowRestrictedFeatures
7-
import scala.cli.commands.shared.HelpGroup
86
import scala.cli.util.ArgHelpers.*
97
import scala.util.{Properties, Try}
108

modules/cli/src/main/scala/scala/cli/util/ArgHelpers.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import caseapp.core.help.HelpFormat
55

66
import scala.build.input.ScalaCliInvokeData
77
import scala.build.internal.util.WarningMessages
8-
import scala.cli.ScalaCli.allowRestrictedFeatures
8+
import scala.cli.ScalaCli
99
import scala.cli.commands.shared.{HelpCommandGroup, HelpGroup}
1010
import scala.cli.commands.{SpecificationLevel, tags}
1111

@@ -17,7 +17,7 @@ object ArgHelpers {
1717

1818
def isExperimentalOrRestricted: Boolean = arg.isRestricted || arg.isExperimental
1919

20-
def isSupported: Boolean = allowRestrictedFeatures || !arg.isExperimentalOrRestricted
20+
def isSupported: Boolean = ScalaCli.allowRestrictedFeatures || !arg.isExperimentalOrRestricted
2121
def isImportant: Boolean = arg.hasTag(tags.inShortHelp)
2222

2323
def isMust: Boolean = arg.hasTag(tags.must)

modules/cli/src/test/scala/cli/tests/HelpCheck.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import scala.cli.{ScalaCli, ScalaCliCommands}
88
class HelpCheck extends munit.FunSuite {
99

1010
test("help message should be shorter then 80 lines") {
11-
val scalaCli = new ScalaCliCommands("scala-cli", "scala-cli", "Scala CLI", isSipScala = false)
11+
val scalaCli = new ScalaCliCommands("scala-cli", "scala-cli", "Scala CLI")
1212
val helpMessage = scalaCli.help.help(scalaCli.helpFormat)
1313

1414
val lines = helpMessage.split("\r\n|\r|\n").length

modules/cli/src/test/scala/cli/tests/OptionsCheck.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ class OptionsCheck extends munit.FunSuite {
77

88
for (
99
command <-
10-
(new ScalaCliCommands("scala-cli", "scala-cli", "Scala CLI", isSipScala = false)).commands
10+
new ScalaCliCommands("scala-cli", "scala-cli", "Scala CLI").commands
1111
)
1212
test(s"No duplicated options in ${command.names.head.mkString(" ")}") {
1313
command.ensureNoDuplicates()

0 commit comments

Comments
 (0)