Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add help parameter to print specific options for ScalaNative and Scal… #489

Merged
merged 2 commits into from
Dec 16, 2021
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: 7 additions & 6 deletions modules/cli/src/main/scala/scala/cli/ScalaCli.scala
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package scala.cli

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

import java.io.{ByteArrayOutputStream, PrintStream}
import java.nio.charset.StandardCharsets
Expand Down Expand Up @@ -40,16 +40,17 @@ object ScalaCli extends CommandsEntryPoint {
Version
)

lazy val progName = (new Argv0).get("scala-cli")
override def description = "Compile, run, package Scala code."
lazy val progName = (new Argv0).get("scala-cli")
override def description =
"Scala CLI is a command-line tool to interact with the Scala language. It lets you compile, run, test, and package your Scala code."
override def summaryDesc =
"See 'scala-cli <command> --help' to read about a specific subcommand. To see full help run 'scala-cli <command> --help-full'."
final override def defaultCommand = Some(actualDefaultCommand)

// FIXME Report this in case-app default NameFormatter
override lazy val help: RuntimeCommandsHelp = {
val parent = super.help
parent.withDefaultHelp(
parent.defaultHelp.withNameFormatter(actualDefaultCommand.nameFormatter)
)
parent.withDefaultHelp(Help[Unit]())
alexarchambault marked this conversation as resolved.
Show resolved Hide resolved
}

override def enableCompleteCommand = true
Expand Down
1 change: 1 addition & 0 deletions modules/cli/src/main/scala/scala/cli/commands/Bsp.scala
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import scala.concurrent.Await
import scala.concurrent.duration.Duration

object Bsp extends ScalaCommand[BspOptions] {
override def hidden = true
lwronski marked this conversation as resolved.
Show resolved Hide resolved
def run(options: BspOptions, args: RemainingArgs): Unit = {
CurrentParams.verbosity = options.shared.logging.verbosity
if (options.shared.logging.verbosity >= 3)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ object Compile extends ScalaCommand[CompileOptions] {
override def group = "Main"
override def sharedOptions(options: CompileOptions) = Some(options.shared)
def run(options: CompileOptions, args: RemainingArgs): Unit = {
maybePrintGroupHelp(options)
CurrentParams.verbosity = options.shared.logging.verbosity
val inputs = options.shared.inputsOrExit(args)
CurrentParams.workspaceOpt = Some(inputs.workspace)
Expand Down
2 changes: 1 addition & 1 deletion modules/cli/src/main/scala/scala/cli/commands/Fmt.scala
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import scala.cli.CurrentParams
import scala.cli.internal.FetchExternalBinary

object Fmt extends ScalaCommand[FmtOptions] {
override def group = "Miscellaneous"
override def group = "Main"
override def sharedOptions(options: FmtOptions) = Some(options.shared)
override def names = List(
List("fmt"),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package scala.cli.commands

import caseapp._
import caseapp.core.help.Help
import upickle.default.{ReadWriter, macroRW}

import scala.cli.ScalaCli

@HelpMessage("Print help message")
case class HelpGroupOptions(
@HelpMessage("Show options for ScalaJS")
helpJs: Boolean = false,
@HelpMessage("Show options for ScalaNative")
helpNative: Boolean = false
) {

private def printHelpWithGroup(help: Help[_], group: String) = {
println(help.help(ScalaCli.helpFormat.withHiddenGroups(
ScalaCli.helpFormat.hiddenGroups.map(_.filterNot(_ == group))
)))
sys.exit(0)
}

def maybePrintGroupHelp(help: Help[_]): Unit = {
if (helpJs) printHelpWithGroup(help, "Scala.JS")
else if (helpNative) printHelpWithGroup(help, "Scala Native")
}
}

object HelpGroupOptions {
lazy val parser: Parser[HelpGroupOptions] = Parser.derive
implicit lazy val parserAux: Parser.Aux[HelpGroupOptions, parser.D] = parser
implicit lazy val help: Help[HelpGroupOptions] = Help.derive
implicit lazy val jsonCodec: ReadWriter[HelpGroupOptions] = macroRW
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ import scala.cli.CurrentParams
import scala.cli.internal.FetchExternalBinary

object Metabrowse extends ScalaCommand[MetabrowseOptions] {
override def group = "Miscellaneous"
override def hidden = true
override def group = "Miscellaneous"
override def names = List(
List("browse"),
List("metabrowse")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ object Package extends ScalaCommand[PackageOptions] {
override def group = "Main"
override def sharedOptions(options: PackageOptions) = Some(options.shared)
def run(options: PackageOptions, args: RemainingArgs): Unit = {
maybePrintGroupHelp(options)
CurrentParams.verbosity = options.shared.logging.verbosity
val inputs = options.shared.inputsOrExit(args)
CurrentParams.workspaceOpt = Some(inputs.workspace)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ final case class PackageOptions(
pkg: Boolean = false,
@Group("Package")
@HelpMessage("Build Docker image")
docker: Boolean = false,
docker: Boolean = false
) {
// format: on
def packageTypeOpt: Option[PackageType] =
Expand Down
4 changes: 3 additions & 1 deletion modules/cli/src/main/scala/scala/cli/commands/Run.scala
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,15 @@ object Run extends ScalaCommand[RunOptions] {

override def sharedOptions(options: RunOptions) = Some(options.shared)

def run(options: RunOptions, args: RemainingArgs): Unit =
def run(options: RunOptions, args: RemainingArgs): Unit = {
maybePrintGroupHelp(options)
run(
options,
args.remaining,
args.unparsed,
() => Inputs.default()
)
}

def run(
options: RunOptions,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,11 @@ abstract class ScalaCommand[T](implicit parser: Parser[T], help: Help[T])
parent.argument(prefix, state)
}
}

def maybePrintGroupHelp(options: T): Unit =
for (shared <- sharedOptions(options))
shared.helpGroups.maybePrintGroupHelp(help)

override def helpFormat =
HelpFormat.default()
.withSortedGroups(Some(Seq(
Expand All @@ -101,6 +106,10 @@ abstract class ScalaCommand[T](implicit parser: Parser[T], help: Help[T])
"Miscellaneous",
""
)))
.withHiddenGroups(Some(Seq(
"Scala.JS",
"Scala Native"
)))
.withTerminalWidthOpt {
if (Properties.isWin)
if (coursier.paths.Util.useJni())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import scala.build.options
final case class ScalaJsOptions(

@Group("Scala")
@HelpMessage("Enable Scala.JS")
@HelpMessage("Enable Scala.JS. To show more options for Scala.Js pass `--help-js`")
js: Boolean = false,

@Group("Scala.JS")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import scala.build.options
final case class ScalaNativeOptions(

@Group("Scala")
@HelpMessage("Enable Scala Native")
@HelpMessage("Enable Scala Native. To show more options for Scala Native pass `--help-native`")
native: Boolean = false,

@Group("Scala Native")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,8 @@ final case class SharedOptions(
defaultForbiddenDirectories: Boolean = true,
@Hidden
forbid: List[String] = Nil,
@Recurse
helpGroups: HelpGroupOptions = HelpGroupOptions()
) {
// format: on

Expand Down
1 change: 1 addition & 0 deletions modules/cli/src/main/scala/scala/cli/commands/Test.scala
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ object Test extends ScalaCommand[TestOptions] {
private def reset = Console.RESET

def run(options: TestOptions, args: RemainingArgs): Unit = {
maybePrintGroupHelp(options)
CurrentParams.verbosity = options.shared.logging.verbosity
val inputs = options.shared.inputsOrExit(args)
CurrentParams.workspaceOpt = Some(inputs.workspace)
Expand Down
13 changes: 13 additions & 0 deletions modules/cli/src/test/scala/cli/tests/HelpCheck.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package cli.tests

import scala.cli.ScalaCli

class HelpCheck extends munit.FunSuite {

test("help message should be shorter then 80 lines") {
val helpMessage = ScalaCli.help.help(ScalaCli.helpFormat)

val lines = helpMessage.split("\r\n|\r|\n").length
assert(lines <= 80)
}
}
30 changes: 28 additions & 2 deletions website/docs/reference/cli-options.md
Original file line number Diff line number Diff line change
Expand Up @@ -362,6 +362,32 @@ Aliases: `--full-help`

Print help message, including hidden options, and exit

## Help group options

Available in commands:
- [`bsp`](./commands.md#bsp)
- [`compile`](./commands.md#compile)
- [`export`](./commands.md#export)
- [`fmt` / `format` / `scalafmt`](./commands.md#fmt)
- [`browse` / `metabrowse`](./commands.md#browse)
- [`package`](./commands.md#package)
- [`console` / `repl`](./commands.md#console)
- [`run`](./commands.md#run)
- [`setup-ide`](./commands.md#setup-ide)
- [`shebang`](./commands.md#shebang)
- [`test`](./commands.md#test)


<!-- Automatically generated, DO NOT EDIT MANUALLY -->

#### `--help-js`

Show options for ScalaJS

#### `--help-native`

Show options for ScalaNative

## Install completions options

Available in commands:
Expand Down Expand Up @@ -779,7 +805,7 @@ Available in commands:

#### `--js`

Enable Scala.JS
Enable Scala.JS. To show more options for Scala.Js pass `--help-js`

#### `--js-version`

Expand Down Expand Up @@ -823,7 +849,7 @@ Available in commands:

#### `--native`

Enable Scala Native
Enable Scala Native. To show more options for Scala Native pass `--help-native`

#### `--native-version`

Expand Down
Loading