。
我希望我的scalacSettings
在发出自己的命令validate
时更严格(更 linting)。
实现这一目标的最佳方法是什么?
一个新的范围(strict
)确实有效,但是当你发出test
时,它需要编译项目两次。所以这不是一个选择。
SBT 自定义命令允许临时修改构建状态,该状态可以在命令完成后丢弃:
def validate: Command = Command.command("validate") { state =>
import Project._
val stateWithStrictScalacSettings =
extract(state).appendWithSession(
Seq(Compile / scalacOptions ++= Seq(
"-Ywarn-unused:imports",
"-Xfatal-warnings",
"...",
))
,state
)
val (s, _) = extract(stateWithStrictScalacSettings).runTask(Test / test, stateWithStrictScalacSettings)
s
}
commands ++= Seq(validate)
或者更简洁地使用::
方便的方法进行State
转换:
commands += Command.command("validate") { state =>
"""set scalacOptions in Compile := Seq("-Ywarn-unused:imports", "-Xfatal-warnings", "...")""" ::
"test" :: state
}
这样,我们可以在开发过程中使用sbt test
,而我们的CI则钩接到使用stateWithStrictScalacSettings
的sbt validate