Skip to content

Commit d02b782

Browse files
committed
build and test against scala 3.8.0
1 parent e0a5218 commit d02b782

File tree

11 files changed

+40
-12
lines changed

11 files changed

+40
-12
lines changed

.github/workflows/ci.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ jobs:
4343
- uses: coursier/setup-action@v1
4444
with:
4545
apps: sbt
46+
jvm: zulu:17 # for scala 3.8+
4647
- run: ./bin/scalafmt --test
4748
- run: sbt "dogfoodScalafixInterfaces; scalafixAll --check"
4849
mima:
@@ -55,4 +56,5 @@ jobs:
5556
- uses: coursier/setup-action@v1
5657
with:
5758
apps: sbt
59+
jvm: zulu:17 # for scala 3.8+
5860
- run: sbt versionPolicyCheck

.github/workflows/release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ jobs:
1313
- uses: coursier/setup-action@v1
1414
with:
1515
apps: sbt
16-
jvm: temurin:8
16+
jvm: temurin:17 # TODO: check the bytecode format for scala <3.8
1717
- uses: olafurpg/setup-gpg@v3
1818
- name: Check that major or minor was bumped upon compatibility breakage
1919
if: startsWith(github.ref, 'refs/tags/v')

bin/test-release.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ version=$1
66
scala212=2.12.20
77
scala213=2.13.17
88
scala3LTS=3.3.7
9-
scala3Next=3.7.4
9+
scala3Next=3.8.0
1010

1111
cs resolve \
1212
ch.epfl.scala:scalafix-interfaces:$version \

build.sbt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ lazy val interfaces = project
3636
props.put("scala35", scala35)
3737
props.put("scala36", scala36)
3838
props.put("scala37", scala37)
39+
props.put("scala38", scala38)
3940
props.put("scala3LTS", scala3LTS)
4041
props.put("scala3Next", scala3Next)
4142
val out =

project/Dependencies.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,9 @@ object Dependencies {
1212
val scala35 = "3.5.2"
1313
val scala36 = "3.6.4"
1414
val scala37 = "3.7.4"
15+
val scala38 = "3.8.0-RC1"
1516
val scala3LTS = scala33
16-
val scala3Next = sys.props.getOrElse("scala3.nightly", scala37)
17+
val scala3Next = sys.props.getOrElse("scala3.nightly", scala38)
1718

1819
val bijectionCoreV = "0.9.8"
1920
val collectionCompatV = "2.14.0"

project/Mima.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@ object Mima {
77
// See https://github.com/lightbend/mima
88
Seq(
99
ProblemFilters.exclude[Problem]("scalafix.internal.*"),
10-
ProblemFilters.exclude[Problem]("scala.meta.internal.*")
10+
ProblemFilters.exclude[Problem]("scala.meta.internal.*"),
1111
// Exceptions
12+
ProblemFilters.exclude[ReversedMissingMethodProblem]("scalafix.interfaces.Scalafix.scala38")
1213
)
1314
}
1415
}

project/ScalafixBuild.scala

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,17 @@ object ScalafixBuild extends AutoPlugin with GhpagesKeys {
3434
// https://github.com/scalameta/scalameta/issues/2485
3535
lazy val coreScalaVersions = Seq(scala212, scala213)
3636
lazy val cliScalaVersions = {
37-
val scala3Versions = Seq(scala33, scala35, scala36, scala37)
37+
val scala3Versions = Seq(scala33, scala35, scala36, scala37, scala38)
3838
val jdk = System.getProperty("java.specification.version").toDouble
3939
val unsupportedVersions =
4040
if (jdk >= 25) Seq(scala212, scala35, scala36)
41+
else if (jdk < 17) Seq(scala38)
4142
else Nil
4243
(coreScalaVersions ++ scala3Versions :+ scala3Next)
4344
.diff(unsupportedVersions)
4445
}
4546
lazy val cliScalaVersionsWithTargets: Seq[(String, TargetAxis)] =
46-
cliScalaVersions.map(sv => (sv, TargetAxis(sv))) ++
47+
cliScalaVersions.map(sv => (sv, TargetAxis(sv))) ++ {
4748
cliScalaVersions.intersect(Seq(scala213, scala212)).flatMap { sv =>
4849
def previousVersions(scalaVersion: String): Seq[String] = {
4950
val split = scalaVersion.split('.')
@@ -66,6 +67,10 @@ object ScalafixBuild extends AutoPlugin with GhpagesKeys {
6667
(scala3Next, TargetAxis(scala213)),
6768
(scala3Next, TargetAxis(scala3LTS))
6869
)
70+
}.filter { case (sv, target) =>
71+
val jdk = System.getProperty("java.specification.version").toDouble
72+
jdk >= 17 || (sv != scala38 && target.scalaVersion != scala38)
73+
}
6974

7075
lazy val publishLocalTransitive =
7176
taskKey[Unit]("Run publishLocal on this project and its dependencies")
@@ -85,16 +90,21 @@ object ScalafixBuild extends AutoPlugin with GhpagesKeys {
8590
scalaVersion.value.startsWith("2.12")
8691
}
8792
lazy val warnUnused = Def.setting {
88-
if (isScala3.value)
93+
val minor = scalaVersion.value.split('.')(1).toInt
94+
if (isScala3.value && minor >= 7)
95+
Seq("-Wunused:all")
96+
else if (isScala3.value)
8997
Seq(
9098
"-Wunused:all",
91-
"-Wunused:unsafe-warn-patvars" // only needed for <3.7.0
99+
"-Wunused:unsafe-warn-patvars"
92100
)
93101
else if (isScala213.value) Seq("-Wunused")
94102
else Seq("-Ywarn-unused")
95103
}
96104
lazy val targetJvm = Def.setting {
97-
if (isScala3.value) Seq("-release:8")
105+
val minor = scalaVersion.value.split('.')(1).toInt
106+
if (isScala3.value && minor >= 8) Seq("-release:17")
107+
else if (isScala3.value) Seq("-release:8")
98108
else if (isScala213.value) Seq("-release", "8")
99109
else Seq("-target:jvm-1.8")
100110
}
@@ -150,6 +160,7 @@ object ScalafixBuild extends AutoPlugin with GhpagesKeys {
150160
"scala35" -> scala35,
151161
"scala36" -> scala36,
152162
"scala37" -> scala37,
163+
"scala38" -> scala38,
153164
"scala3LTS" -> scala3LTS,
154165
"scala3Next" -> scala3Next,
155166
sbtVersion
@@ -241,7 +252,8 @@ object ScalafixBuild extends AutoPlugin with GhpagesKeys {
241252
)
242253

243254
private val PreviousScalaVersion: Map[String, Option[String]] = Map(
244-
scala37 -> Some("3.7.3")
255+
scala37 -> Some("3.7.3"),
256+
scala38 -> None
245257
)
246258

247259
override def buildSettings: Seq[Setting[_]] = List(

scalafix-cli/src/main/scala/scalafix/internal/interfaces/ScalafixImpl.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ final class ScalafixImpl extends Scalafix {
4242
Versions.scala36
4343
override def scala37(): String =
4444
Versions.scala37
45+
override def scala38(): String =
46+
Versions.scala38
4547
override def scala3LTS(): String =
4648
Versions.scala3LTS
4749
override def scala3Next(): String =

scalafix-interfaces/src/main/java/scalafix/interfaces/Scalafix.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,11 @@ public interface Scalafix {
9090
*/
9191
String scala37();
9292

93+
/**
94+
* The Scala 3.8 version in {@link #supportedScalaVersions()}
95+
*/
96+
String scala38();
97+
9398
/**
9499
* The Scala 3 LTS version in {@link #supportedScalaVersions()}
95100
*/
@@ -162,6 +167,8 @@ static Scalafix fetchAndClassloadInstance(String requestedScalaVersion, List<Rep
162167
scalaVersionKey = "scala36";
163168
} else if (requestedScalaMajorMinorOrMajorVersion.equals("3.7")) {
164169
scalaVersionKey = "scala37";
170+
} else if (requestedScalaMajorMinorOrMajorVersion.equals("3.8")) {
171+
scalaVersionKey = "scala38";
165172
} else if (requestedScalaMajorMinorOrMajorVersion.startsWith("3")) {
166173
scalaVersionKey = "scala3Next";
167174
} else {

scalafix-tests/integration/src/test/scala/scalafix/tests/interfaces/ScalafixSuite.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ class ScalafixSuite extends AnyFunSuite {
4949
assert(api.scala35() == Versions.scala35)
5050
assert(api.scala36() == Versions.scala36)
5151
assert(api.scala37() == Versions.scala37)
52+
assert(api.scala38() == Versions.scala38)
5253
assert(api.scala3LTS() == Versions.scala3LTS)
5354
assert(api.scala3Next() == Versions.scala3Next)
5455
assert(
@@ -134,12 +135,12 @@ class ScalafixSuite extends AnyFunSuite {
134135
}
135136

136137
test("classload Scala 3 Next with full version") {
137-
val scalafixAPI = Scalafix.fetchAndClassloadInstance("3.7.0", repositories)
138+
val scalafixAPI = Scalafix.fetchAndClassloadInstance("3.8.0", repositories)
138139
assert(scalafixAPI.scalaVersion() == Versions.scala3Next)
139140
}
140141

141142
test("classload Scala 3 Next with major.minor version") {
142-
val scalafixAPI = Scalafix.fetchAndClassloadInstance("3.7", repositories)
143+
val scalafixAPI = Scalafix.fetchAndClassloadInstance("3.8", repositories)
143144
assert(scalafixAPI.scalaVersion() == Versions.scala3Next)
144145
}
145146

0 commit comments

Comments
 (0)