Skip to content

Commit

Permalink
Fixes after review
Browse files Browse the repository at this point in the history
  • Loading branch information
lwronski committed Jan 18, 2022
1 parent 36ff9f1 commit a82515e
Show file tree
Hide file tree
Showing 7 changed files with 46 additions and 77 deletions.
17 changes: 14 additions & 3 deletions modules/cli/src/main/scala/scala/cli/ScalaCli.scala
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import java.nio.file.InvalidPathException

import scala.cli.commands._
import scala.cli.internal.Argv0
import scala.cli.launcher.LauncherCLI
import scala.cli.launcher.{LauncherCLI, LauncherOptions}
import scala.util.Properties

object ScalaCli extends CommandsEntryPoint {
Expand Down Expand Up @@ -46,7 +46,8 @@ object ScalaCli extends CommandsEntryPoint {
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'."
"""|To run another Scala CLI version, pass '--cli-version' at the beginning of the argument list. 'scala-cli --cli-version <versions> args'.
|See 'scala-cli <command> --help' to read about a specific subcommand. To see full help run 'scala-cli <command> --help-full'.""".stripMargin
final override def defaultCommand = Some(actualDefaultCommand)

// FIXME Report this in case-app default NameFormatter
Expand Down Expand Up @@ -139,7 +140,17 @@ object ScalaCli extends CommandsEntryPoint {
}

private def main0(args: Array[String]): Unit = {
LauncherCLI.main(args)
LauncherOptions.parser.stopAtFirstUnrecognized.parse(args) match {
case Left(e) =>
System.err.println(e.message)
sys.exit(1)
case Right((launcherOpts, args0)) =>
launcherOpts.cliVersion.map(_.trim).filter(_.nonEmpty) match {
case Some(ver) =>
LauncherCLI.runAndExit(ver, launcherOpts, args0)
case None =>
}
}
val (systemProps, scalaCliArgs) = partitionArgs(args)
setSystemProps(systemProps)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import scala.build.blooprifle.BloopRifleConfig
import scala.build.internal.{Constants, OsLibc}
import scala.build.options._
import scala.build.{Inputs, LocalRepo, Logger, Os, Position, Positioned}
import scala.cli.launcher.LauncherOptions
import scala.concurrent.duration._
import scala.util.Properties
// format: off
Expand Down Expand Up @@ -102,9 +101,7 @@ final case class SharedOptions(
@Hidden
forbid: List[String] = Nil,
@Recurse
helpGroups: HelpGroupOptions = HelpGroupOptions(),
@Recurse
launcherOptions: LauncherOptions = LauncherOptions()
helpGroups: HelpGroupOptions = HelpGroupOptions()
) {
// format: on

Expand Down
34 changes: 14 additions & 20 deletions modules/cli/src/main/scala/scala/cli/launcher/LauncherCLI.scala
Original file line number Diff line number Diff line change
@@ -1,23 +1,17 @@
package scala.cli.launcher

import caseapp.core.RemainingArgs
import dependency._

import scala.build.internal.Runner
import scala.build.options.BuildOptions
import scala.build.internal.{OsLibc, Runner}
import scala.build.options.{BuildOptions, JavaOptions}
import scala.build.{Artifacts, Positioned}
import scala.cli.commands.{LoggingOptions, ScalaCommand}

object LauncherCLI extends ScalaCommand[LauncherOptions] {
import scala.cli.commands.LoggingOptions

override def ignoreUnrecognized: Boolean = true
override def hasHelp: Boolean = false
override def hasFullHelp: Boolean = false
object LauncherCLI {

def run(version: String, options: LauncherOptions, remainingArgs: RemainingArgs): Unit = {
def runAndExit(version: String, options: LauncherOptions, remainingArgs: Seq[String]) = {

val logger = LoggingOptions().logger
val scalaVersion = options.publishedScalaVersion.getOrElse("2.12")
val scalaVersion = options.cliScalaVersion.getOrElse("2.12")

val scalaCliDependency = Seq(dep"org.virtuslab.scala-cli:cli_$scalaVersion:$version")
val snapshotsRepo =
Expand All @@ -42,24 +36,24 @@ object LauncherCLI extends ScalaCommand[LauncherOptions] {
f.toPath.toFile
}

val buildOptions = BuildOptions()
val buildOptions = BuildOptions(
javaOptions = JavaOptions(
jvmIdOpt = Some(OsLibc.baseDefaultJvm(OsLibc.jvmIndexOs, "17"))
)
)

val exitCode =
Runner.runJvm(
buildOptions.javaHome().value.javaCommand,
buildOptions.javaOptions.javaOpts.map(_.value),
scalaCli,
"scala.cli.ScalaCli",
remainingArgs.remaining ++ Seq("--") ++ remainingArgs.unparsed,
logger
remainingArgs,
logger,
allowExecve = true
)

sys.exit(exitCode)
}

override def run(options: LauncherOptions, remainingArgs: RemainingArgs): Unit = {
for {
scv <- options.scalaCliVersion
} run(scv, options, remainingArgs)
}
}
Original file line number Diff line number Diff line change
@@ -1,21 +1,20 @@
package scala.cli.launcher

import caseapp._
import upickle.default.{ReadWriter, macroRW}

@HelpMessage("Set the ScalaCLI version")
@HelpMessage("Run another Scala CLI version")
final case class LauncherOptions(
@Group("Launcher")
scalaCliVersion: Option[String] = None,
@HelpMessage("Set the Scala CLI version")
cliVersion: Option[String] = None,
@Group("Launcher")
@HelpMessage("The version of Scala on which scalaCLI was published")
@HelpMessage("The version of Scala on which Scala CLI was published")
@ValueDescription("2.12|2.13|3")
publishedScalaVersion: Option[String] = None
cliScalaVersion: Option[String] = None
)

object LauncherOptions {
lazy val parser: Parser[LauncherOptions] = Parser.derive
implicit lazy val parserAux: Parser.Aux[LauncherOptions, parser.D] = parser
implicit lazy val help: Help[LauncherOptions] = Help.derive
implicit lazy val jsonCodec: ReadWriter[LauncherOptions] = macroRW
}
21 changes: 12 additions & 9 deletions website/docs/commands/basics.md
Original file line number Diff line number Diff line change
Expand Up @@ -181,20 +181,23 @@ echo 'println("Hello")' | scala-cli -
# Hello
```

## ScalaCLI version
## Scala CLI version

`scala-cli` can also run the other version of `scala-cli`, it may be helpful to test unreleased scala-cli functionality.

```bash ignore
scala-cli about
# Scala CLI version 0.0.9 (v0.0.9)
```
`scala-cli` can also run another Scala CLI version, which can be helpful to test unreleased yet Scala CLI functionality.
The Scala CLI version parameter `--cli-version` must be passed at the beginning of the argument list.
:::warning
Running another Scala CLI version might be slower because it uses JVM-based Scala CLI launcher.
:::

```bash ignore
scala-cli about --scala-cli-version 0.0.9+131-gf0ab5c40-SNAPSHOT
```bash
scala-cli --cli-version 0.0.9+131-gf0ab5c40-SNAPSHOT about
# Scala CLI version 0.0.9+131-gf0ab5c40-SNAPSHOT (v0.0.9-131-f0ab5c)
```

<!-- Expected:
Scala CLI version 0.0.9+131-gf0ab5c40-SNAPSHOT (v0.0.9-131-f0ab5c)
-->

## Process substitution

Lastly, `scala-cli` also accepts input via shell process substitution:
Expand Down
24 changes: 0 additions & 24 deletions website/docs/reference/cli-options.md
Original file line number Diff line number Diff line change
Expand Up @@ -524,30 +524,6 @@ Operating system to use when looking up in the JVM index

CPU architecture to use when looking up in the JVM index

## Launcher 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 -->

#### `--scala-cli-version`

#### `--published-scala-version`

The version of Scala on which scalaCLI was published

## Logging options

Available in commands:
Expand Down
11 changes: 0 additions & 11 deletions website/docs/reference/commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ Accepts options:
- [directories](./cli-options.md#directories-options)
- [help group](./cli-options.md#help-group-options)
- [jvm](./cli-options.md#jvm-options)
- [launcher](./cli-options.md#launcher-options)
- [logging](./cli-options.md#logging-options)
- [Scala.JS](./cli-options.md#scalajs-options)
- [Scala Native](./cli-options.md#scala-native-options)
Expand All @@ -54,7 +53,6 @@ Accepts options:
- [export](./cli-options.md#export-options)
- [help group](./cli-options.md#help-group-options)
- [jvm](./cli-options.md#jvm-options)
- [launcher](./cli-options.md#launcher-options)
- [logging](./cli-options.md#logging-options)
- [main class](./cli-options.md#main-class-options)
- [Scala.JS](./cli-options.md#scalajs-options)
Expand All @@ -79,7 +77,6 @@ Accepts options:
- [fmt](./cli-options.md#fmt-options)
- [help group](./cli-options.md#help-group-options)
- [jvm](./cli-options.md#jvm-options)
- [launcher](./cli-options.md#launcher-options)
- [logging](./cli-options.md#logging-options)
- [Scala.JS](./cli-options.md#scalajs-options)
- [Scala Native](./cli-options.md#scala-native-options)
Expand Down Expand Up @@ -120,7 +117,6 @@ Accepts options:
- [help group](./cli-options.md#help-group-options)
- [java](./cli-options.md#java-options)
- [jvm](./cli-options.md#jvm-options)
- [launcher](./cli-options.md#launcher-options)
- [logging](./cli-options.md#logging-options)
- [repl](./cli-options.md#repl-options)
- [Scala.JS](./cli-options.md#scalajs-options)
Expand All @@ -142,7 +138,6 @@ Accepts options:
- [directories](./cli-options.md#directories-options)
- [help group](./cli-options.md#help-group-options)
- [jvm](./cli-options.md#jvm-options)
- [launcher](./cli-options.md#launcher-options)
- [logging](./cli-options.md#logging-options)
- [main class](./cli-options.md#main-class-options)
- [package](./cli-options.md#package-options)
Expand Down Expand Up @@ -174,7 +169,6 @@ Accepts options:
- [help group](./cli-options.md#help-group-options)
- [java](./cli-options.md#java-options)
- [jvm](./cli-options.md#jvm-options)
- [launcher](./cli-options.md#launcher-options)
- [logging](./cli-options.md#logging-options)
- [main class](./cli-options.md#main-class-options)
- [Scala.JS](./cli-options.md#scalajs-options)
Expand All @@ -196,7 +190,6 @@ Accepts options:
- [directories](./cli-options.md#directories-options)
- [help group](./cli-options.md#help-group-options)
- [jvm](./cli-options.md#jvm-options)
- [launcher](./cli-options.md#launcher-options)
- [logging](./cli-options.md#logging-options)
- [Scala.JS](./cli-options.md#scalajs-options)
- [Scala Native](./cli-options.md#scala-native-options)
Expand Down Expand Up @@ -241,7 +234,6 @@ Accepts options:
- [help group](./cli-options.md#help-group-options)
- [java](./cli-options.md#java-options)
- [jvm](./cli-options.md#jvm-options)
- [launcher](./cli-options.md#launcher-options)
- [logging](./cli-options.md#logging-options)
- [main class](./cli-options.md#main-class-options)
- [Scala.JS](./cli-options.md#scalajs-options)
Expand All @@ -264,7 +256,6 @@ Accepts options:
- [help group](./cli-options.md#help-group-options)
- [java](./cli-options.md#java-options)
- [jvm](./cli-options.md#jvm-options)
- [launcher](./cli-options.md#launcher-options)
- [logging](./cli-options.md#logging-options)
- [Scala.JS](./cli-options.md#scalajs-options)
- [Scala Native](./cli-options.md#scala-native-options)
Expand Down Expand Up @@ -328,7 +319,6 @@ Accepts options:
- [directories](./cli-options.md#directories-options)
- [help group](./cli-options.md#help-group-options)
- [jvm](./cli-options.md#jvm-options)
- [launcher](./cli-options.md#launcher-options)
- [logging](./cli-options.md#logging-options)
- [Scala.JS](./cli-options.md#scalajs-options)
- [Scala Native](./cli-options.md#scala-native-options)
Expand Down Expand Up @@ -366,7 +356,6 @@ Accepts options:
- [directories](./cli-options.md#directories-options)
- [help group](./cli-options.md#help-group-options)
- [jvm](./cli-options.md#jvm-options)
- [launcher](./cli-options.md#launcher-options)
- [logging](./cli-options.md#logging-options)
- [metabrowse](./cli-options.md#metabrowse-options)
- [Scala.JS](./cli-options.md#scalajs-options)
Expand Down

0 comments on commit a82515e

Please sign in to comment.