Sbt 条件缩放设置/设置键

Sbt 条件缩放设置/设置键,sbt,Sbt,当我发出自己的命令validate时,我希望我的scalacSettings更加严格(更加linting) 实现这一目标的最佳方式是什么 一个新的作用域(strict)确实有效,但在发布test时需要编译项目两次。所以这不是一个选择 SBT custom允许临时修改生成状态,该状态可在命令完成后丢弃: def validate: Command = Command.command("validate") { state => import Project._ val stateWi

当我发出自己的命令
validate
时,我希望我的
scalacSettings
更加严格(更加linting)

实现这一目标的最佳方式是什么

一个新的作用域(
strict
)确实有效,但在发布
test
时需要编译项目两次。所以这不是一个选择

SBT custom允许临时修改生成状态,该状态可在命令完成后丢弃:

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)
或者更简洁地使用方便的方法进行
状态
转换:

commands += Command.command("validate") { state =>
  """set scalacOptions in Compile := Seq("-Ywarn-unused:imports", "-Xfatal-warnings", "...")""" :: 
  "test" :: state
} 

通过这种方式,我们可以在开发过程中使用
sbt test
,而我们的CI则连接到
sbt validate
,它使用
stateWithStritScalacSettings

在validate++=Seq(…)中尝试过类似的
scalacSettings吗?这些信息有用吗?
validate
不是范围,但是命令别名:private def cmdAlias(name:String,commands:List[String])=addCommandAlias(name,s);${commands.mkString(“;”}”)cmdAlias(“validatecoraverage”,scalafmtCheckAlias++coverageAlias”)不确定别名的使用方式。您能否将
验证
转换为
任务
并重试?
验证
在我们运行内置CI时使用,应该严格执行。虽然开发编译设置时限制较少,因此不具有侵入性。我不想在开发一个新功能时被未使用的导入编译错误所困扰:-)我想要一个严格的编译变体我已经做到了:def strictCompile:Command=Command.Command(“strictCompile”){state=>val extracted=Project.extract(state)val ref=extracted.get(thisProjectRef)val s=extracted.appendWithoutSession(Seq(编译/缩放选项:=baseScalacSettings++strictScalacSettings),state)Project.extract(s).runAggregated(在ref中编译/编译,s)s}这是一个使用runAggregated(用于多个子模块)的实现。它可以编译,但不应用严格的编译设置设置项目轴,如下所示:
extracted.appendWithoutSession(Seq(ThisBuild/Compile/scalacOptions:=baseScalacSettings++stricscalacsettings),state)
I-see,smart。当您在
projectSettings
中使用它时,它不起作用
AutoPlugin
(SBT 1.x)是否有方法调试正在发生的事情<代码>sbt编译
显示它是一个命令,但不显示正在执行的操作。我还使用了
sbt clean debug strictCompile
,它应用了
baseScalacOptions
(正如在
projectSettings
中定义的那样),但是
strictScalacOptions
仍然被忽略。