如何在 SBT 中选择性地添加编译器插件

How to optionally add a compiler plugin in SBT

我有一个依赖于 https://github.com/typelevel/kind-projector 的项目,目前针对 scala 2.12 和 2.13 进行交叉编译,我想添加对 scala 3.0 的支持。但是,kind-projector 在 scala 3.0 上不可用,因为它启用的语法是本机 scala 3 语法的一部分。

之前,我使用这个设置来添加编译器插件:

addCompilerPlugin("org.typelevel" % "kind-projector" % "0.11.3" cross CrossVersion.full)

现在,如果 scalaVersion 是 3.0.0,我将尝试禁用该设置。

我得到的最接近的是

Def.setting {
    scalaVersion.value match {
        case "3.0.0" => new Def.SettingList(Nil)
        case _ => Seq(
            addCompilerPlugin("org.typelevel" % "kind-projector" % "0.11.3" cross CrossVersion.full)
        )
    }
}

但类型不正确(这是一个 Initialize 但它需要是一个 Setting)。

如何根据 scala 版本有条件地禁用编译器插件?

addCompilerPluginlibraryDependencies += compilerPlugin(dependency)

的快捷方式

因此,它应该可以像这样工作

libraryDependencies ++= {
  scalaVersion.value match {
    case "3.0.0" =>
      Nil
    case _ =>
      List(compilerPlugin("org.typelevel" % "kind-projector" % "0.11.3" cross CrossVersion.full))
  }
}

虽然可能有更好的方法。


原始答案无效,因为 scalaVersion.value 在此上下文中不可用:

scalaVersion.value match {
  case "3.0.0" =>
    new Def.SettingList(Nil)
  case _ => 
    addCompilerPlugin("org.typelevel" % "kind-projector" % "0.11.3" cross CrossVersion.full)
}