From 4ffa7ed41dfd4111d888504da8f4abc662aa325c Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Fri, 13 May 2022 16:31:13 +0100 Subject: [PATCH 1/2] make sbt-version-policy allow us to release 1.1.3 in order to release 1.1.x patch release, we must: * make some source adjustments to preserve forward binary compatibility * change our `versionPolicyIntention` to require bidirectional compatibility, otherwise sbt-version-policy won't let us call it 1.1.3 --- build.sbt | 18 ++++++++++++++++-- .../util/parsing/combinator/Parsers.scala | 9 +++++---- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/build.sbt b/build.sbt index d7e5aaad..bbd03ac2 100644 --- a/build.sbt +++ b/build.sbt @@ -12,7 +12,7 @@ val commonSettings = Seq( if (scalaVersion.value.startsWith("3")) Compatibility.None else - Compatibility.BinaryCompatible + Compatibility.BinaryAndSourceCompatible } ) @@ -92,9 +92,23 @@ lazy val parserCombinators = crossProject(JVMPlatform, JSPlatform, NativePlatfor mimaBinaryIssueFilters ++= { import com.typesafe.tools.mima.core._, ProblemFilters._ Seq( - // these are safe to exclude because they're `private[combinator]` + // these are safe to exclude because they're `private[parsing]` + exclude[DirectMissingMethodProblem ]("scala.util.parsing.combinator.Parsers.Success"), exclude[ReversedMissingMethodProblem]("scala.util.parsing.combinator.Parsers.Success"), + exclude[DirectMissingMethodProblem ]("scala.util.parsing.combinator.lexical.Lexical.Success"), + exclude[ReversedMissingMethodProblem]("scala.util.parsing.combinator.lexical.Lexical.Success"), + exclude[DirectMissingMethodProblem ]("scala.util.parsing.combinator.Parsers.selectLastFailure"), exclude[ReversedMissingMethodProblem]("scala.util.parsing.combinator.Parsers.selectLastFailure"), + exclude[DirectMissingMethodProblem ]("scala.util.parsing.combinator.lexical.Lexical.selectLastFailure"), + exclude[ReversedMissingMethodProblem]("scala.util.parsing.combinator.lexical.Lexical.selectLastFailure"), + exclude[DirectMissingMethodProblem ]("scala.util.parsing.combinator.syntactical.StandardTokenParsers.Success"), + exclude[ReversedMissingMethodProblem]("scala.util.parsing.combinator.syntactical.StandardTokenParsers.Success"), + exclude[DirectMissingMethodProblem ]("scala.util.parsing.combinator.syntactical.StandardTokenParsers.selectLastFailure"), + exclude[ReversedMissingMethodProblem]("scala.util.parsing.combinator.syntactical.StandardTokenParsers.selectLastFailure"), + exclude[DirectMissingMethodProblem ]("scala.util.parsing.json.Parser.Success"), + exclude[ReversedMissingMethodProblem]("scala.util.parsing.json.Parser.Success"), + exclude[DirectMissingMethodProblem ]("scala.util.parsing.json.Parser.selectLastFailure"), + exclude[ReversedMissingMethodProblem]("scala.util.parsing.json.Parser.selectLastFailure"), ) }, ) diff --git a/shared/src/main/scala/scala/util/parsing/combinator/Parsers.scala b/shared/src/main/scala/scala/util/parsing/combinator/Parsers.scala index b40f8b10..be076309 100644 --- a/shared/src/main/scala/scala/util/parsing/combinator/Parsers.scala +++ b/shared/src/main/scala/scala/util/parsing/combinator/Parsers.scala @@ -11,7 +11,8 @@ */ package scala -package util.parsing.combinator +package util.parsing +package combinator import scala.util.parsing.input._ import scala.collection.mutable.ListBuffer @@ -132,7 +133,7 @@ trait Parsers { * @param next The parser's remaining input */ case class Success[+T](result: T, override val next: Input) extends ParseResult[T] { - def lastFailure: Option[Failure] = None + private[parsing] def lastFailure: Option[Failure] = None def map[U](f: T => U) = Success(f(result), next, lastFailure) @@ -223,10 +224,10 @@ trait Parsers { def Parser[T](f: Input => ParseResult[T]): Parser[T] = new Parser[T]{ def apply(in: Input) = f(in) } - private[combinator] def Success[U](res: U, next: Input, failure: Option[Failure]): Success[U] = + private[parsing] def Success[U](res: U, next: Input, failure: Option[Failure]): Success[U] = new Success(res, next) { override val lastFailure: Option[Failure] = failure } - private[combinator] def selectLastFailure(failure0: Option[Failure], failure1: Option[Failure]): Option[Failure] = + private[parsing] def selectLastFailure(failure0: Option[Failure], failure1: Option[Failure]): Option[Failure] = (failure0, failure1) match { case (Some(f0), Some(f1)) => if(f0.next.pos < f1.next.pos) Some(f1) From d17d61ab2670d86d6f0b6d33f4ca58533b90fba2 Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Fri, 13 May 2022 17:23:37 +0100 Subject: [PATCH 2/2] exempt JS from versionPolicyCheck, for now at least --- build.sbt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/build.sbt b/build.sbt index bbd03ac2..7f149a73 100644 --- a/build.sbt +++ b/build.sbt @@ -117,6 +117,9 @@ lazy val parserCombinators = crossProject(JVMPlatform, JSPlatform, NativePlatfor OsgiKeys.exportPackage := Seq(s"scala.util.parsing.*;version=${version.value}"), ) .jsSettings( + // this is failing because between 1.1.2 and 1.1.3 we upgraded Scala.js from + // 1.0.0 to 1.10.0. I think we can re-enable this once we've published 1.1.3? + versionPolicyCheck / skip := true, // mystified why https://github.com/scala-js/scala-js/issues/635 would be rearing its head, // but only on sbt 1.4 + 2.13 and only in Test config?! WEIRD Test / doc / scalacOptions ++= (CrossVersion.partialVersion(scalaVersion.value) match {