Skip to content

Commit a8644bd

Browse files
authored
Merge pull request scalacenter#2211 from bjaglin/scala37
build and test against scala 3.7.0
2 parents fea493b + 80d6d45 commit a8644bd

File tree

30 files changed

+1793
-58
lines changed

30 files changed

+1793
-58
lines changed

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.16
88
scala3LTS=3.3.5
9-
scala3Next=3.6.4
9+
scala3Next=3.7.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
@@ -35,6 +35,7 @@ lazy val properties = project
3535
props.put("scala33", scala33)
3636
props.put("scala35", scala35)
3737
props.put("scala36", scala36)
38+
props.put("scala37", scala37)
3839
props.put("scala3LTS", scala3LTS)
3940
props.put("scala3Next", scala3Next)
4041
val out =

docs/rules/RemoveUnused.md

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,10 @@ case class AB(a: Int, b: String)
7272
object Main {
7373
val example = AB(42, "lol")
7474
example match {
75-
case AB(a, b) => println("Not used")
75+
case AB(foo, bar) => println("Not used")
76+
}
77+
example match {
78+
case AB(a, b) => println("Not used, but canonical names")
7679
}
7780
}
7881
// after
@@ -81,16 +84,16 @@ object Main {
8184
example match {
8285
case AB(_, _) => println("Not used")
8386
}
87+
example match {
88+
case AB(a, b) => println("Not used, but canonical names")
89+
}
8490
}
8591
```
8692

87-
On Scala 3, `-Wunused:unsafe-warn-patvars` is required.
88-
89-
On Scala 2.13.15+, canonical patterns (vars with the same names as the
90-
attributes) do not trigger unused warnings, so the input above will not
91-
be rewritten. See https://github.com/scala/bug/issues/13035.
93+
On Scala 3, an additional `-Wunused:unsafe-warn-patvars` option is required
94+
until Scala 3.7.0.
9295

93-
### Remove unused function parameters (Scala 2 only)
96+
### Remove unused function parameters
9497

9598
```scala
9699
// before
@@ -103,6 +106,8 @@ object Main {
103106
}
104107
```
105108

109+
On Scala 3, this is only supported for 3.7.0+.
110+
106111
## Formatting
107112

108113
> This rule does a best-effort at preserving original formatting. In some cases,
@@ -176,8 +181,7 @@ $ scala3 -W
176181
- nowarn,
177182
- all,
178183
- imports :
179-
Warn if an import selector is not referenced.
180-
NOTE : overrided by -Wunused:strict-no-implicit-warn,
184+
Warn if an import selector is not referenced.,
181185
- privates :
182186
Warn if a private member is unused,
183187
- locals :
@@ -188,13 +192,13 @@ $ scala3 -W
188192
Warn if an implicit parameter is unused,
189193
- params :
190194
Enable -Wunused:explicits,implicits,
195+
- patvars :
196+
Warn if a variable bound in a pattern is unused,
191197
- linted :
192198
Enable -Wunused:imports,privates,locals,implicits,
193199
- strict-no-implicit-warn :
194200
Same as -Wunused:import, only for imports of explicit named members.
195-
NOTE : This overrides -Wunused:imports and NOT set by -Wunused:all,
201+
NOTE : This overrides -Wunused:imports and NOT set by -Wunused:all,
196202
- unsafe-warn-patvars :
197-
(UNSAFE) Warn if a variable bound in a pattern is unused.
198-
This warning can generate false positive, as warning cannot be
199-
suppressed yet.
203+
Deprecated alias for `patvars`
200204
```

project/Dependencies.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,13 @@ import sbt._
66

77
object Dependencies {
88
val scala212 = sys.props.getOrElse("scala212.nightly", "2.12.20")
9-
val scala213 = sys.props.getOrElse("scala213.nightly", "2.13.16")
9+
val scala213 = sys.props.getOrElse("scala213.nightly", "2.13.16") // remove 2.13.14 hack in RuleSuite when bumping
1010
val scala33 = "3.3.5"
1111
val scala35 = "3.5.2"
1212
val scala36 = "3.6.4"
13+
val scala37 = "3.7.0"
1314
val scala3LTS = scala33
14-
val scala3Next = sys.props.getOrElse("scala3.nightly", scala36)
15+
val scala3Next = sys.props.getOrElse("scala3.nightly", scala37)
1516

1617
val bijectionCoreV = "0.9.8"
1718
val collectionCompatV = "2.13.0"

project/Mima.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ object Mima {
1212
ProblemFilters.exclude[DirectMissingMethodProblem]("scalafix.v0.Signature#Self.syntax"),
1313
ProblemFilters.exclude[ReversedMissingMethodProblem]("scalafix.interfaces.Scalafix.scala33"),
1414
ProblemFilters.exclude[ReversedMissingMethodProblem]("scalafix.interfaces.Scalafix.scala35"),
15-
ProblemFilters.exclude[ReversedMissingMethodProblem]("scalafix.interfaces.Scalafix.scala36")
15+
ProblemFilters.exclude[ReversedMissingMethodProblem]("scalafix.interfaces.Scalafix.scala36"),
16+
ProblemFilters.exclude[ReversedMissingMethodProblem]("scalafix.interfaces.Scalafix.scala37")
1617
)
1718
}
1819
}

project/ScalafixBuild.scala

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ object ScalafixBuild extends AutoPlugin with GhpagesKeys {
3737
val jdk = System.getProperty("java.specification.version").toDouble
3838
val scala3Versions =
3939
// Scala 3.5 will never support JDK 23
40-
if (jdk >= 23) Seq(scala33, scala36)
41-
else Seq(scala33, scala35, scala36)
40+
if (jdk >= 23) Seq(scala33, scala36, scala37)
41+
else Seq(scala33, scala35, scala36, scala37)
4242
(coreScalaVersions ++ scala3Versions :+ scala3Next).distinct
4343
}
4444
lazy val cliScalaVersionsWithTargets: Seq[(String, TargetAxis)] =
@@ -84,7 +84,11 @@ object ScalafixBuild extends AutoPlugin with GhpagesKeys {
8484
scalaVersion.value.startsWith("2.12")
8585
}
8686
lazy val warnUnused = Def.setting {
87-
if (isScala3.value) Seq("-Wunused:all", "-Wunused:unsafe-warn-patvars")
87+
if (isScala3.value)
88+
Seq(
89+
"-Wunused:all",
90+
"-Wunused:unsafe-warn-patvars" // only needed for <3.7.0
91+
)
8892
else if (isScala213.value) Seq("-Wunused")
8993
else Seq("-Ywarn-unused")
9094
}
@@ -144,6 +148,7 @@ object ScalafixBuild extends AutoPlugin with GhpagesKeys {
144148
"scala33" -> scala33,
145149
"scala35" -> scala35,
146150
"scala36" -> scala36,
151+
"scala37" -> scala37,
147152
"scala3LTS" -> scala3LTS,
148153
"scala3Next" -> scala3Next,
149154
sbtVersion
@@ -239,7 +244,8 @@ object ScalafixBuild extends AutoPlugin with GhpagesKeys {
239244
)
240245

241246
private val PreviousScalaVersion: Map[String, Option[String]] = Map(
242-
"3.6.4" -> Some("3.6.3")
247+
"3.6.4" -> Some("3.6.3"),
248+
scala37 -> None
243249
)
244250

245251
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
@@ -40,6 +40,8 @@ final class ScalafixImpl extends Scalafix {
4040
Versions.scala35
4141
override def scala36(): String =
4242
Versions.scala36
43+
override def scala37(): String =
44+
Versions.scala37
4345
override def scala3LTS(): String =
4446
Versions.scala3LTS
4547
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
@@ -85,6 +85,11 @@ public interface Scalafix {
8585
*/
8686
String scala36();
8787

88+
/**
89+
* The Scala 3.7 version in {@link #supportedScalaVersions()}
90+
*/
91+
String scala37();
92+
8893
/**
8994
* The Scala 3 LTS version in {@link #supportedScalaVersions()}
9095
*/
@@ -155,6 +160,8 @@ static Scalafix fetchAndClassloadInstance(String requestedScalaVersion, List<Rep
155160
scalaVersionKey = "scala35";
156161
} else if (requestedScalaMajorMinorOrMajorVersion.equals("3.6")) {
157162
scalaVersionKey = "scala36";
163+
} else if (requestedScalaMajorMinorOrMajorVersion.equals("3.7")) {
164+
scalaVersionKey = "scala37";
158165
} else if (requestedScalaMajorMinorOrMajorVersion.startsWith("3")) {
159166
scalaVersionKey = "scala3Next";
160167
} else {

scalafix-rules/src/main/scala/scalafix/internal/rule/RemoveUnused.scala

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,10 @@ class RemoveUnused(config: RemoveUnusedConfig)
9696
isUnusedPattern += diagnostic.position
9797
} else if (
9898
config.params &&
99-
(msg.startsWith("parameter") && msg.endsWith("is never used"))
99+
(
100+
msg.startsWith("parameter") && msg.endsWith("is never used") ||
101+
msg == "unused explicit parameter"
102+
)
100103
) {
101104
isUnusedParam += diagnostic.position
102105
}
@@ -189,7 +192,7 @@ class RemoveUnused(config: RemoveUnusedConfig)
189192
case Term.Function(params, _) =>
190193
params.collect {
191194
case param @ Term.Param(_, name, _, _)
192-
if isUnusedParam(param.pos) =>
195+
if isUnusedParam(param.pos) || isUnusedParam(name.pos) =>
193196
Patch.replaceTree(name, "_")
194197
}.asPatch
195198
}.asPatch

scalafix-rules/src/main/scala/scalafix/internal/rule/RemoveUnusedConfig.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ case class RemoveUnusedConfig(
1414
locals: Boolean = true,
1515
@Description("Remove unused pattern match variables")
1616
patternvars: Boolean = true,
17-
@Description("Remove unused function parameters (Scala 2 only)")
17+
@Description("Remove unused function parameters")
1818
params: Boolean = true
1919
)
2020

0 commit comments

Comments
 (0)