Skip to content

Commit 1b78736

Browse files
Add MiMa checks against LTS version (#19504)
This addition is mostly for documentation. It is important to keep track of the exceptional forward-breaking changes that we have done so far. Having a full list of backward-breaking changes might also be useful for debugging. It might also be useful long term for the day we move to the next LTS.
2 parents 4ed3838 + 80f6f92 commit 1b78736

File tree

2 files changed

+58
-2
lines changed

2 files changed

+58
-2
lines changed

project/Build.scala

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,9 @@ object Build {
103103
*/
104104
val previousDottyVersion = "3.4.0-RC1"
105105

106+
/** Version against which we check binary compatibility. */
107+
val ltsDottyVersion = "3.3.0"
108+
106109
object CompatMode {
107110
final val BinaryCompatible = 0
108111
final val SourceAndBinaryCompatible = 1
@@ -2163,6 +2166,14 @@ object Build {
21632166
(Compile/doc/target).value
21642167
},
21652168
commonMiMaSettings,
2169+
mimaPreviousArtifacts += {
2170+
val thisProjectID = projectID.value
2171+
val crossedName = thisProjectID.crossVersion match {
2172+
case cv: Disabled => thisProjectID.name
2173+
case cv: Binary => s"${thisProjectID.name}_${cv.prefix}3${cv.suffix}"
2174+
}
2175+
(thisProjectID.organization % crossedName % ltsDottyVersion)
2176+
},
21662177
mimaBackwardIssueFilters := MiMaFilters.LibraryBackwards,
21672178
mimaForwardIssueFilters := MiMaFilters.LibraryForward,
21682179
)

project/MiMaFilters.scala

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,29 @@ object MiMaFilters {
55
val LibraryBackwards: Map[String, Seq[ProblemFilter]] = Map(
66
// In general we should never have backwards incompatible changes in the library.
77
// Only exceptional cases should be added here.
8+
9+
// Breaking changes since last reference version
810
Build.previousDottyVersion -> Seq(
911
// This language feature was in 3.4.0-RC1 but will be removed in 3.4.0-RC2
1012
ProblemFilters.exclude[MissingFieldProblem]("scala.runtime.stdLibPatches.language#deprecated.ascriptionVarargsUnpacking"),
1113
ProblemFilters.exclude[MissingClassProblem]("scala.runtime.stdLibPatches.language$deprecated$ascriptionVarargsUnpacking$"),
12-
)
14+
),
15+
16+
// Breaking changes since last LTS
17+
Build.ltsDottyVersion -> Seq(
18+
// Quotes is assumed to only be implemented by the compiler and on the same version of the library.
19+
// It is exceptionally OK to break this compatibility. In these cases, there add new abstract methods that would
20+
// potentially not be implemented by others. If some other library decides to implement these,
21+
// they need to recompile and republish on each minor release.
22+
ProblemFilters.exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule.ValOrDefDefMethods"),
23+
ProblemFilters.exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule.ValOrDefDefTypeTest"),
24+
ProblemFilters.exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule#defnModule.FunctionClass"),
25+
ProblemFilters.exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule#defnModule.PolyFunctionClass"),
26+
ProblemFilters.exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule#FlagsModule.AbsOverride"),
27+
ProblemFilters.exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule#SymbolMethods.paramVariance"),
28+
ProblemFilters.exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule#TypeLambdaMethods.paramVariances"),
29+
ProblemFilters.exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule#TypeReprMethods.dealiasKeepOpaques"),
30+
),
1331
)
1432
val LibraryForward: Map[String, Seq[ProblemFilter]] = Map(
1533
// Additions that require a new minor version of the library
@@ -19,7 +37,34 @@ object MiMaFilters {
1937
ProblemFilters.exclude[MissingFieldProblem]("scala.runtime.stdLibPatches.language.3.5"),
2038
ProblemFilters.exclude[MissingClassProblem]("scala.runtime.stdLibPatches.language$3$u002E5$"),
2139
ProblemFilters.exclude[MissingClassProblem]("scala.runtime.stdLibPatches.language$3$u002E5$minusmigration$"),
22-
)
40+
),
41+
42+
// Additions since last LTS
43+
Build.ltsDottyVersion -> Seq(
44+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule.ValOrDefDefMethods"),
45+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule.ValOrDefDefTypeTest"),
46+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule#defnModule.FunctionClass"),
47+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule#defnModule.PolyFunctionClass"),
48+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule#FlagsModule.AbsOverride"),
49+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule#SymbolMethods.paramVariance"),
50+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule#TypeLambdaMethods.paramVariances"),
51+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule#TypeReprMethods.dealiasKeepOpaques"),
52+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.runtime.Tuples.reverse"),
53+
ProblemFilters.exclude[MissingClassProblem]("scala.annotation.internal.AssignedNonLocally"),
54+
ProblemFilters.exclude[MissingClassProblem]("scala.annotation.internal.CaptureChecked"),
55+
ProblemFilters.exclude[MissingClassProblem]("scala.annotation.internal.reachCapability"),
56+
ProblemFilters.exclude[MissingClassProblem]("scala.annotation.unchecked.uncheckedCaptures"),
57+
ProblemFilters.exclude[MissingClassProblem]("scala.quoted.Quotes$reflectModule$ValOrDefDefMethods"),
58+
ProblemFilters.exclude[MissingClassProblem]("scala.runtime.stdLibPatches.language$3$u002E4$"),
59+
ProblemFilters.exclude[MissingClassProblem]("scala.runtime.stdLibPatches.language$3$u002E4$minusmigration$"),
60+
ProblemFilters.exclude[MissingClassProblem]("scala.runtime.stdLibPatches.language$experimental$clauseInterleaving$"),
61+
ProblemFilters.exclude[MissingClassProblem]("scala.runtime.stdLibPatches.language$experimental$relaxedExtensionImports$"),
62+
ProblemFilters.exclude[MissingClassProblem]("scala.scalajs.runtime.AnonFunctionXXL"),
63+
ProblemFilters.exclude[MissingFieldProblem]("scala.runtime.stdLibPatches.language.3.4-migration"),
64+
ProblemFilters.exclude[MissingFieldProblem]("scala.runtime.stdLibPatches.language.3.4"),
65+
ProblemFilters.exclude[MissingFieldProblem]("scala.runtime.stdLibPatches.language#experimental.clauseInterleaving"),
66+
ProblemFilters.exclude[MissingFieldProblem]("scala.runtime.stdLibPatches.language#experimental.relaxedExtensionImports"),
67+
),
2368
)
2469
val TastyCore: Seq[ProblemFilter] = Seq(
2570
)

0 commit comments

Comments
 (0)