如何覆盖console的ScalaOptions?
根据以下讨论,覆盖SBT控制台的如何覆盖console的ScalaOptions?,scala,sbt,Scala,Sbt,根据以下讨论,覆盖SBT控制台的scalacOptions对我不起作用: mybuild.sbt的内容如下: lazy val commonScalacOptions = Seq( "-deprecation", "-encoding", "UTF-8", "-feature", "-unchecked", "-Xfatal-warnings", "-Xlint:-missing-interpolator,_",
scalacOptions
对我不起作用:
mybuild.sbt
的内容如下:
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: _*)
当我运行SBT会话时,我可以看到-Ywarn unused imports
选项不是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
但是,尝试在我的一个源代码文件中使用未使用的导入运行控制台
,会导致意外错误:
> 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
错误似乎来自compile:compileIncremental
。当我显示compile:compileIncremental::scalacOptions
的内容时,我看到了我试图过滤掉的选项:
> 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
现在,如果我检查上述内容,它似乎是由compile:scalacOptions
提供的。我感到困惑的是,为什么在运行console
命令时没有使用compile:console::scalacOptions
中的编译器选项
我希望能够为
console
运行一组不那么严格的编译器选项,这种方式看起来相当简单。然而,我很难理解为什么现有的解决方案不再有效。有人能帮我把话说清楚吗?首先,scalacOptions在(编译,控制台)
这意味着将scalacOptions
设置为编译scala,您在控制台中输入
由于您的编译错误,这是由于在您转到Scala控制台之前,编译器将首先尝试编译当前项目,并且由于您已为编译设置了
Scala选项
,因此,因此,这个错误已经发生了。在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)
啊,谢谢你的澄清!因此,由于
console
调用了标准的compile:scalacOptions
,因此无法让它们与直接调用compile
时使用的选项不同。我想在这种情况下我想要的是一个更轻的risk:compile
或类似的东西,这样risk:console
就可以启动一个控制台会话,使用比console
更严格的编译器选项。