How do I override scalacOptions for console?

Viewed 638

Overriding scalacOptions for the SBT console does not work for me, based on the discussion at: In sbt, how do you override scalacOptions for console in all configurations?

The contents of my build.sbt are as follows:

    lazy val commonScalacOptions = Seq(
      "-deprecation",
      "-encoding", "UTF-8",
      "-feature",
      "-unchecked",
      "-Xfatal-warnings",
      "-Xlint:-missing-interpolator,_",
      "-Yinline-warnings",
      "-Yno-adapted-args",
      "-Ywarn-dead-code",
      "-Ywarn-numeric-widen",
      "-Ywarn-value-discard",
      "-Ywarn-unused-import",
      "-language:existentials",
      "-language:experimental.macros",
      "-language:implicitConversions",
      "-language:higherKinds",
      "-Xfuture")

    lazy val commonSettings = Seq(
      scalaVersion := "2.11.11",
      scalacOptions ++= commonScalacOptions,
      scalacOptions in (Compile, console)  := (scalacOptions in (Compile, console)).value filterNot ("-Ywarn-unused-import" == _),
      scalacOptions in (Test, console)     := (scalacOptions in (Compile, console)).value)

    lazy val root = Project("brontosaurus-rex", file("." + "brontosaurus-rex")).in(file("."))
      .settings(commonSettings: _*)

and when I run an SBT session, I can see that the -Ywarn-unused-imports option is not part of compile:console::scalacOptions

    > show compile:console::scalacOptions
    [info] * -deprecation
    [info] * -encoding
    [info] * UTF-8
    [info] * -feature
    [info] * -unchecked
    [info] * -Xfatal-warnings
    [info] * -Xlint:-missing-interpolator,_
    [info] * -Yinline-warnings
    [info] * -Yno-adapted-args
    [info] * -Ywarn-dead-code
    [info] * -Ywarn-numeric-widen
    [info] * -Ywarn-value-discard
    [info] * -language:existentials
    [info] * -language:experimental.macros
    [info] * -language:implicitConversions
    [info] * -language:higherKinds
    [info] * -Xfuture

However, attempting to run console with an unused import in one of my source code files, results in the unexpected error:

    > console
    [info] Compiling 1 Scala source to [PROJECT_DIR]/brontosaurus-rex/target/scala-2.11/classes...
    [error] [PROJECT_DIR]/brontosaurus-rex/src/main/scala/com/dinosaurs/BrontosaurusRex.scala:3: Unused import
    [error] import scala.util.matching.Regex
    [error]                            ^
    [error] one error found
    [error] (compile:compileIncremental) Compilation failed
    [error] Total time: 0 s, completed May 21, 2017 7:45:53 PM

It seems that the error is coming from compile:compileIncremental. When I show the contents of compile:compileIncremental::scalacOptions I see the option that I'm trying to filter out:

    > show compile:compileIncremental::scalacOptions
    [info] * -deprecation
    [info] * -encoding
    [info] * UTF-8
    [info] * -feature
    [info] * -unchecked
    [info] * -Xfatal-warnings
    [info] * -Xlint:-missing-interpolator,_
    [info] * -Yinline-warnings
    [info] * -Yno-adapted-args
    [info] * -Ywarn-dead-code
    [info] * -Ywarn-numeric-widen
    [info] * -Ywarn-value-discard
    [info] * -Ywarn-unused-import
    [info] * -language:existentials
    [info] * -language:experimental.macros
    [info] * -language:implicitConversions
    [info] * -language:higherKinds
    [info] * -Xfuture

Now, if I inspect the above, it appears to be provided by compile:scalacOptions. What I'm confused about is why the compiler options in compile:console::scalacOptions don't appear to be used when running the console command.

I'd like to be able to run a less strict set of compiler options for console and this way of doing it seems fairly straightforward. However, I'm stumped as to why the existing solution no longer works. Can anyone help set me straight here?

2 Answers

The following works on my side in SBT 1.3.2:

  val unusedImports = "-Ywarn-unused:imports"
  ...
  scalacOptions ++= Seq(
    unusedImports,
    "-Yrangepos",
    "-Ywarn-unused:privates"
  ),
  Compile / console / scalacOptions := (Compile / scalacOptions).value filterNot (_ eq unusedImports)
Related