Skip to content

Commit

Permalink
scalafixEnable: *latest* semanticdb for old scala
Browse files Browse the repository at this point in the history
When there is no semanticdb-scalac available for the build scala version for
the scalameta version that scalafix tracks, we can tell the user if it is
because it is no longer published or not yet published. When it is no longer
published, the latest version should not change, so we can use that one in a
repeatable manner, in order to maximize the chances of compatiblity.
  • Loading branch information
bjaglin committed Mar 24, 2022
1 parent 71e8b9f commit 012651c
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 19 deletions.
55 changes: 39 additions & 16 deletions src/main/scala/scalafix/sbt/ScalafixEnable.scala
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ object ScalafixEnable {
detail = """1. set semanticdbEnabled := true
|2. for scala 2.x,
| - set semanticdbCompilerPlugin to the scalameta version tracked by scalafix if available for scalaVersion,
| - otherwise set semanticdbCompilerPlugin to the earliest compatible version available for scalaVersion,
| - otherwise set semanticdbCompilerPlugin to a compatible version available for scalaVersion,
| - otherwise force scalaVersion to the latest version supported by the scalameta version tracked by scalafix.""".stripMargin
) { s =>
val extracted = Project.extract(s)
Expand Down Expand Up @@ -136,21 +136,44 @@ object ScalafixEnable {
semanticdbCompilerPlugin.value
.withRevision(recommendedSemanticdbV.toString)
)
case Success(earliestAvailable :: _) =>
Seq(
semanticdbCompilerPlugin := {
val v = earliestAvailable.toString
sLog.value.info(
s"Using semanticdb-scalac $v in project " +
s"${project.ref.project} since the version " +
s"${recommendedSemanticdbV} tracked by scalafix " +
s"${BuildInfo.scalafixVersion} is not available for " +
s"scala ${project.scalaVersion0.toString} - " +
s"consider upgrading sbt-scalafix or bumping scala"
)
semanticdbCompilerPlugin.value.withRevision(v)
}
)
case Success(earliestAvailable :: tail) =>
val futureVersion =
SemanticSelector.apply(s">${recommendedSemanticdbV}")
if (earliestAvailable.matchesSemVer(futureVersion)) {
Seq(
semanticdbCompilerPlugin := {
val v = earliestAvailable.toString
sLog.value.info(
s"Using semanticdb-scalac $v in project " +
s"${project.ref.project} since the version " +
s"${recommendedSemanticdbV} tracked by scalafix " +
s"${BuildInfo.scalafixVersion} will not be " +
s"published for scala " +
s"${project.scalaVersion0.toString} - " +
s"consider upgrading sbt-scalafix"
)
semanticdbCompilerPlugin.value.withRevision(v)
}
)
} else {
val latestAvailable =
tail.lastOption.getOrElse(earliestAvailable)
Seq(
semanticdbCompilerPlugin := {
val v = latestAvailable.toString
sLog.value.info(
s"Using semanticdb-scalac $v in project " +
s"${project.ref.project} since the version " +
s"${recommendedSemanticdbV} tracked by scalafix " +
s"${BuildInfo.scalafixVersion} is no longer " +
s"published for scala " +
s"${project.scalaVersion0.toString} - " +
s"consider bumping scala"
)
semanticdbCompilerPlugin.value.withRevision(v)
}
)
}
}
} :+ (semanticdbEnabled := true)
settings <-
Expand Down
2 changes: 1 addition & 1 deletion src/sbt-test/sbt-scalafix/dependency/build.sbt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
scalaVersion := "2.12.12"
scalaVersion := "2.12.7"

TaskKey[Unit]("check") := {
val a = IO.read((Compile / sourceDirectory).value / "scala" / "A.scala")
Expand Down
4 changes: 2 additions & 2 deletions src/sbt-test/sbt-scalafix/scalafixEnable/build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ lazy val scala211_old = project.settings(

// 2.11.x is supported
lazy val scala211 = project.settings(
// semanticdb-scalac_2.11.11 no longer available, became available as of 2.0.0
// semanticdb-scalac_2.11.11 no longer available after 4.1.9
scalaVersion := "2.11.11"
)

Expand Down Expand Up @@ -46,7 +46,7 @@ TaskKey[Unit]("check") := {

assert((scala211 / semanticdbEnabled).value == true)
assert((scala211 / scalaVersion).value == "2.11.11")
assert((scala211 / semanticdbCompilerPlugin).value.revision == "4.1.0")
assert((scala211 / semanticdbCompilerPlugin).value.revision == "4.1.9")
assert(
(scala211 / Compile / compile / scalacOptions).value
.count(_ == "-Yrangepos") == 1
Expand Down

0 comments on commit 012651c

Please sign in to comment.