Skip to content

Commit

Permalink
NIT Use enums for help groups and help command groups (#1880)
Browse files Browse the repository at this point in the history
  • Loading branch information
Gedochao committed Feb 24, 2023
1 parent 5a6fd00 commit e689734
Show file tree
Hide file tree
Showing 79 changed files with 561 additions and 469 deletions.
6 changes: 3 additions & 3 deletions modules/cli/src/main/scala/scala/cli/ScalaCliCommands.scala
@@ -1,11 +1,11 @@
package scala.cli

import caseapp.core.app.CommandsEntryPoint
import caseapp.core.help.{Help, RuntimeCommandsHelp}
import caseapp.core.help.{Help, HelpFormat, RuntimeCommandsHelp}

import java.nio.file.InvalidPathException

import scala.cli.commands._
import scala.cli.commands.*
import scala.cli.commands.shared.ScalaCliHelp

class ScalaCliCommands(
Expand Down Expand Up @@ -91,7 +91,7 @@ class ScalaCliCommands(
override def enableCompleteCommand = true
override def enableCompletionsCommand = true

override def helpFormat = ScalaCliHelp.helpFormat
override def helpFormat: HelpFormat = ScalaCliHelp.helpFormat

private def isShebangFile(arg: String): Boolean = {
val pathOpt =
Expand Down
Expand Up @@ -7,10 +7,11 @@ import scala.build.internal.Constants
import scala.build.{Logger, Os}
import scala.cli.commands.ScalaCommand
import scala.cli.commands.setupide.SetupIde
import scala.cli.commands.shared.HelpCommandGroup
import scala.cli.{CurrentParams, ScalaCli}

object Clean extends ScalaCommand[CleanOptions] {
override def group = "Main"
override def group: String = HelpCommandGroup.Main.toString

override def scalaSpecificationLevel = SpecificationLevel.IMPLEMENTATION

Expand Down
Expand Up @@ -10,21 +10,27 @@ import scala.build.{Build, BuildThreads, Builds, Logger, Os}
import scala.cli.CurrentParams
import scala.cli.commands.publish.ConfigUtil.*
import scala.cli.commands.setupide.SetupIde
import scala.cli.commands.shared.SharedOptions
import scala.cli.commands.shared.{HelpCommandGroup, HelpGroup, SharedOptions}
import scala.cli.commands.update.Update
import scala.cli.commands.util.BuildCommandHelpers
import scala.cli.commands.{CommandUtils, ScalaCommand, WatchUtil}
import scala.cli.commands.{CommandUtils, ScalaCommand, SpecificationLevel, WatchUtil}
import scala.cli.config.{ConfigDb, Keys}
import scala.cli.util.ArgHelpers.*

object Compile extends ScalaCommand[CompileOptions] with BuildCommandHelpers {
override def group = "Main"
override def group: String = HelpCommandGroup.Main.toString

override def sharedOptions(options: CompileOptions): Option[SharedOptions] = Some(options.shared)

override def scalaSpecificationLevel = SpecificationLevel.MUST
val primaryHelpGroups: Seq[String] =
Seq("Compilation", "Scala", "Java", "Watch", "Compilation server")
override def scalaSpecificationLevel: SpecificationLevel = SpecificationLevel.MUST
val primaryHelpGroups: Seq[HelpGroup] =
Seq(
HelpGroup.Compilation,
HelpGroup.Scala,
HelpGroup.Java,
HelpGroup.Watch,
HelpGroup.CompilationServer
)

override def helpFormat: HelpFormat = super.helpFormat.withPrimaryGroups(primaryHelpGroups)

Expand Down
Expand Up @@ -6,6 +6,7 @@ import caseapp.core.help.Help
import scala.cli.commands.shared.{
CrossOptions,
HasSharedOptions,
HelpGroup,
HelpMessages,
SharedOptions,
SharedWatchOptions
Expand All @@ -22,15 +23,15 @@ final case class CompileOptions(
@Recurse
cross: CrossOptions = CrossOptions(),

@Group("Compilation")
@Group(HelpGroup.Compilation.toString)
@Name("p")
@Name("printClasspath")
@HelpMessage("Print the resulting class path")
@Tag(tags.should)
@Tag(tags.inShortHelp)
printClassPath: Boolean = false,

@Group("Compilation")
@Group(HelpGroup.Compilation.toString)
@HelpMessage("Compile test scope")
@Tag(tags.should)
@Tag(tags.inShortHelp)
Expand Down
Expand Up @@ -11,6 +11,7 @@ import scala.build.errors.{BuildException, CompositeBuildException, MalformedCli
import scala.build.{Directories, Logger}
import scala.cli.commands.pgp.PgpScalaSigningOptions
import scala.cli.commands.publish.ConfigUtil.*
import scala.cli.commands.shared.HelpGroup
import scala.cli.commands.util.JvmUtils
import scala.cli.commands.{ScalaCommand, SpecificationLevel}
import scala.cli.config.{
Expand All @@ -23,11 +24,11 @@ import scala.cli.config.{
}
import scala.cli.util.ArgHelpers.*
object Config extends ScalaCommand[ConfigOptions] {
override def scalaSpecificationLevel = SpecificationLevel.MUST
override def scalaSpecificationLevel: SpecificationLevel = SpecificationLevel.MUST

override def helpFormat: HelpFormat = super.helpFormat
.copy(hiddenGroups = Some(Seq("Java")))
.withPrimaryGroup("Config")
.withHiddenGroup(HelpGroup.Java)
.withPrimaryGroup(HelpGroup.Config)

override def runCommand(options: ConfigOptions, args: RemainingArgs, logger: Logger): Unit = {
val directories = Directories.directories
Expand Down
Expand Up @@ -7,6 +7,7 @@ import scala.cli.commands.pgp.PgpScalaSigningOptions
import scala.cli.commands.shared.{
CoursierOptions,
HasLoggingOptions,
HelpGroup,
HelpMessages,
LoggingOptions,
SharedJvmOptions
Expand All @@ -25,54 +26,54 @@ final case class ConfigOptions(
@Recurse
@Tag(tags.restricted)
scalaSigning: PgpScalaSigningOptions = PgpScalaSigningOptions(),
@Group("Config")
@Group(HelpGroup.Config.toString)
@HelpMessage("Dump config DB as JSON")
@Hidden
@Tag(tags.implementation)
@Tag(tags.inShortHelp)
dump: Boolean = false,
@Group("Config")
@Group(HelpGroup.Config.toString)
@HelpMessage("Create PGP key in config")
@Tag(tags.inShortHelp)
@Tag(tags.restricted)
createPgpKey: Boolean = false,
@Group("Config")
@Group(HelpGroup.Config.toString)
@HelpMessage("Email to use to create PGP key in config")
@Tag(tags.restricted)
@Tag(tags.inShortHelp)
email: Option[String] = None,
@Group("Config")
@Group(HelpGroup.Config.toString)
@HelpMessage("If the entry is a password, print the password value rather than how to get the password")
@Tag(tags.restricted)
@Tag(tags.inShortHelp)
password: Boolean = false,
@Group("Config")
@Group(HelpGroup.Config.toString)
@HelpMessage("If the entry is a password, save the password value rather than how to get the password")
@Tag(tags.restricted)
@Tag(tags.inShortHelp)
passwordValue: Boolean = false,
@Group("Config")
@Group(HelpGroup.Config.toString)
@HelpMessage("Remove an entry from config")
@Tag(tags.inShortHelp)
@Tag(tags.should)
@ExtraName("remove")
unset: Boolean = false,
@Group("Config")
@Group(HelpGroup.Config.toString)
@HelpMessage("For repository.credentials and publish.credentials, whether these credentials should be HTTPS only (default: true)")
@Tag(tags.restricted)
@Tag(tags.inShortHelp)
httpsOnly: Option[Boolean] = None,
@Group("Config")
@Group(HelpGroup.Config.toString)
@HelpMessage("For repository.credentials, whether to use these credentials automatically based on the host")
@Tag(tags.restricted)
@Tag(tags.inShortHelp)
matchHost: Option[Boolean] = None,
@Group("Config")
@Group(HelpGroup.Config.toString)
@HelpMessage("For repository.credentials, whether to use these credentials are optional")
@Tag(tags.restricted)
@Tag(tags.inShortHelp)
optional: Option[Boolean] = None,
@Group("Config")
@Group(HelpGroup.Config.toString)
@HelpMessage("For repository.credentials, whether to use these credentials should be passed upon redirection")
@Tag(tags.restricted)
@Tag(tags.inShortHelp)
Expand Down
Expand Up @@ -11,7 +11,7 @@ import scala.cli.CurrentParams
import scala.cli.commands.repl.{Repl, ReplOptions}
import scala.cli.commands.run.{Run, RunOptions}
import scala.cli.commands.shared.ScalaCliHelp.helpFormat
import scala.cli.commands.shared.SharedOptions
import scala.cli.commands.shared.{HelpCommandGroup, SharedOptions}
import scala.cli.commands.version.{Version, VersionOptions}
import scala.cli.commands.{ScalaCommand, ScalaCommandWithCustomHelp}
import scala.cli.launcher.LauncherOptions
Expand All @@ -36,7 +36,7 @@ class Default(

override def scalaSpecificationLevel = SpecificationLevel.MUST

override def group = "Main"
override def group: String = HelpCommandGroup.Main.toString

override def sharedOptions(options: DefaultOptions): Option[SharedOptions] = Some(options.shared)

Expand Down
Expand Up @@ -3,7 +3,7 @@ package scala.cli.commands.default
import caseapp.*

import scala.cli.ScalaCli.fullRunnerName
import scala.cli.commands.shared.{HasLoggingOptions, HelpMessages, LoggingOptions}
import scala.cli.commands.shared.{HasLoggingOptions, HelpGroup, HelpMessages, LoggingOptions}
import scala.cli.commands.tags

// format: off
Expand All @@ -14,19 +14,19 @@ import scala.cli.commands.tags
final case class DefaultFileOptions(
@Recurse
logging: LoggingOptions = LoggingOptions(),
@Group("Default")
@Group(HelpGroup.Default.toString)
@HelpMessage("Write result to files rather than to stdout")
@Tag(tags.restricted)
write: Boolean = false,
@Group("Default")
@Group(HelpGroup.Default.toString)
@HelpMessage("List available default files")
@Tag(tags.restricted)
list: Boolean = false,
@Group("Default")
@Group(HelpGroup.Default.toString)
@HelpMessage("List available default file ids")
@Tag(tags.restricted)
listIds: Boolean = false,
@Group("Default")
@Group(HelpGroup.Default.toString)
@HelpMessage("Force overwriting destination files")
@ExtraName("f")
@Tag(tags.restricted)
Expand Down
Expand Up @@ -9,6 +9,7 @@ import scala.cli.ScalaCli.{fullRunnerName, progName}
import scala.cli.commands.bloop.BloopExit
import scala.cli.commands.default.LegacyScalaOptions.*
import scala.cli.commands.package0.Package
import scala.cli.commands.shared.HelpGroup
import scala.cli.commands.shared.HelpMessages.PowerString
import scala.cli.commands.shared.ScalacOptions.YScriptRunnerOption
import scala.cli.commands.tags
Expand All @@ -17,39 +18,39 @@ import scala.cli.commands.tags
*/
// format: off
case class LegacyScalaOptions(
@Group("Legacy Scala runner")
@Group(HelpGroup.LegacyScalaRunner.toString)
@HelpMessage(s"Ignored legacy option. Deprecated equivalent of running a subsequent `$PowerString${Package.name}` command.")
@Tag(tags.must)
@Hidden
@Name("-save")
save: Option[Indexed[Boolean]] = None,
@Group("Legacy Scala runner")
@Group(HelpGroup.LegacyScalaRunner.toString)
@HelpMessage("Ignored legacy option. Deprecated override canceling the `-nosave` option.")
@Tag(tags.must)
@Hidden
@Name("-nosave")
nosave: Option[Indexed[Boolean]] = None,
@Group("Legacy Scala runner")
@Group(HelpGroup.LegacyScalaRunner.toString)
@HelpMessage("Ignored legacy option. Deprecated override defining how the runner should treat the input. Use the appropriate sub-command instead.")
@Tag(tags.must)
@Hidden
@ValueDescription("object|script|jar|repl|guess")
@Name("-howtorun")
howToRun: Option[Indexed[String]] = None,
@Group("Legacy Scala runner")
@Group(HelpGroup.LegacyScalaRunner.toString)
@HelpMessage("Ignored legacy option. Deprecated option allowing to preload inputs for the repl or command execution.")
@Tag(tags.must)
@Hidden
@ValueDescription("file")
I: Option[Indexed[List[String]]] = None,
@Group("Legacy Scala runner")
@Group(HelpGroup.LegacyScalaRunner.toString)
@HelpMessage("Ignored legacy option. Deprecated option allowing to prevent the use of the legacy fsc compilation daemon.")
@Tag(tags.must)
@Hidden
@Name("-nc")
@Name("-nocompdaemon")
noCompilationDaemon: Option[Indexed[Boolean]] = None,
@Group("Legacy Scala runner")
@Group(HelpGroup.LegacyScalaRunner.toString)
@HelpMessage("Ignored legacy option. Deprecated option allowing to force the `run` mode on an input.")
@Tag(tags.must)
@Hidden
Expand Down
Expand Up @@ -9,14 +9,15 @@ import scala.build.internal.CustomCodeWrapper
import scala.build.options.{BuildOptions, Scope}
import scala.build.{CrossSources, Logger, Position, Sources}
import scala.cli.CurrentParams
import scala.cli.commands.ScalaCommand
import scala.cli.commands.shared.SharedOptions
import scala.cli.commands.shared.{HelpCommandGroup, HelpGroup, SharedOptions}
import scala.cli.commands.{ScalaCommand, SpecificationLevel}
import scala.cli.util.ArgHelpers.*

object DependencyUpdate extends ScalaCommand[DependencyUpdateOptions] {
override def group = "Main"
override def scalaSpecificationLevel = SpecificationLevel.RESTRICTED
override def helpFormat: HelpFormat = super.helpFormat.withPrimaryGroup("Dependency")
override def group: String = HelpCommandGroup.Main.toString
override def scalaSpecificationLevel: SpecificationLevel = SpecificationLevel.RESTRICTED
override def helpFormat: HelpFormat =
super.helpFormat.withPrimaryGroup(HelpGroup.Dependency)
override def sharedOptions(options: DependencyUpdateOptions): Option[SharedOptions] =
Some(options.shared)
override def runCommand(
Expand Down
Expand Up @@ -3,15 +3,15 @@ package scala.cli.commands.dependencyupdate
import caseapp.*
import caseapp.core.help.Help

import scala.cli.commands.shared.{HasSharedOptions, SharedOptions}
import scala.cli.commands.shared.{HasSharedOptions, HelpGroup, SharedOptions}
import scala.cli.commands.tags

// format: off
@HelpMessage("Update dependency directives in the project")
final case class DependencyUpdateOptions(
@Recurse
shared: SharedOptions = SharedOptions(),
@Group("Dependency")
@Group(HelpGroup.Dependency.toString)
@HelpMessage("Update all dependencies if a newer version was released")
@Tag(tags.restricted)
@Tag(tags.inShortHelp)
Expand Down
10 changes: 5 additions & 5 deletions modules/cli/src/main/scala/scala/cli/commands/doc/Doc.scala
Expand Up @@ -15,21 +15,21 @@ import scala.build.internal.Runner
import scala.build.options.BuildOptions
import scala.cli.CurrentParams
import scala.cli.commands.publish.ConfigUtil.*
import scala.cli.commands.shared.SharedOptions
import scala.cli.commands.{CommandUtils, ScalaCommand}
import scala.cli.commands.shared.{HelpCommandGroup, HelpGroup, SharedOptions}
import scala.cli.commands.{CommandUtils, ScalaCommand, SpecificationLevel}
import scala.cli.config.{ConfigDb, Keys}
import scala.cli.errors.ScaladocGenerationFailedError
import scala.cli.util.ArgHelpers.*
import scala.util.Properties

object Doc extends ScalaCommand[DocOptions] {
override def group = "Main"
override def group: String = HelpCommandGroup.Main.toString

override def sharedOptions(options: DocOptions): Option[SharedOptions] = Some(options.shared)

override def helpFormat: HelpFormat = super.helpFormat.withPrimaryGroup("Doc")
override def helpFormat: HelpFormat = super.helpFormat.withPrimaryGroup(HelpGroup.Doc)

override def scalaSpecificationLevel = SpecificationLevel.MUST
override def scalaSpecificationLevel: SpecificationLevel = SpecificationLevel.MUST

override def runCommand(options: DocOptions, args: RemainingArgs, logger: Logger): Unit = {
val initialBuildOptions = buildOptionsOrExit(options)
Expand Down
Expand Up @@ -4,25 +4,25 @@ import caseapp.*
import caseapp.core.help.Help

import scala.cli.ScalaCli.fullRunnerName
import scala.cli.commands.shared.{HasSharedOptions, HelpMessages, SharedOptions}
import scala.cli.commands.shared.{HasSharedOptions, HelpGroup, HelpMessages, SharedOptions}
import scala.cli.commands.tags

// format: off
@HelpMessage(DocOptions.helpMessage, DocOptions.messageMd, DocOptions.detailedHelpMessage)
final case class DocOptions(
@Recurse
shared: SharedOptions = SharedOptions(),
@Group("Doc")
@Group(HelpGroup.Doc.toString)
@Tag(tags.must)
@HelpMessage("Set the destination path")
@Name("o")
output: Option[String] = None,
@Group("Doc")
@Group(HelpGroup.Doc.toString)
@HelpMessage("Overwrite the destination directory, if it exists")
@Tag(tags.must)
@Name("f")
force: Boolean = false,
@Group("Doc")
@Group(HelpGroup.Doc.toString)
@HelpMessage(s"Control if $fullRunnerName should use default options for scaladoc, true by default. Use `--default-scaladoc-opts:false` to not include default options.")
@Tag(tags.should)
@ExtraName("defaultScaladocOpts")
Expand Down

0 comments on commit e689734

Please sign in to comment.