From 06548696bfe226b16d2ef479d8487d150e405684 Mon Sep 17 00:00:00 2001 From: Matt Dziuban Date: Fri, 5 Jan 2024 12:05:19 -0500 Subject: [PATCH 1/4] Add a `consoleScalacOptions` target. --- scalalib/src/mill/scalalib/ScalaModule.scala | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/scalalib/src/mill/scalalib/ScalaModule.scala b/scalalib/src/mill/scalalib/ScalaModule.scala index db90473e92a..d85481c1270 100644 --- a/scalalib/src/mill/scalalib/ScalaModule.scala +++ b/scalalib/src/mill/scalalib/ScalaModule.scala @@ -432,6 +432,11 @@ trait ScalaModule extends JavaModule with TestModule.ScalaModuleBase { outer => } + /** + * Command-line options to pass to the Scala console + */ + def consoleScalacOptions: T[Seq[String]] = T(Seq.empty[String]) + /** * Opens up a Scala console with your module and all dependencies present, * for you to test and operate your code interactively. @@ -452,7 +457,7 @@ trait ScalaModule extends JavaModule with TestModule.ScalaModuleBase { outer => ), jvmArgs = forkArgs(), envArgs = forkEnv(), - mainArgs = Seq("-usejavacp"), + mainArgs = (Seq("-usejavacp") ++ consoleScalacOptions()).distinct, workingDir = forkWorkingDir() ) } From c377d1d347120d7dfc3c9dd87a3a70a4fd6dc38a Mon Sep 17 00:00:00 2001 From: Matt Dziuban Date: Fri, 5 Jan 2024 12:15:13 -0500 Subject: [PATCH 2/4] Update documentation. --- docs/modules/ROOT/pages/Scala_Module_Config.adoc | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/docs/modules/ROOT/pages/Scala_Module_Config.adoc b/docs/modules/ROOT/pages/Scala_Module_Config.adoc index b583d04d972..eb85edd9a56 100644 --- a/docs/modules/ROOT/pages/Scala_Module_Config.adoc +++ b/docs/modules/ROOT/pages/Scala_Module_Config.adoc @@ -118,7 +118,21 @@ for details. All ``ScalaModule``s have a `console` and a `repl` target, to start a Scala console or an Ammonite Repl. -To use the latter, you can (and sometimes need to) customize the Ammonite version to work with your selected Scala version. +When using the `console`, you can configure its `scalac` options using the `consoleScalacOptions` target. + +For example, you may want to inherit all of your regular `scalacOptions` but disable `-Xfatal-warnings`: + +.Example: Using `consoleScalacOptions` to disable fatal warnings +[source,scala,subs="attributes,verbatim"] +---- +import mill._, scalalib._ + +object foo extends ScalaModule { + def consoleScalacOptions = scalacOptions().filterNot(o => o == "-Xfatal-warnings") +} +---- + +To use the `repl`, you can (and sometimes need to) customize the Ammonite version to work with your selected Scala version. Mill provides a default Ammonite version, but depending on the Scala version you are using, there may be no matching Ammonite release available. In order to start the repl, you may have to specify a different available Ammonite version. From 87de68daddaa93a9213e62e83c2040398fb89429 Mon Sep 17 00:00:00 2001 From: Matt Dziuban Date: Wed, 10 Jan 2024 11:22:19 -0500 Subject: [PATCH 3/4] Move `-usejavacp` to `consoleScalacOptions`, remove `.distinct`. --- scalalib/src/mill/scalalib/ScalaModule.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scalalib/src/mill/scalalib/ScalaModule.scala b/scalalib/src/mill/scalalib/ScalaModule.scala index d85481c1270..f7efb1f4097 100644 --- a/scalalib/src/mill/scalalib/ScalaModule.scala +++ b/scalalib/src/mill/scalalib/ScalaModule.scala @@ -435,7 +435,7 @@ trait ScalaModule extends JavaModule with TestModule.ScalaModuleBase { outer => /** * Command-line options to pass to the Scala console */ - def consoleScalacOptions: T[Seq[String]] = T(Seq.empty[String]) + def consoleScalacOptions: T[Seq[String]] = T(Seq("-usejavacp")) /** * Opens up a Scala console with your module and all dependencies present, @@ -457,7 +457,7 @@ trait ScalaModule extends JavaModule with TestModule.ScalaModuleBase { outer => ), jvmArgs = forkArgs(), envArgs = forkEnv(), - mainArgs = (Seq("-usejavacp") ++ consoleScalacOptions()).distinct, + mainArgs = consoleScalacOptions(), workingDir = forkWorkingDir() ) } From 74d55852890922fa66ee92e7eb8d45a3de0556f9 Mon Sep 17 00:00:00 2001 From: Matt Dziuban Date: Wed, 10 Jan 2024 12:56:13 -0500 Subject: [PATCH 4/4] Ensure `-usejavacp` is always passed, filter it out of user supplied options. --- scalalib/src/mill/scalalib/ScalaModule.scala | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/scalalib/src/mill/scalalib/ScalaModule.scala b/scalalib/src/mill/scalalib/ScalaModule.scala index f7efb1f4097..da7eed4b6c8 100644 --- a/scalalib/src/mill/scalalib/ScalaModule.scala +++ b/scalalib/src/mill/scalalib/ScalaModule.scala @@ -435,7 +435,7 @@ trait ScalaModule extends JavaModule with TestModule.ScalaModuleBase { outer => /** * Command-line options to pass to the Scala console */ - def consoleScalacOptions: T[Seq[String]] = T(Seq("-usejavacp")) + def consoleScalacOptions: T[Seq[String]] = T(Seq.empty[String]) /** * Opens up a Scala console with your module and all dependencies present, @@ -445,6 +445,7 @@ trait ScalaModule extends JavaModule with TestModule.ScalaModuleBase { outer => if (!Util.isInteractive()) { Result.Failure("console needs to be run with the -i/--interactive flag") } else { + val useJavaCp = "-usejavacp" SystemStreams.withStreams(SystemStreams.original) { Jvm.runSubprocess( mainClass = @@ -457,7 +458,7 @@ trait ScalaModule extends JavaModule with TestModule.ScalaModuleBase { outer => ), jvmArgs = forkArgs(), envArgs = forkEnv(), - mainArgs = consoleScalacOptions(), + mainArgs = Seq(useJavaCp) ++ consoleScalacOptions().filterNot(Set(useJavaCp)), workingDir = forkWorkingDir() ) }