Skip to content

[0.15.x] fail hard on EOL Scala 3 minors #2150

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,6 @@ lazy val interfaces = project
props.put("scala212", scala212)
props.put("scala213", scala213)
props.put("scala33", scala33)
props.put("scala35", scala35)
props.put("scala36", scala36)
props.put("scala37", scala37)
props.put("scala3LTS", scala3LTS)
props.put("scala3Next", scala3Next)
Expand Down
2 changes: 0 additions & 2 deletions project/Dependencies.scala
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@ object Dependencies {
val scala212 = sys.props.getOrElse("scala212.nightly", "2.12.20")
val scala213 = sys.props.getOrElse("scala213.nightly", "2.13.16") // remove 2.13.14 hack in RuleSuite when bumping
val scala33 = "3.3.6"
val scala35 = "3.5.2"
val scala36 = "3.6.4"
val scala37 = "3.7.0"
val scala3LTS = scala33
val scala3Next = sys.props.getOrElse("scala3.nightly", scala37)
Expand Down
4 changes: 3 additions & 1 deletion project/Mima.scala
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@ object Mima {
// See https://github.com/lightbend/mima
Seq(
ProblemFilters.exclude[Problem]("scalafix.internal.*"),
ProblemFilters.exclude[Problem]("scala.meta.internal.*")
ProblemFilters.exclude[Problem]("scala.meta.internal.*"),
// Exceptions
ProblemFilters.exclude[DirectMissingMethodProblem]("scalafix.Versions.scala35"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scalafix.Versions.scala36")
)
}
}
17 changes: 7 additions & 10 deletions project/ScalafixBuild.scala
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,13 @@ object ScalafixBuild extends AutoPlugin with GhpagesKeys {

// https://github.com/scalameta/scalameta/issues/2485
lazy val coreScalaVersions = Seq(scala212, scala213)
lazy val cliScalaVersions = {
val jdk = System.getProperty("java.specification.version").toDouble
val scala3Versions =
// Scala 3.5 will never support JDK 23
if (jdk >= 23) Seq(scala33, scala36, scala37)
else Seq(scala33, scala35, scala36, scala37)
(coreScalaVersions ++ scala3Versions :+ scala3Next).distinct
}
lazy val cliScalaVersions = Seq(
scala212,
scala213,
scala33,
scala37,
scala3Next
).distinct
lazy val cliScalaVersionsWithTargets: Seq[(String, TargetAxis)] =
cliScalaVersions.map(sv => (sv, TargetAxis(sv))) ++
Seq(scala213, scala212).flatMap { sv =>
Expand Down Expand Up @@ -146,8 +145,6 @@ object ScalafixBuild extends AutoPlugin with GhpagesKeys {
"scala212" -> scala212,
"scala213" -> scala213,
"scala33" -> scala33,
"scala35" -> scala35,
"scala36" -> scala36,
"scala37" -> scala37,
"scala3LTS" -> scala3LTS,
"scala3Next" -> scala3Next,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,13 @@ final class ScalafixImpl extends Scalafix {
override def scala33(): String =
Versions.scala33
override def scala35(): String =
Versions.scala35
throw new java.lang.UnsupportedOperationException(
"Scala 3.5 is no longer supported; the final version supporting it is Scalafix 0.14.x"
)
override def scala36(): String =
Versions.scala36
throw new java.lang.UnsupportedOperationException(
"Scala 3.6 is no longer supported; the final version supporting it is Scalafix 0.14.x"
)
override def scala37(): String =
Versions.scala37
override def scala3LTS(): String =
Expand Down
25 changes: 10 additions & 15 deletions scalafix-interfaces/src/main/java/scalafix/interfaces/Scalafix.java
Original file line number Diff line number Diff line change
Expand Up @@ -75,14 +75,10 @@ public interface Scalafix {
*/
String scala33();

/**
* The Scala 3.5 version in {@link #supportedScalaVersions()}
*/
@Deprecated
String scala35();

/**
* The Scala 3.6 version in {@link #supportedScalaVersions()}
*/
@Deprecated
String scala36();

/**
Expand Down Expand Up @@ -151,18 +147,17 @@ static Scalafix fetchAndClassloadInstance(String requestedScalaVersion, List<Rep
} else if (requestedScalaMajorMinorOrMajorVersion.equals("2.13") ||
requestedScalaMajorMinorOrMajorVersion.equals("2")) {
scalaVersionKey = "scala213";
} else if (requestedScalaMajorMinorOrMajorVersion.equals("3.0") ||
requestedScalaMajorMinorOrMajorVersion.equals("3.1") ||
requestedScalaMajorMinorOrMajorVersion.equals("3.2") ||
requestedScalaMajorMinorOrMajorVersion.equals("3.3")) {
} else if (requestedScalaMajorMinorOrMajorVersion.equals("3.3")) {
scalaVersionKey = "scala33";
} else if (requestedScalaMajorMinorOrMajorVersion.equals("3.5")) {
scalaVersionKey = "scala35";
} else if (requestedScalaMajorMinorOrMajorVersion.equals("3.6")) {
scalaVersionKey = "scala36";
} else if (requestedScalaMajorMinorOrMajorVersion.equals("3.7")) {
scalaVersionKey = "scala37";
} else if (requestedScalaMajorMinorOrMajorVersion.startsWith("3")) {
} else if (requestedScalaMajorMinorOrMajorVersion.startsWith("3") &&
!requestedScalaMajorMinorOrMajorVersion.equals("3.0") &&
!requestedScalaMajorMinorOrMajorVersion.equals("3.1") &&
!requestedScalaMajorMinorOrMajorVersion.equals("3.2") &&
!requestedScalaMajorMinorOrMajorVersion.equals("3.4") &&
!requestedScalaMajorMinorOrMajorVersion.equals("3.5") &&
!requestedScalaMajorMinorOrMajorVersion.equals("3.6")) {
scalaVersionKey = "scala3Next";
} else {
throw new IllegalArgumentException("Unsupported scala version " + requestedScalaVersion);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,6 @@ class ScalafixSuite extends AnyFunSuite {
assert(api.scala212() == Versions.scala212)
assert(api.scala213() == Versions.scala213)
assert(api.scala33() == Versions.scala33)
assert(api.scala35() == Versions.scala35)
assert(api.scala36() == Versions.scala36)
assert(api.scala37() == Versions.scala37)
assert(api.scala3LTS() == Versions.scala3LTS)
assert(api.scala3Next() == Versions.scala3Next)
Expand All @@ -60,15 +58,27 @@ class ScalafixSuite extends AnyFunSuite {
assert(help.contains("Usage: scalafix"))
}

test("fail to classload Scala 2.11 with full version") {
test("fail to classload EOL versions") {
assertThrows[IllegalArgumentException](
Scalafix.fetchAndClassloadInstance("2.11.0", repositories)
Scalafix.fetchAndClassloadInstance("2.11", repositories)
)
}

test("fail to classload Scala 2.11 with minor version") {
assertThrows[IllegalArgumentException](
Scalafix.fetchAndClassloadInstance("2.11", repositories)
Scalafix.fetchAndClassloadInstance("3.0", repositories)
)
assertThrows[IllegalArgumentException](
Scalafix.fetchAndClassloadInstance("3.1", repositories)
)
assertThrows[IllegalArgumentException](
Scalafix.fetchAndClassloadInstance("3.2", repositories)
)
assertThrows[IllegalArgumentException](
Scalafix.fetchAndClassloadInstance("3.4", repositories)
)
assertThrows[IllegalArgumentException](
Scalafix.fetchAndClassloadInstance("3.5", repositories)
)
assertThrows[IllegalArgumentException](
Scalafix.fetchAndClassloadInstance("3.6", repositories)
)
}

Expand Down Expand Up @@ -99,16 +109,6 @@ class ScalafixSuite extends AnyFunSuite {
assert(scalafixAPI.scalaVersion() == Versions.scala213)
}

test("classload Scala 3 LTS with full pre-LTS version") {
val scalafixAPI = Scalafix.fetchAndClassloadInstance("3.0.0", repositories)
assert(scalafixAPI.scalaVersion() == Versions.scala3LTS)
}

test("classload Scala 3 LTS with major.minor pre-LTS version") {
val scalafixAPI = Scalafix.fetchAndClassloadInstance("3.2", repositories)
assert(scalafixAPI.scalaVersion() == Versions.scala3LTS)
}

test("classload Scala 3 LTS with full LTS version") {
val scalafixAPI = Scalafix.fetchAndClassloadInstance("3.3.4", repositories)
assert(scalafixAPI.scalaVersion() == Versions.scala3LTS)
Expand All @@ -119,18 +119,6 @@ class ScalafixSuite extends AnyFunSuite {
assert(scalafixAPI.scalaVersion() == Versions.scala3LTS)
}

test("classload Scala 3.5 with full version") {
if (jdk >= 23) cancel("Scala 3.5 is not supported on JDK23+")
val scalafixAPI = Scalafix.fetchAndClassloadInstance("3.5.2", repositories)
assert(scalafixAPI.scalaVersion() == Versions.scala35)
}

test("classload Scala 3.5 with major.minor version") {
if (jdk >= 23) cancel("Scala 3.5 is not supported on JDK23+")
val scalafixAPI = Scalafix.fetchAndClassloadInstance("3.5", repositories)
assert(scalafixAPI.scalaVersion() == Versions.scala35)
}

test("classload Scala 3 Next with full version") {
val scalafixAPI = Scalafix.fetchAndClassloadInstance("3.7.0", repositories)
assert(scalafixAPI.scalaVersion() == Versions.scala3Next)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,6 @@ class InterfacesPropertiesSuite extends AnyFunSuite with BeforeAndAfterAll {
check("scala212", Versions.scala212)
check("scala213", Versions.scala213)
check("scala33", Versions.scala33)
check("scala35", Versions.scala35)
check("scala36", Versions.scala36)
check("scala37", Versions.scala37)
check("scala3LTS", Versions.scala3LTS)
check("scala3Next", Versions.scala3Next)
Expand Down