Skip to content

Commit 86966ca

Browse files
committed
scalafix-interfaces must now be provided alongside sbt-scalafix
This will allow for a separate release lifecycle
1 parent 19d2ed2 commit 86966ca

File tree

34 files changed

+92
-10
lines changed

34 files changed

+92
-10
lines changed

build.sbt

+1
Original file line numberDiff line numberDiff line change
@@ -101,5 +101,6 @@ scriptedParallelInstances := 2
101101
scriptedLaunchOpts ++= Seq(
102102
"-Xmx2048M",
103103
s"-Dplugin.version=${version.value}",
104+
s"-Dinterfaces.version=${Dependencies.scalafixVersion}",
104105
"-Dsbt-scalafix.uselastmodified=true" // the caching scripted relies on sbt-scalafix only checking file attributes, not content
105106
)

project/Dependencies.scala

+5-2
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,14 @@ import sbt._
22

33
object Dependencies {
44
val x = List(1) // scalafix:ok
5-
def scalafixVersion: String = "0.14.2"
5+
6+
// lowest version of interfaces that for build-time and run-time
7+
def scalafixVersion: String =
8+
"0.13.0" // https://github.com/scalacenter/scalafix/commit/1498200#diff-8f1370021f0c21599d22a292e6ee5a9446f05c18a05f5c3bb250dea3884c72ee
69

710
val all = List(
811
"org.eclipse.jgit" % "org.eclipse.jgit" % "5.13.3.202401111512-r",
9-
"ch.epfl.scala" % "scalafix-interfaces" % scalafixVersion,
12+
"ch.epfl.scala" % "scalafix-interfaces" % scalafixVersion % Provided,
1013
"io.get-coursier" % "interface" % "1.0.28",
1114
"org.scala-lang.modules" %% "scala-collection-compat" % "2.13.0"
1215
)

project/plugins.sbt

+3
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,6 @@ Compile / unmanagedSourceDirectories ++= {
1010
)
1111
}
1212
libraryDependencies ++= Dependencies.all
13+
14+
// latest version of interfaces to test compatibility & get most recent behavior for scalafix invocations
15+
libraryDependencies += "ch.epfl.scala" % "scalafix-interfaces" % "0.14.2"

src/main/scala/scalafix/sbt/BuildInfo.scala

+4-2
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@ object BuildInfo {
2929
props.load(stream)
3030
case None =>
3131
sys.error(
32-
s"failed to load the resource file '$propertiesPath'. To fix this problem, make sure to enable the sbt-scalafix in 'project/plugins.sbt' and validate that the scalafix-interfaces jar is available on the classpath of the sbt build."
32+
s"failed to load the resource file '$propertiesPath'; " +
33+
"to fix this problem, add \"ch.epfl.scala\" % \"scalafix-interfaces\" " +
34+
"to libraryDependencies in 'project/plugins.sbt'"
3335
)
3436
}
3537
props
@@ -39,7 +41,7 @@ object BuildInfo {
3941
Option(props.getProperty(key)).getOrElse {
4042
sys.error(
4143
s"sbt-scalafix property '$key' missing in $propertiesPath; " +
42-
"to fix this problem, upgrade to the latest version of Scalafix."
44+
"to fix this problem, upgrade to a more recent version of scalafix-interfaces"
4345
)
4446
}
4547
}

src/main/scala/scalafix/sbt/ScalafixPlugin.scala

+21-3
Original file line numberDiff line numberDiff line change
@@ -225,10 +225,24 @@ object ScalafixPlugin extends AutoPlugin {
225225
)
226226
)
227227

228+
// Wrap calls that might result in linking errors because of a missing scalafix-interfaces
229+
private def wrapUnsafe[T](value: => T): T = try value
230+
catch {
231+
case e: LinkageError =>
232+
val msg = "failed to load ScalafixPlugin; " +
233+
"to fix this problem, add \"ch.epfl.scala\" % \"scalafix-interfaces\" " +
234+
"to libraryDependencies in 'project/plugins.sbt' or remove sbt-scalafix"
235+
throw new Error(msg, e)
236+
}
237+
228238
override lazy val projectConfigurations: Seq[Configuration] =
239+
wrapUnsafe(unsafeProjectConfigurations)
240+
private lazy val unsafeProjectConfigurations =
229241
Seq(ScalafixConfig)
230242

231-
override lazy val projectSettings: Seq[Def.Setting[?]] = Def.settings(
243+
override lazy val projectSettings: Seq[Def.Setting[?]] =
244+
wrapUnsafe(unsafeProjectSettings)
245+
private lazy val unsafeProjectSettings = Def.settings(
232246
Seq(Compile, Test).flatMap(c => inConfig(c)(scalafixConfigSettings(c))),
233247
inConfig(ScalafixConfig)(
234248
Def.settings(
@@ -261,7 +275,7 @@ object ScalafixPlugin extends AutoPlugin {
261275
"via `semanticdbVersion` does follow the version recommended " +
262276
"for Scalafix, but is not supported for the given Scala " +
263277
s"version ${scalaV}. Please consider upgrading to a more recent version " +
264-
"of sbt-scalafix and/or Scala, or uninstalling sbt-scalafix plugin."
278+
"of scalafix-interfaces and/or Scala, or uninstalling sbt-scalafix plugin."
265279
throw inc.copy(message = Some(msg))
266280
case _ =>
267281
}
@@ -278,7 +292,9 @@ object ScalafixPlugin extends AutoPlugin {
278292
.mkString(".")): @nowarn
279293
)
280294

281-
override lazy val globalSettings: Seq[Def.Setting[?]] = Seq(
295+
override def globalSettings: Seq[Def.Setting[?]] =
296+
wrapUnsafe(unsafeGlobalSettings)
297+
private lazy val unsafeGlobalSettings = Seq(
282298
scalafixCallback := new ScalafixLogger(ScalafixInterface.defaultLogger),
283299
scalafixConfig := None, // let scalafix-cli try to infer $CWD/.scalafix.conf
284300
scalafixOnCompile := false,
@@ -294,6 +310,8 @@ object ScalafixPlugin extends AutoPlugin {
294310
)
295311

296312
override def buildSettings: Seq[Def.Setting[?]] =
313+
wrapUnsafe(unsafeBuildSettings)
314+
private lazy val unsafeBuildSettings =
297315
Seq(
298316
scalafixSbtResolversAsCoursierRepositories := {
299317
val logger = streams.value.log
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
resolvers += Resolver.sonatypeRepo("public")
22
libraryDependencies += "com.googlecode.java-diff-utils" % "diffutils" % "1.3.0"
33
addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % sys.props("plugin.version"))
4+
libraryDependencies +=
5+
"ch.epfl.scala" % "scalafix-interfaces" % sys.props("interfaces.version")
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
resolvers += Resolver.sonatypeRepo("public")
22
addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % sys.props("plugin.version"))
3+
libraryDependencies +=
4+
"ch.epfl.scala" % "scalafix-interfaces" % sys.props("interfaces.version")
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
resolvers += Resolver.sonatypeRepo("public")
22
addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % sys.props("plugin.version"))
3+
libraryDependencies +=
4+
"ch.epfl.scala" % "scalafix-interfaces" % sys.props("interfaces.version")
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
resolvers += Resolver.sonatypeRepo("public")
22
libraryDependencies += "com.googlecode.java-diff-utils" % "diffutils" % "1.3.0"
33
addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % sys.props("plugin.version"))
4+
libraryDependencies +=
5+
"ch.epfl.scala" % "scalafix-interfaces" % sys.props("interfaces.version")
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
resolvers += Resolver.sonatypeRepo("public")
22
addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % sys.props("plugin.version"))
3+
libraryDependencies +=
4+
"ch.epfl.scala" % "scalafix-interfaces" % sys.props("interfaces.version")
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
resolvers += Resolver.sonatypeRepo("public")
22
addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % sys.props("plugin.version"))
3+
libraryDependencies +=
4+
"ch.epfl.scala" % "scalafix-interfaces" % sys.props("interfaces.version")
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
resolvers += Resolver.sonatypeRepo("public")
22
libraryDependencies += "com.googlecode.java-diff-utils" % "diffutils" % "1.3.0"
33
addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % sys.props("plugin.version"))
4+
libraryDependencies +=
5+
"ch.epfl.scala" % "scalafix-interfaces" % sys.props("interfaces.version")
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
resolvers += Resolver.sonatypeRepo("public")
22
addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % sys.props("plugin.version"))
3+
libraryDependencies +=
4+
"ch.epfl.scala" % "scalafix-interfaces" % sys.props("interfaces.version")
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
resolvers += Resolver.sonatypeRepo("public")
22
libraryDependencies += "com.googlecode.java-diff-utils" % "diffutils" % "1.3.0"
33
addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % sys.props("plugin.version"))
4+
libraryDependencies +=
5+
"ch.epfl.scala" % "scalafix-interfaces" % sys.props("interfaces.version")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
resolvers += Resolver.sonatypeRepo("public")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
> reload plugins
2+
> set addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % sys.props("plugin.version"))
3+
> session save
4+
-> reload return
5+
$ delete project/plugins.sbt
6+
> reload
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
resolvers += Resolver.sonatypeRepo("public")
22
addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % sys.props("plugin.version"))
3+
libraryDependencies +=
4+
"ch.epfl.scala" % "scalafix-interfaces" % sys.props("interfaces.version")
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
resolvers += Resolver.sonatypeRepo("public")
22
addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % sys.props("plugin.version"))
3+
libraryDependencies +=
4+
"ch.epfl.scala" % "scalafix-interfaces" % sys.props("interfaces.version")

src/sbt-test/sbt-scalafix/scalafixEnable/project/plugins.sbt

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ resolvers += Resolver.sonatypeRepo("public")
22
addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % sys.props("plugin.version"))
33

44
// https://github.com/scalameta/scalameta/blob/v4.4.10/project/Versions.scala
5-
dependencyOverrides += "ch.epfl.scala" % "scalafix-interfaces" % "0.9.27" // scala-steward:off
5+
libraryDependencies += "ch.epfl.scala" % "scalafix-interfaces" % "0.9.27" // scala-steward:off
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
resolvers += Resolver.sonatypeRepo("public")
22
addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % sys.props("plugin.version"))
3+
libraryDependencies +=
4+
"ch.epfl.scala" % "scalafix-interfaces" % sys.props("interfaces.version")
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
resolvers += Resolver.sonatypeRepo("public")
22
addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % sys.props("plugin.version"))
3+
libraryDependencies +=
4+
"ch.epfl.scala" % "scalafix-interfaces" % sys.props("interfaces.version")
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
resolvers += Resolver.sonatypeRepo("public")
22
addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % sys.props("plugin.version"))
3+
libraryDependencies +=
4+
"ch.epfl.scala" % "scalafix-interfaces" % sys.props("interfaces.version")
35
libraryDependencies += "com.googlecode.java-diff-utils" % "diffutils" % "1.3.0"

src/sbt-test/sbt-scalafix/unavailable-semanticdb-scalac/build.sbt

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ checkLogs := {
1919
assert(
2020
logLines.exists(
2121
_.contains(
22-
"Please consider upgrading to a more recent version of sbt-scalafix and/or Scala, or uninstalling sbt-scalafix plugin"
22+
"Please consider upgrading to a more recent version of scalafix-interfaces and/or Scala, or uninstalling sbt-scalafix plugin"
2323
)
2424
)
2525
)
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
resolvers += Resolver.sonatypeRepo("public")
22
addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % sys.props("plugin.version"))
3+
libraryDependencies +=
4+
"ch.epfl.scala" % "scalafix-interfaces" % sys.props("interfaces.version")
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
resolvers += Resolver.sonatypeRepo("public")
22
addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % sys.props("plugin.version"))
3+
libraryDependencies +=
4+
"ch.epfl.scala" % "scalafix-interfaces" % sys.props("interfaces.version")
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
resolvers += Resolver.sonatypeRepo("public")
22
addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % sys.props("plugin.version"))
3+
libraryDependencies +=
4+
"ch.epfl.scala" % "scalafix-interfaces" % sys.props("interfaces.version")
35
addSbtPlugin("nl.gn0s1s" %% "sbt-dotenv" % "3.1.1")
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
resolvers += Resolver.sonatypeRepo("public")
22
addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % sys.props("plugin.version"))
3+
libraryDependencies +=
4+
"ch.epfl.scala" % "scalafix-interfaces" % sys.props("interfaces.version")
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
resolvers += Resolver.sonatypeRepo("public")
22
addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % sys.props("plugin.version"))
3+
libraryDependencies +=
4+
"ch.epfl.scala" % "scalafix-interfaces" % sys.props("interfaces.version")
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
resolvers += Resolver.sonatypeRepo("public")
22
addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % sys.props("plugin.version"))
3+
libraryDependencies +=
4+
"ch.epfl.scala" % "scalafix-interfaces" % sys.props("interfaces.version")
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
resolvers += Resolver.sonatypeRepo("public")
22
addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % sys.props("plugin.version"))
3+
libraryDependencies +=
4+
"ch.epfl.scala" % "scalafix-interfaces" % sys.props("interfaces.version")

src/sbt-test/skip-sbt1.4/testkit/project/plugins.sbt

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
resolvers += Resolver.sonatypeRepo("public")
22
addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % sys.props("plugin.version"))
3+
libraryDependencies +=
4+
"ch.epfl.scala" % "scalafix-interfaces" % sys.props("interfaces.version")
35

46
libraryDependencies ++= {
57
val sbtV = sbtBinaryVersion.value
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
resolvers += Resolver.sonatypeRepo("public")
22
addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % sys.props("plugin.version"))
3+
libraryDependencies +=
4+
"ch.epfl.scala" % "scalafix-interfaces" % sys.props("interfaces.version")
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
resolvers += Resolver.sonatypeRepo("public")
22
addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % sys.props("plugin.version"))
3+
libraryDependencies +=
4+
"ch.epfl.scala" % "scalafix-interfaces" % sys.props("interfaces.version")

src/test/scala/scalafix/internal/sbt/ScalafixAPISuite.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class ScalafixAPISuite extends AnyFunSuite {
3939
"2.12",
4040
Arg.ToolClasspath(
4141
Nil,
42-
List("ch.epfl.scala" %% "example-scalafix-rule" % "6.0.0"),
42+
List("ch.epfl.scala" %% "example-scalafix-rule" % "5.0.0"),
4343
Seq(
4444
Repository.central,
4545
MavenRepository.of(

0 commit comments

Comments
 (0)