Вот мой код плагина.Он определяет основную задачу lint
, которая запускается из интерфейса командной строки следующим образом: sbt api/lint jobs/lint
.Он вызывает некоторые специфичные для проекта линтеры и некоторые линтеры всей сборки.Линтер во всей сборке запускает scalafix, но если я вызываю lint
несколько раз из CLI, как указано выше (для нескольких проектов), то scalafix запускается несколько раз.
Как сделать scalafix (и scalafixLinter
) запускать только один раз для данного sbt
вызова?Я думал, что sbt кеширует результаты задачи, но, похоже, здесь не работает.
object LinterPlugin extends AutoPlugin {
object autoImport {
lazy val scalafixLinter = taskKey[Unit]("Run scalafix on all scala code")
lazy val lint = taskKey[Unit]("Run all linters")
}
override val buildSettings = Seq(
scalafixLinter := {
Def.taskDyn {
if (...) {
Def.task {
// run scalafix
(Compile / scalafix).toTask("").value
(Test / scalafix).toTask("").value
}
} else {
Def.task {}
}
}.all(ScopeFilter(inAnyProject)).value // run on all projects
}
)
override val projectSettings = Seq(
lint := {
// run all the linters
otherLinters.value
scalafixLinter.value
}
)
}