Skip to content

Commit adf2977

Browse files
committed
Add default values to help messages
1 parent e05753b commit adf2977

File tree

16 files changed

+128
-31
lines changed

16 files changed

+128
-31
lines changed

build.sc

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -650,6 +650,31 @@ trait CliOptions extends SbtModule with ScalaCliPublishModule {
650650
private def scalaVer = Scala.scala213
651651
def scalaVersion = scalaVer
652652
def repositories = super.repositories ++ customRepositories
653+
654+
def constantsFile = T.persistent {
655+
val dir = T.dest / "constants"
656+
val dest = dir / "Constants.scala"
657+
val code =
658+
s"""package scala.cli.commands
659+
|
660+
|/** Build-time constants. Generated by mill. */
661+
|object Constants {
662+
| def defaultScalaVersion = "${Scala.defaultUser}"
663+
| def scalaJsVersion = "${Scala.scalaJs}"
664+
| def scalaJsCliVersion = "${InternalDeps.Versions.scalaJsCli}"
665+
| def scalaNativeVersion = "${Deps.nativeTools.dep.version}"
666+
| def ammoniteVersion = "${Deps.ammonite.dep.version}"
667+
| def defaultScalafmtVersion = "${Deps.scalafmtCli.dep.version}"
668+
| def defaultGraalVMJavaVersion = "${deps.graalVmJavaVersion}"
669+
| def defaultGraalVMVersion = "${deps.graalVmVersion}"
670+
| def scalaPyVersion = "${Deps.scalaPy.dep.version}"
671+
|}
672+
|""".stripMargin
673+
if (!os.isFile(dest) || os.read(dest) != code)
674+
os.write.over(dest, code, createFolders = true)
675+
PathRef(dir)
676+
}
677+
def generatedSources = super.generatedSources() ++ Seq(constantsFile())
653678
}
654679

655680
trait Cli extends SbtModule with ProtoBuildModule with CliLaunchers
@@ -866,6 +891,12 @@ trait CliIntegration extends SbtModule with ScalaCliPublishModule with HasTests
866891
| def scala3 = "${Scala.scala3}"
867892
| def defaultScala = "${Scala.defaultUser}"
868893
| def defaultScalafmtVersion = "${Deps.scalafmtCli.dep.version}"
894+
| def scalaJsVersion = "${Scala.scalaJs}"
895+
| def scalaNativeVersion = "${Deps.nativeTools.dep.version}"
896+
| def ammoniteVersion = "${Deps.ammonite.dep.version}"
897+
| def defaultGraalVMJavaVersion = "${deps.graalVmJavaVersion}"
898+
| def defaultGraalVMVersion = "${deps.graalVmVersion}"
899+
| def scalaPyVersion = "${Deps.scalaPy.dep.version}"
869900
| def bloopVersion = "${Deps.bloopConfig.dep.version}"
870901
| def pprintVersion = "${TestDeps.pprint.dep.version}"
871902
| def munitVersion = "${TestDeps.munit.dep.version}"

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package scala.cli.commands
22

33
import caseapp.*
44

5+
import scala.cli.commands.Constants
56
import scala.cli.commands.common.HasSharedOptions
67

78
// format: off
@@ -57,7 +58,7 @@ final case class FmtOptions(
5758
@Name("dialect")
5859
scalafmtDialect: Option[String] = None,
5960
@Group("Format")
60-
@HelpMessage("Pass scalafmt version before running it. This overrides whatever value is configured in the .scalafmt.conf file.")
61+
@HelpMessage(s"Pass scalafmt version before running it (${Constants.defaultScalafmtVersion} by default). If passed, this overrides whatever value is configured in the .scalafmt.conf file.")
6162
@Name("fmtVersion")
6263
scalafmtVersion: Option[String] = None
6364
) extends HasSharedOptions

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package scala.cli.commands
22

33
import caseapp.{Group, Help, HelpMessage, Name, Parser, ValueDescription}
44

5+
import scala.cli.commands.Constants
6+
57
// format: off
68
final case class PackagerOptions(
79
@HelpMessage("Set the version of the generated package")
@@ -107,11 +109,11 @@ final case class PackagerOptions(
107109
dockerImageTag: Option[String] = None,
108110

109111
@Group("Native image")
110-
@HelpMessage("GraalVM Java major version to use to build GraalVM native images (like 17)")
112+
@HelpMessage(s"GraalVM Java major version to use to build GraalVM native images (${Constants.defaultGraalVMJavaVersion} by default)")
111113
@ValueDescription("java-major-version")
112114
graalvmJavaVersion: Option[Int] = None,
113115
@Group("Native image")
114-
@HelpMessage("GraalVM version to use to build GraalVM native images (like 22.0.0)")
116+
@HelpMessage(s"GraalVM version to use to build GraalVM native images (${Constants.defaultGraalVMVersion} by default)")
115117
@ValueDescription("version")
116118
graalvmVersion: Option[String] = None,
117119
@Group("Native image")

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import caseapp.*
44
import com.github.plokhotnyuk.jsoniter_scala.core.*
55
import com.github.plokhotnyuk.jsoniter_scala.macros.*
66

7+
import scala.cli.commands.Constants
8+
79
// format: off
810
final case class ScalaJsOptions(
911

@@ -12,7 +14,7 @@ final case class ScalaJsOptions(
1214
js: Boolean = false,
1315

1416
@Group("Scala.js")
15-
@HelpMessage("The Scala.js version")
17+
@HelpMessage(s"The Scala.js version (${Constants.scalaJsVersion} by default).")
1618
jsVersion: Option[String] = None,
1719
@Group("Scala.js")
1820
@HelpMessage("The Scala.js mode, either `dev` or `release`")
@@ -61,7 +63,7 @@ final case class ScalaJsOptions(
6163
@Hidden
6264
jsLinkerPath: Option[String] = None,
6365
@Group("Scala.js")
64-
@HelpMessage("Scala.js CLI version to use for linking")
66+
@HelpMessage(s"Scala.js CLI version to use for linking (${Constants.scalaJsCliVersion} by default).")
6567
@ValueDescription("version")
6668
@Hidden
6769
jsCliVersion: Option[String] = None,

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import caseapp.*
44
import com.github.plokhotnyuk.jsoniter_scala.core.*
55
import com.github.plokhotnyuk.jsoniter_scala.macros.*
66

7+
import scala.cli.commands.Constants
8+
79
// format: off
810
final case class ScalaNativeOptions(
911

@@ -12,7 +14,7 @@ final case class ScalaNativeOptions(
1214
native: Boolean = false,
1315

1416
@Group("Scala Native")
15-
@HelpMessage("Set the Scala Native version")
17+
@HelpMessage(s"Set the Scala Native version (${Constants.scalaNativeVersion} by default).")
1618
nativeVersion: Option[String] = None,
1719
@Group("Scala Native")
1820
@HelpMessage("Set Scala Native compilation mode")

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import caseapp.core.help.Help
55
import com.github.plokhotnyuk.jsoniter_scala.core.*
66
import com.github.plokhotnyuk.jsoniter_scala.macros.*
77

8+
import scala.cli.commands.Constants
89
import scala.cli.commands.common.HasLoggingOptions
910

1011
// format: off
@@ -31,7 +32,7 @@ final case class SharedOptions(
3132
workspace: SharedWorkspaceOptions = SharedWorkspaceOptions(),
3233

3334
@Group("Scala")
34-
@HelpMessage("Set the Scala version")
35+
@HelpMessage(s"Set the Scala version (${Constants.defaultScalaVersion} by default)")
3536
@ValueDescription("version")
3637
@Name("scala")
3738
@Name("S")

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,16 @@ package scala.cli.commands
22

33
import caseapp.*
44

5+
import scala.cli.commands.Constants
6+
57
// format: off
68
final case class SharedPythonOptions(
79
@HelpMessage("[experimental] Set Java options so that Python can be loaded")
810
pythonSetup: Option[Boolean] = None,
911
@HelpMessage("[experimental] Enable Python support via ScalaPy")
1012
@ExtraName("py")
1113
python: Option[Boolean] = None,
12-
@HelpMessage("[experimental] Set ScalaPy version")
14+
@HelpMessage(s"[experimental] Set ScalaPy version (${Constants.scalaPyVersion} by default)")
1315
@ExtraName("scalapyVersion")
1416
scalaPyVersion: Option[String] = None
1517
)

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package scala.cli.commands
33
import caseapp.*
44
import caseapp.core.help.Help
55

6+
import scala.cli.commands.Constants
7+
68
// format: off
79
final case class SharedReplOptions(
810
@Recurse
@@ -21,7 +23,7 @@ final case class SharedReplOptions(
2123
ammonite: Option[Boolean] = None,
2224

2325
@Group("Repl")
24-
@HelpMessage("[restricted] Set the Ammonite version")
26+
@HelpMessage(s"[restricted] Set the Ammonite version (${Constants.ammoniteVersion} by default)")
2527
@Name("ammoniteVer")
2628
ammoniteVersion: Option[String] = None,
2729

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package scala.cli.integration
22

33
import com.eed3si9n.expecty.Expecty.expect
44

5+
import scala.cli.integration.TestUtil.removeAnsiColors
6+
57
class FmtTests extends ScalaCliSuite {
68

79
override def group: ScalaCliSuite.TestGroup = ScalaCliSuite.TestGroup.First
@@ -207,4 +209,13 @@ class FmtTests extends ScalaCliSuite {
207209
expect(updatedContent == expectedSimpleInputsFormattedContent)
208210
}
209211
}
212+
213+
test("default values in help") {
214+
TestInputs.empty.fromRoot { root =>
215+
val res = os.proc(TestUtil.cli, "fmt", "--help").call(cwd = root)
216+
val lines = removeAnsiColors(res.out.trim()).linesIterator.toVector
217+
val fmtVersionHelp = lines.find(_.contains("--fmt-version")).getOrElse("")
218+
expect(fmtVersionHelp.contains(s"(${Constants.defaultScalafmtVersion} by default)"))
219+
}
220+
}
210221
}

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import java.util
99
import java.util.regex.Pattern
1010
import java.util.zip.ZipFile
1111

12+
import scala.cli.integration.TestUtil.removeAnsiColors
1213
import scala.jdk.CollectionConverters.*
1314
import scala.util.{Properties, Using}
1415

@@ -878,4 +879,19 @@ abstract class PackageTestDefinitions(val scalaVersionOpt: Option[String])
878879
test("pass java options to docker") {
879880
javaOptionsDockerTest()
880881
}
882+
883+
test("default values in help") {
884+
TestInputs.empty.fromRoot { root =>
885+
val res = os.proc(TestUtil.cli, "package", extraOptions, "--help").call(cwd = root)
886+
val lines = removeAnsiColors(res.out.trim()).linesIterator.toVector
887+
888+
val graalVmVersionHelp = lines.find(_.contains("--graalvm-version")).getOrElse("")
889+
val graalVmJavaVersionHelp = lines.find(_.contains("--graalvm-java-version")).getOrElse("")
890+
891+
expect(graalVmVersionHelp.contains(s"(${Constants.defaultGraalVMVersion} by default)"))
892+
expect(
893+
graalVmJavaVersionHelp.contains(s"(${Constants.defaultGraalVMJavaVersion} by default)")
894+
)
895+
}
896+
}
881897
}

0 commit comments

Comments
 (0)