Saya memiliki proyek yang bergantung pada https://github.com/typelevel/kind-projector dan saat ini dikompilasi silang terhadap scala 2.12 dan 2.13, dan saya ingin menambahkan dukungan untuk scala 3.0. Namun, kind-projector tidak tersedia pada scala 3.0 karena sintaks yang diaktifkannya adalah bagian dari sintaks scala 3 asli.

Sebelumnya, saya menggunakan pengaturan ini untuk menambahkan plugin compiler:

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

Sekarang, saya mencoba untuk menonaktifkan pengaturan itu jika scalaVersion adalah 3.0.0.

Yang paling dekat yang saya punya adalah

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)
        )
    }
}

Tetapi tipenya tidak berhasil (itu Initialize tetapi harus Setting).

Bagaimana saya bisa menonaktifkan plugin kompiler berdasarkan versi scala?

3
Dylan 18 Mei 2021, 05:04

1 menjawab

Jawaban Terbaik

addCompilerPlugin adalah jalan pintas untuk libraryDependencies += compilerPlugin(dependency)

Jadi, itu harus bekerja dengan sesuatu seperti ini

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

Mungkin ada cara yang lebih baik untuk melakukannya.


Jawaban asli yang tidak berfungsi karena scalaVersion.value tidak tersedia dalam konteks ini:

scalaVersion.value match {
  case "3.0.0" =>
    new Def.SettingList(Nil)
  case _ => 
    addCompilerPlugin("org.typelevel" % "kind-projector" % "0.11.3" cross CrossVersion.full)
}
2
Gaël J 18 Mei 2021, 12:25