Skip to content

Commit 38dd7ac

Browse files
authored
Merge pull request #2319 from bjaglin/38
build and test against scala 3.8.1
2 parents 2529c4d + 28f9d96 commit 38dd7ac

24 files changed

Lines changed: 494 additions & 85 deletions

File tree

.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@v2
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@v2
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@v2
1414
with:
1515
apps: sbt
16-
jvm: temurin:8
16+
jvm: temurin:17 # needed for scala 3.8+ modules, all others are producing Java 8 bytecode
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')

.jvmopts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
-Xss2m
22
-Xms2G
3-
-Xmx4G
3+
-Xmx8G
44
-XX:ReservedCodeCacheSize=512m
55
-XX:+UseG1GC
66
-XX:+TieredCompilation

AGENTS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## Project Overview
44

5-
Scalafix is a refactoring and linting tool for Scala. It enables syntactic and semantic source code transformations through a rule-based system. The project targets multiple Scala versions (2.12, 2.13, 3.3-3.7) and is built using a complex sbt-projectmatrix setup.
5+
Scalafix is a refactoring and linting tool for Scala. It enables syntactic and semantic source code transformations through a rule-based system. The project targets multiple Scala versions (2.12, 2.13, 3.3-3.8) and is built using a complex sbt-projectmatrix setup.
66

77
**Core Architecture:**
88
- `scalafix-interfaces`: Java API for JVM integration (cross-platform, no Scala dependency)

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.21
77
scala213=2.13.18
88
scala3LTS=3.3.7
9-
scala3Next=3.7.4
9+
scala3Next=3.8.1
1010

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

build.sbt

Lines changed: 7 additions & 2 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 =
@@ -45,9 +46,12 @@ lazy val interfaces = project
4546
List(out)
4647
},
4748
(Compile / javacOptions) ++= List(
48-
"-Xlint:all",
49+
"-Xlint:all,-options",
4950
"-Werror"
50-
),
51+
) ++ {
52+
if (System.getProperty("java.version").startsWith("1.8")) Nil
53+
else List("--release", "8")
54+
},
5155
(Compile / doc / javacOptions) := List("-Xdoclint:none"),
5256
(Compile / javaHome) := inferJavaHome(),
5357
(Compile / doc / javaHome) := inferJavaHome(),
@@ -142,6 +146,7 @@ lazy val reflect = projectMatrix
142146
moduleName := "scalafix-reflect",
143147
isFullCrossVersion,
144148
libraryDependencies ++= Seq(
149+
coursierInterfaces,
145150
semanticdbScalacCore,
146151
"org.scala-lang" % "scala-compiler" % scalaVersion.value,
147152
"org.scala-lang" % "scala-reflect" % scalaVersion.value

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.1"
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: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,13 @@ 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
39-
val unsupportedVersions =
40-
if (jdk >= 25) Seq(scala212, scala35, scala36)
41-
else Nil
42-
(coreScalaVersions ++ scala3Versions :+ scala3Next)
43-
.diff(unsupportedVersions)
39+
val unsupportedVersions: Set[String] =
40+
if (jdk >= 25) Set(scala212, scala35, scala36)
41+
else if (jdk < 17) Set(scala38)
42+
else Set.empty
43+
(coreScalaVersions ++ scala3Versions).filterNot(unsupportedVersions)
4444
}
4545
lazy val cliScalaVersionsWithTargets: Seq[(String, TargetAxis)] =
4646
cliScalaVersions.map(sv => (sv, TargetAxis(sv))) ++
@@ -62,10 +62,12 @@ object ScalafixBuild extends AutoPlugin with GhpagesKeys {
6262
val xsource3 = TargetAxis(sv, xsource3 = true)
6363

6464
(prevVersions :+ xsource3).map((sv, _))
65-
} ++ Seq(
66-
(scala3Next, TargetAxis(scala213)),
67-
(scala3Next, TargetAxis(scala3LTS))
68-
)
65+
} ++ cliScalaVersions.intersect(Seq(scala3Next)).flatMap { sv =>
66+
Seq(
67+
(sv, TargetAxis(scala213)),
68+
(sv, TargetAxis(scala3LTS))
69+
)
70+
}
6971

7072
lazy val publishLocalTransitive =
7173
taskKey[Unit]("Run publishLocal on this project and its dependencies")
@@ -85,16 +87,21 @@ object ScalafixBuild extends AutoPlugin with GhpagesKeys {
8587
scalaVersion.value.startsWith("2.12")
8688
}
8789
lazy val warnUnused = Def.setting {
88-
if (isScala3.value)
90+
val minor = scalaVersion.value.split('.')(1).toInt
91+
if (isScala3.value && minor >= 7)
92+
Seq("-Wunused:all")
93+
else if (isScala3.value)
8994
Seq(
9095
"-Wunused:all",
91-
"-Wunused:unsafe-warn-patvars" // only needed for <3.7.0
96+
"-Wunused:unsafe-warn-patvars"
9297
)
9398
else if (isScala213.value) Seq("-Wunused")
9499
else Seq("-Ywarn-unused")
95100
}
96101
lazy val targetJvm = Def.setting {
97-
if (isScala3.value) Seq("-release:8")
102+
val minor = scalaVersion.value.split('.')(1).toInt
103+
if (isScala3.value && minor >= 8) Seq("-release:17")
104+
else if (isScala3.value) Seq("-release:8")
98105
else if (isScala213.value) Seq("-release", "8")
99106
else Seq("-target:jvm-1.8")
100107
}
@@ -150,6 +157,7 @@ object ScalafixBuild extends AutoPlugin with GhpagesKeys {
150157
"scala35" -> scala35,
151158
"scala36" -> scala36,
152159
"scala37" -> scala37,
160+
"scala38" -> scala38,
153161
"scala3LTS" -> scala3LTS,
154162
"scala3Next" -> scala3Next,
155163
sbtVersion
@@ -241,6 +249,7 @@ object ScalafixBuild extends AutoPlugin with GhpagesKeys {
241249
)
242250

243251
private val PreviousScalaVersion: Map[String, Option[String]] = Map(
252+
scala38 -> None
244253
)
245254

246255
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 =

0 commit comments

Comments
 (0)