条件缩放设置/设置键

  • 本文关键字:设置 条件 缩放 sbt
  • 更新时间 :
  • 英文 :


我希望我的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则钩接到使用stateWithStrictScalacSettingssbt validate

最新更新