From f4d2d3d6f9aba454b3c7fb9c45631ecf5c166f36 Mon Sep 17 00:00:00 2001 From: Matt Dziuban Date: Fri, 9 May 2025 11:08:22 -0400 Subject: [PATCH 1/4] Set the version policy intention to BinaryCompatible for upcoming changes. --- build.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index 08dd9613..a608ea8e 100644 --- a/build.sbt +++ b/build.sbt @@ -37,7 +37,7 @@ inThisBuild(Def.settings( Developer("sjrd", "Sébastien Doeraene", "sjrdoeraene@gmail.com", url("https://github.com/sjrd/")), Developer("bishabosha", "Jamie Thompson", "bishbashboshjt@gmail.com", url("https://github.com/bishabosha")), ), - versionPolicyIntention := Compatibility.BinaryAndSourceCompatible, + versionPolicyIntention := Compatibility.BinaryCompatible, // Ignore dependencies to internal modules whose version is like `1.2.3+4...` (see https://github.com/scalacenter/sbt-version-policy#how-to-integrate-with-sbt-dynver) versionPolicyIgnoredInternalDependencyVersions := Some("^\\d+\\.\\d+\\.\\d+\\+\\d+".r) )) From f48cdf4fd5a3f835228ecb0fbd1f76f082193f56 Mon Sep 17 00:00:00 2001 From: Matt Dziuban Date: Tue, 24 Jun 2025 11:24:13 +0200 Subject: [PATCH 2/4] Upgrade to Scala.js 1.19.0 and Scala 2.13.16. AnyRefMap is deprecated in favor of HashMap in Scala 2.13.16. We have to work around sbt-version-policy not understand how the version of scalajs-scalalib works. --- build.sbt | 11 ++++++++++- project/plugins.sbt | 2 +- .../tastyquery/reader/pickles/PickleReader.scala | 4 ++-- .../scala/tastyquery/reader/pickles/Unpickler.scala | 2 +- .../tastyquery/reader/tasties/TreeUnpickler.scala | 2 +- 5 files changed, 15 insertions(+), 6 deletions(-) diff --git a/build.sbt b/build.sbt index a608ea8e..f8d2bf91 100644 --- a/build.sbt +++ b/build.sbt @@ -5,7 +5,7 @@ import org.scalajs.jsenv.nodejs.NodeJSEnv val usedScalaCompiler = "3.6.2" val usedTastyRelease = usedScalaCompiler -val scala2Version = "2.13.14" +val scala2Version = "2.13.16" val SourceDeps = config("sourcedeps").hide @@ -126,6 +126,8 @@ lazy val tastyQuery = mimaBinaryIssueFilters ++= { import com.typesafe.tools.mima.core.* Seq( + // val in a private class; no issue + ProblemFilters.exclude[IncompatibleResultTypeProblem]("tastyquery.reader.tasties.TreeUnpickler#Caches.declaredTopLevelClasses"), ) }, @@ -162,6 +164,13 @@ lazy val tastyQuery = scalaJSUseMainModuleInitializer := true, scalaJSLinkerConfig ~= (_.withModuleKind(ModuleKind.CommonJSModule)), jsEnv := new NodeJSEnv(NodeJSEnv.Config().withArgs(List("--enable-source-maps"))), + + /* sbt-version-policy seems to think that the scalajs-scalalib is versioned + * according to the "strict" policy, although the pom files declare "semver-spec". + * We force it to "always" so that it does not report false positives. + * We trust Scala.js core to never break backward compatibility anyway. + */ + libraryDependencySchemes += "org.scala-js" % "scalajs-scalalib_2.13" % "always", ) def extractRTJar(targetRTJar: File): Unit = { diff --git a/project/plugins.sbt b/project/plugins.sbt index 7f7e4bce..f2f1c2b1 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,4 +1,4 @@ -addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.16.0") +addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.19.0") addSbtPlugin("org.portable-scala" % "sbt-scalajs-crossproject" % "1.3.2") addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.4.4") diff --git a/tasty-query/shared/src/main/scala/tastyquery/reader/pickles/PickleReader.scala b/tasty-query/shared/src/main/scala/tastyquery/reader/pickles/PickleReader.scala index 155ce69f..0d992ba8 100644 --- a/tasty-query/shared/src/main/scala/tastyquery/reader/pickles/PickleReader.scala +++ b/tasty-query/shared/src/main/scala/tastyquery/reader/pickles/PickleReader.scala @@ -31,9 +31,9 @@ private[pickles] class PickleReader { private var frozenSymbols: Boolean = false /** The map from created local symbols to the address of their info, until it gets read. */ - private val localSymbolInfoRefs = mutable.AnyRefMap.empty[TermOrTypeSymbol, Int] + private val localSymbolInfoRefs = mutable.HashMap.empty[TermOrTypeSymbol, Int] - private val localClassGivenSelfTypeRefs = mutable.AnyRefMap.empty[ClassSymbol, Int] + private val localClassGivenSelfTypeRefs = mutable.HashMap.empty[ClassSymbol, Int] final class Structure(using val myEntries: Entries, val myIndex: Index): def allRegisteredSymbols: Iterator[TermOrTypeSymbol] = diff --git a/tasty-query/shared/src/main/scala/tastyquery/reader/pickles/Unpickler.scala b/tasty-query/shared/src/main/scala/tastyquery/reader/pickles/Unpickler.scala index 08f9fa74..a8f36a9c 100644 --- a/tasty-query/shared/src/main/scala/tastyquery/reader/pickles/Unpickler.scala +++ b/tasty-query/shared/src/main/scala/tastyquery/reader/pickles/Unpickler.scala @@ -42,7 +42,7 @@ private[reader] object Unpickler { } // Read the annotations to give to the symbols we read - val annotationMap = mutable.AnyRefMap.empty[TermOrTypeSymbol, List[Annotation]] + val annotationMap = mutable.HashMap.empty[TermOrTypeSymbol, List[Annotation]] index.loopWithIndices { (offset, i) => if reader.isSymbolAnnotationEntry(i) then pkl.unsafeFork(offset) { diff --git a/tasty-query/shared/src/main/scala/tastyquery/reader/tasties/TreeUnpickler.scala b/tasty-query/shared/src/main/scala/tastyquery/reader/tasties/TreeUnpickler.scala index 89420eaf..3fcca481 100644 --- a/tasty-query/shared/src/main/scala/tastyquery/reader/tasties/TreeUnpickler.scala +++ b/tasty-query/shared/src/main/scala/tastyquery/reader/tasties/TreeUnpickler.scala @@ -1806,7 +1806,7 @@ private[tasties] object TreeUnpickler { * * This is used in `readWithin` to resolve top-level class references without a Context. */ - val declaredTopLevelClasses = mutable.AnyRefMap.empty[(PackageSymbol, TypeName), ClassSymbol] + val declaredTopLevelClasses = mutable.HashMap.empty[(PackageSymbol, TypeName), ClassSymbol] def hasSymbolAt(addr: Addr): Boolean = localSymbols.contains(addr) From d69bf4cc14733d126878be288f52918c8fa79993 Mon Sep 17 00:00:00 2001 From: Matt Dziuban Date: Fri, 9 May 2025 10:11:29 -0400 Subject: [PATCH 3/4] Upgrade to Scala 3.7.0. --- build.sbt | 5 +++-- .../scala/tastyquery/reader/classfiles/ClassfileParser.scala | 2 +- .../main/scala/tastyquery/reader/tasties/TastyFormat.scala | 2 +- .../shared/src/test/scala/tastyquery/PrintersTest.scala | 4 ++-- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/build.sbt b/build.sbt index f8d2bf91..4ba5894e 100644 --- a/build.sbt +++ b/build.sbt @@ -3,7 +3,7 @@ import sbt.internal.util.ManagedLogger import org.scalajs.jsenv.nodejs.NodeJSEnv -val usedScalaCompiler = "3.6.2" +val usedScalaCompiler = "3.7.0" val usedTastyRelease = usedScalaCompiler val scala2Version = "2.13.16" @@ -131,7 +131,8 @@ lazy val tastyQuery = ) }, - tastyMiMaPreviousArtifacts := mimaPreviousArtifacts.value, + // Temporarily disabled until we have a published version of tasty-query that can handle 3.7.x. + // tastyMiMaPreviousArtifacts := mimaPreviousArtifacts.value, tastyMiMaTastyQueryVersionOverride := Some("1.5.0"), tastyMiMaConfig ~= { prev => import tastymima.intf._ diff --git a/tasty-query/shared/src/main/scala/tastyquery/reader/classfiles/ClassfileParser.scala b/tasty-query/shared/src/main/scala/tastyquery/reader/classfiles/ClassfileParser.scala index d2c127da..b005db6e 100644 --- a/tasty-query/shared/src/main/scala/tastyquery/reader/classfiles/ClassfileParser.scala +++ b/tasty-query/shared/src/main/scala/tastyquery/reader/classfiles/ClassfileParser.scala @@ -132,7 +132,7 @@ private[reader] object ClassfileParser { .use(ClassfileReader.readAnnotation(Set(annot.ScalaLongSignature, annot.ScalaSignature))) .getOrElse(failNoAnnot()) - val sigBytes = scalaSigAnnotation.tpe match { + val sigBytes = (scalaSigAnnotation.tpe: @unchecked) match { case annot.ScalaSignature => val bytesArg = scalaSigAnnotation.values.head._2.asInstanceOf[AnnotationValue.Const] pool.sigbytes(bytesArg.valueIdx) diff --git a/tasty-query/shared/src/main/scala/tastyquery/reader/tasties/TastyFormat.scala b/tasty-query/shared/src/main/scala/tastyquery/reader/tasties/TastyFormat.scala index 2045f346..5c237bfe 100644 --- a/tasty-query/shared/src/main/scala/tastyquery/reader/tasties/TastyFormat.scala +++ b/tasty-query/shared/src/main/scala/tastyquery/reader/tasties/TastyFormat.scala @@ -296,7 +296,7 @@ private[tasties] object TastyFormat: * compatibility, but remains backwards compatible, with all * preceeding `MinorVersion`. */ - final val MinorVersion: Int = 6 + final val MinorVersion: Int = 7 /** Natural Number. The `ExperimentalVersion` allows for * experimentation with changes to TASTy without committing diff --git a/tasty-query/shared/src/test/scala/tastyquery/PrintersTest.scala b/tasty-query/shared/src/test/scala/tastyquery/PrintersTest.scala index 4e0fafaf..0feb13a2 100644 --- a/tasty-query/shared/src/test/scala/tastyquery/PrintersTest.scala +++ b/tasty-query/shared/src/test/scala/tastyquery/PrintersTest.scala @@ -229,7 +229,7 @@ class PrintersTest extends UnrestrictedUnpicklingSuite: testShowBasicMember( MatchTypeClass, typeName("MTWithBind"), - "type MTWithBind[X] <: t = X match { case List[t] => t }" + "type MTWithBind[X] = X match { case List[t] => t }" ) } @@ -315,7 +315,7 @@ class PrintersTest extends UnrestrictedUnpicklingSuite: testShowMultilineMember( MatchTypeClass, typeName("MTWithBind"), - """type MTWithBind[X] <: t = X match { + """type MTWithBind[X] = X match { | case List[t] => t |}""".stripMargin ) From 1d276c5a01e19415a205275cde08481a18760ec1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Doeraene?= Date: Tue, 24 Jun 2025 11:33:59 +0200 Subject: [PATCH 4/4] Upgrade to Scala 3.7.1. --- build.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index 4ba5894e..3826a0fc 100644 --- a/build.sbt +++ b/build.sbt @@ -3,7 +3,7 @@ import sbt.internal.util.ManagedLogger import org.scalajs.jsenv.nodejs.NodeJSEnv -val usedScalaCompiler = "3.7.0" +val usedScalaCompiler = "3.7.1" val usedTastyRelease = usedScalaCompiler val scala2Version = "2.13.16"