From 860dceb3e96504b51a81805b00c147df427e9cbb Mon Sep 17 00:00:00 2001 From: Philippus Date: Sun, 8 Mar 2020 11:41:06 +0100 Subject: [PATCH 01/14] Add dotty to cross-build --- .travis.yml | 6 ++++++ build.sbt | 1 + project/plugins.sbt | 2 ++ 3 files changed, 9 insertions(+) diff --git a/.travis.yml b/.travis.yml index 74a91032..57370e58 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,6 +5,7 @@ import: scala/scala-dev:travis/default.yml language: scala scala: + - 0.22.0-RC1 - 2.11.12 - 2.12.10 - 2.13.1 @@ -16,6 +17,11 @@ env: - ADOPTOPENJDK=11 SCALAJS_VERSION= matrix: + exclude: + - scala: 0.22.0-RC1 + env: ADOPTOPENJDK=8 SCALAJS_VERSION=0.6.32 + - scala: 0.22.0-RC1 + env: ADOPTOPENJDK=8 SCALAJS_VERSION=1.0.1 include: - scala: 2.11.12 env: ADOPTOPENJDK=8 SCALANATIVE_VERSION=0.3.9 diff --git a/build.sbt b/build.sbt index 94478d91..ed0bf909 100644 --- a/build.sbt +++ b/build.sbt @@ -26,6 +26,7 @@ lazy val parserCombinators = crossProject(JVMPlatform, JSPlatform, NativePlatfor (unmanagedSourceDirectories in Compile).value.map { dir => CrossVersion.partialVersion(scalaVersion.value) match { case Some((2, 13)) => file(dir.getPath ++ "-2.13+") + case Some((0, _)) => file(dir.getPath ++ "-2.13+") case _ => file(dir.getPath ++ "-2.13-") } } diff --git a/project/plugins.sbt b/project/plugins.sbt index 1d7924ab..8be59ac1 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -11,3 +11,5 @@ addSbtPlugin("org.scala-js" % "sbt-scalajs" % scalaJSVersion) addSbtPlugin("org.portable-scala" % "sbt-scala-native-crossproject" % "1.0.0") addSbtPlugin("org.scala-native" % "sbt-scala-native" % scalaNativeVersion) + +addSbtPlugin("ch.epfl.lamp" % "sbt-dotty" % "0.4.0") From 28a2798dbbad3ebad15cb197ae1e9a66b1e98532 Mon Sep 17 00:00:00 2001 From: Philippus Date: Sun, 8 Mar 2020 12:00:50 +0100 Subject: [PATCH 02/14] Add import clauses for ImplicitConversions --- .../scala/scala/util/parsing/combinator/JavaTokenParsers.scala | 1 + .../scala/scala/util/parsing/combinator/lexical/StdLexical.scala | 1 + 2 files changed, 2 insertions(+) diff --git a/shared/src/main/scala/scala/util/parsing/combinator/JavaTokenParsers.scala b/shared/src/main/scala/scala/util/parsing/combinator/JavaTokenParsers.scala index 29efed2d..686c17e7 100644 --- a/shared/src/main/scala/scala/util/parsing/combinator/JavaTokenParsers.scala +++ b/shared/src/main/scala/scala/util/parsing/combinator/JavaTokenParsers.scala @@ -14,6 +14,7 @@ package scala package util.parsing.combinator import scala.annotation.migration +import scala.language.implicitConversions /** `JavaTokenParsers` differs from [[scala.util.parsing.combinator.RegexParsers]] * by adding the following definitions: diff --git a/shared/src/main/scala/scala/util/parsing/combinator/lexical/StdLexical.scala b/shared/src/main/scala/scala/util/parsing/combinator/lexical/StdLexical.scala index 841399c9..b535eacf 100644 --- a/shared/src/main/scala/scala/util/parsing/combinator/lexical/StdLexical.scala +++ b/shared/src/main/scala/scala/util/parsing/combinator/lexical/StdLexical.scala @@ -18,6 +18,7 @@ package lexical import token._ import input.CharArrayReader.EofCh import scala.collection.mutable +import scala.language.implicitConversions /** This component provides a standard lexical parser for a simple, * [[http://scala-lang.org Scala]]-like language. It parses keywords and From 53d487a94bdcd918298956990bee07b5ace1a15e Mon Sep 17 00:00:00 2001 From: Philippus Date: Sun, 8 Mar 2020 12:01:28 +0100 Subject: [PATCH 03/14] Add result types of implicit definitions --- .../util/parsing/combinator/ImplicitConversions.scala | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/shared/src/main/scala/scala/util/parsing/combinator/ImplicitConversions.scala b/shared/src/main/scala/scala/util/parsing/combinator/ImplicitConversions.scala index 25f7a681..a11308ff 100644 --- a/shared/src/main/scala/scala/util/parsing/combinator/ImplicitConversions.scala +++ b/shared/src/main/scala/scala/util/parsing/combinator/ImplicitConversions.scala @@ -33,14 +33,14 @@ import scala.language.implicitConversions * @author Adriaan Moors */ trait ImplicitConversions { self: Parsers => - implicit def flatten2[A, B, C] (f: (A, B) => C) = + implicit def flatten2[A, B, C] (f: (A, B) => C): A ~ B => C = (p: ~[A, B]) => p match {case a ~ b => f(a, b)} - implicit def flatten3[A, B, C, D] (f: (A, B, C) => D) = + implicit def flatten3[A, B, C, D] (f: (A, B, C) => D): A ~ B ~ C => D = (p: ~[~[A, B], C]) => p match {case a ~ b ~ c => f(a, b, c)} - implicit def flatten4[A, B, C, D, E] (f: (A, B, C, D) => E) = + implicit def flatten4[A, B, C, D, E] (f: (A, B, C, D) => E): A ~ B ~ C ~ D => E = (p: ~[~[~[A, B], C], D]) => p match {case a ~ b ~ c ~ d => f(a, b, c, d)} - implicit def flatten5[A, B, C, D, E, F](f: (A, B, C, D, E) => F) = + implicit def flatten5[A, B, C, D, E, F](f: (A, B, C, D, E) => F): A ~ B ~ C ~ D ~ E => F = (p: ~[~[~[~[A, B], C], D], E]) => p match {case a ~ b ~ c ~ d ~ e=> f(a, b, c, d, e)} - implicit def headOptionTailToFunList[A, T] (f: List[A] => T)= + implicit def headOptionTailToFunList[A, T] (f: List[A] => T): A ~ Option[List[A]] => T = (p: ~[A, Option[List[A]]]) => f(p._1 :: (p._2 match { case Some(xs) => xs case None => Nil})) } From e761e67459ed87f3191993b0409bda5dfa9ca514 Mon Sep 17 00:00:00 2001 From: Philippus Date: Sun, 8 Mar 2020 12:22:48 +0100 Subject: [PATCH 04/14] Pass -language:Scala2 to dotty --- build.sbt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index ed0bf909..5bf0afda 100644 --- a/build.sbt +++ b/build.sbt @@ -20,7 +20,9 @@ lazy val parserCombinators = crossProject(JVMPlatform, JSPlatform, NativePlatfor "-doc-title", "Scala Parser Combinators", "-doc-version", - version.value + version.value, + if (isDotty.value) "-language:Scala2" + else "" ), unmanagedSourceDirectories in Compile ++= { (unmanagedSourceDirectories in Compile).value.map { dir => From a0a0107713a8a6f3e0d483e4eb0174315ea08f8a Mon Sep 17 00:00:00 2001 From: Philippus Date: Sun, 8 Mar 2020 13:00:43 +0100 Subject: [PATCH 05/14] Add type annotation --- .../parsing/combinator/syntactical/StandardTokenParsers.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared/src/main/scala/scala/util/parsing/combinator/syntactical/StandardTokenParsers.scala b/shared/src/main/scala/scala/util/parsing/combinator/syntactical/StandardTokenParsers.scala index 7ac9b7c2..6cf5876a 100644 --- a/shared/src/main/scala/scala/util/parsing/combinator/syntactical/StandardTokenParsers.scala +++ b/shared/src/main/scala/scala/util/parsing/combinator/syntactical/StandardTokenParsers.scala @@ -25,7 +25,7 @@ import scala.language.implicitConversions */ class StandardTokenParsers extends StdTokenParsers { type Tokens = StdTokens - val lexical = new StdLexical + val lexical: StdLexical = new StdLexical() //an implicit keyword function that gives a warning when a given word is not in the reserved/delimiters list override implicit def keyword(chars : String): Parser[String] = From e3e104f32e11f0f4d75d32d31dadd2a5ccaad5e0 Mon Sep 17 00:00:00 2001 From: Philippus Date: Sun, 8 Mar 2020 14:00:21 +0100 Subject: [PATCH 06/14] Add import clauses for ImplicitConversions --- .../scala/util/parsing/combinator/JavaTokenParsersTest.scala | 1 + .../scala/util/parsing/combinator/PackratParsersTest.scala | 1 + .../scala/scala/util/parsing/combinator/RegexParsersTest.scala | 2 ++ shared/src/test/scala/scala/util/parsing/combinator/gh242.scala | 1 + shared/src/test/scala/scala/util/parsing/combinator/gh29.scala | 1 + shared/src/test/scala/scala/util/parsing/combinator/gh45.scala | 1 + shared/src/test/scala/scala/util/parsing/combinator/gh72.scala | 1 + shared/src/test/scala/scala/util/parsing/combinator/t0700.scala | 1 + shared/src/test/scala/scala/util/parsing/combinator/t1229.scala | 1 + shared/src/test/scala/scala/util/parsing/combinator/t3212.scala | 1 + shared/src/test/scala/scala/util/parsing/combinator/t5514.scala | 1 + shared/src/test/scala/scala/util/parsing/combinator/t5669.scala | 1 + shared/src/test/scala/scala/util/parsing/combinator/t6067.scala | 1 + shared/src/test/scala/scala/util/parsing/combinator/t6464.scala | 1 + .../scala/scala/util/parsing/input/OffsetPositionTest.scala | 1 + shared/src/test/scala/scala/util/parsing/input/gh178.scala | 1 + shared/src/test/scala/scala/util/parsing/input/gh64.scala | 1 + 17 files changed, 18 insertions(+) diff --git a/shared/src/test/scala/scala/util/parsing/combinator/JavaTokenParsersTest.scala b/shared/src/test/scala/scala/util/parsing/combinator/JavaTokenParsersTest.scala index 8db4b19f..40d045a5 100644 --- a/shared/src/test/scala/scala/util/parsing/combinator/JavaTokenParsersTest.scala +++ b/shared/src/test/scala/scala/util/parsing/combinator/JavaTokenParsersTest.scala @@ -1,5 +1,6 @@ package scala.util.parsing.combinator +import scala.language.implicitConversions import scala.util.parsing.input.CharArrayReader import org.junit.Test diff --git a/shared/src/test/scala/scala/util/parsing/combinator/PackratParsersTest.scala b/shared/src/test/scala/scala/util/parsing/combinator/PackratParsersTest.scala index c8ffe721..d0271d61 100644 --- a/shared/src/test/scala/scala/util/parsing/combinator/PackratParsersTest.scala +++ b/shared/src/test/scala/scala/util/parsing/combinator/PackratParsersTest.scala @@ -4,6 +4,7 @@ import org.junit.Test import org.junit.Assert.assertEquals import org.junit.Assert.assertTrue +import scala.language.implicitConversions import scala.util.parsing.combinator.syntactical.StandardTokenParsers class PackratParsersTest { diff --git a/shared/src/test/scala/scala/util/parsing/combinator/RegexParsersTest.scala b/shared/src/test/scala/scala/util/parsing/combinator/RegexParsersTest.scala index f1c0aafe..bcc08967 100644 --- a/shared/src/test/scala/scala/util/parsing/combinator/RegexParsersTest.scala +++ b/shared/src/test/scala/scala/util/parsing/combinator/RegexParsersTest.scala @@ -1,5 +1,7 @@ package scala.util.parsing.combinator +import scala.language.implicitConversions + import org.junit.Test import org.junit.Assert.{ assertEquals, assertTrue } diff --git a/shared/src/test/scala/scala/util/parsing/combinator/gh242.scala b/shared/src/test/scala/scala/util/parsing/combinator/gh242.scala index 2fe21170..f8c65925 100644 --- a/shared/src/test/scala/scala/util/parsing/combinator/gh242.scala +++ b/shared/src/test/scala/scala/util/parsing/combinator/gh242.scala @@ -1,6 +1,7 @@ import org.junit.Assert.assertEquals import org.junit.Test +import scala.language.implicitConversions import scala.util.parsing.combinator.Parsers import scala.util.parsing.input.CharSequenceReader diff --git a/shared/src/test/scala/scala/util/parsing/combinator/gh29.scala b/shared/src/test/scala/scala/util/parsing/combinator/gh29.scala index 39b68667..906ed03b 100644 --- a/shared/src/test/scala/scala/util/parsing/combinator/gh29.scala +++ b/shared/src/test/scala/scala/util/parsing/combinator/gh29.scala @@ -2,6 +2,7 @@ package scala.util.parsing.combinator import org.junit.Test import org.junit.Assert.assertEquals +import scala.language.implicitConversions class gh29 { object Foo extends JavaTokenParsers { diff --git a/shared/src/test/scala/scala/util/parsing/combinator/gh45.scala b/shared/src/test/scala/scala/util/parsing/combinator/gh45.scala index ee685116..ab11cf46 100644 --- a/shared/src/test/scala/scala/util/parsing/combinator/gh45.scala +++ b/shared/src/test/scala/scala/util/parsing/combinator/gh45.scala @@ -1,5 +1,6 @@ package scala.util.parsing.combinator +import scala.language.implicitConversions import scala.util.parsing.input._ import org.junit.Test diff --git a/shared/src/test/scala/scala/util/parsing/combinator/gh72.scala b/shared/src/test/scala/scala/util/parsing/combinator/gh72.scala index 306fb331..2321d107 100644 --- a/shared/src/test/scala/scala/util/parsing/combinator/gh72.scala +++ b/shared/src/test/scala/scala/util/parsing/combinator/gh72.scala @@ -1,3 +1,4 @@ +import scala.language.implicitConversions import scala.util.parsing.combinator.Parsers import scala.util.parsing.input.CharSequenceReader diff --git a/shared/src/test/scala/scala/util/parsing/combinator/t0700.scala b/shared/src/test/scala/scala/util/parsing/combinator/t0700.scala index 97fe69ff..c7b94f68 100644 --- a/shared/src/test/scala/scala/util/parsing/combinator/t0700.scala +++ b/shared/src/test/scala/scala/util/parsing/combinator/t0700.scala @@ -1,5 +1,6 @@ import java.io.{File,StringReader} +import scala.language.implicitConversions import scala.util.parsing.combinator.Parsers import scala.util.parsing.input.{CharArrayReader, StreamReader} diff --git a/shared/src/test/scala/scala/util/parsing/combinator/t1229.scala b/shared/src/test/scala/scala/util/parsing/combinator/t1229.scala index a4b06465..7ecedf9c 100644 --- a/shared/src/test/scala/scala/util/parsing/combinator/t1229.scala +++ b/shared/src/test/scala/scala/util/parsing/combinator/t1229.scala @@ -2,6 +2,7 @@ import scala.util.parsing.combinator.RegexParsers import org.junit.Test import org.junit.Assert.assertEquals +import scala.language.implicitConversions class t1229 extends RegexParsers { val number = """0|[1-9]\d*""".r ^^ { _.toInt } diff --git a/shared/src/test/scala/scala/util/parsing/combinator/t3212.scala b/shared/src/test/scala/scala/util/parsing/combinator/t3212.scala index b48f811e..1b24e607 100644 --- a/shared/src/test/scala/scala/util/parsing/combinator/t3212.scala +++ b/shared/src/test/scala/scala/util/parsing/combinator/t3212.scala @@ -2,6 +2,7 @@ package scala.util.parsing.combinator import org.junit.Test import org.junit.Assert.assertEquals +import scala.language.implicitConversions class t3212 extends RegexParsers { diff --git a/shared/src/test/scala/scala/util/parsing/combinator/t5514.scala b/shared/src/test/scala/scala/util/parsing/combinator/t5514.scala index 310dd480..72522036 100644 --- a/shared/src/test/scala/scala/util/parsing/combinator/t5514.scala +++ b/shared/src/test/scala/scala/util/parsing/combinator/t5514.scala @@ -1,3 +1,4 @@ +import scala.language.implicitConversions import scala.util.parsing.combinator.Parsers import scala.util.parsing.input.Reader import scala.util.parsing.input.Position diff --git a/shared/src/test/scala/scala/util/parsing/combinator/t5669.scala b/shared/src/test/scala/scala/util/parsing/combinator/t5669.scala index a03f4d6a..25b5cb56 100644 --- a/shared/src/test/scala/scala/util/parsing/combinator/t5669.scala +++ b/shared/src/test/scala/scala/util/parsing/combinator/t5669.scala @@ -1,5 +1,6 @@ package scala.util.parsing.combinator +import scala.language.implicitConversions import scala.util.parsing.input.OffsetPosition import org.junit.Test diff --git a/shared/src/test/scala/scala/util/parsing/combinator/t6067.scala b/shared/src/test/scala/scala/util/parsing/combinator/t6067.scala index 709e42e4..a5c80a06 100644 --- a/shared/src/test/scala/scala/util/parsing/combinator/t6067.scala +++ b/shared/src/test/scala/scala/util/parsing/combinator/t6067.scala @@ -2,6 +2,7 @@ import scala.util.parsing.combinator._ import org.junit.Test import org.junit.Assert.assertEquals +import scala.language.implicitConversions class t6067 extends RegexParsers { object TestParser extends RegexParsers { diff --git a/shared/src/test/scala/scala/util/parsing/combinator/t6464.scala b/shared/src/test/scala/scala/util/parsing/combinator/t6464.scala index f1f1e264..a0949d76 100644 --- a/shared/src/test/scala/scala/util/parsing/combinator/t6464.scala +++ b/shared/src/test/scala/scala/util/parsing/combinator/t6464.scala @@ -1,3 +1,4 @@ +import scala.language.implicitConversions import scala.util.parsing.input.CharSequenceReader import scala.util.parsing.combinator.RegexParsers diff --git a/shared/src/test/scala/scala/util/parsing/input/OffsetPositionTest.scala b/shared/src/test/scala/scala/util/parsing/input/OffsetPositionTest.scala index 76085a83..065cb0e2 100644 --- a/shared/src/test/scala/scala/util/parsing/input/OffsetPositionTest.scala +++ b/shared/src/test/scala/scala/util/parsing/input/OffsetPositionTest.scala @@ -2,6 +2,7 @@ package scala.util.parsing.input import org.junit.Test import org.junit.Assert.assertEquals +import scala.language.implicitConversions class OffsetPositionTest { @Test diff --git a/shared/src/test/scala/scala/util/parsing/input/gh178.scala b/shared/src/test/scala/scala/util/parsing/input/gh178.scala index 7e62d083..0ab9ead2 100644 --- a/shared/src/test/scala/scala/util/parsing/input/gh178.scala +++ b/shared/src/test/scala/scala/util/parsing/input/gh178.scala @@ -2,6 +2,7 @@ package scala.util.parsing.input import org.junit.Assert.assertEquals import org.junit.Test +import scala.language.implicitConversions class gh178 { diff --git a/shared/src/test/scala/scala/util/parsing/input/gh64.scala b/shared/src/test/scala/scala/util/parsing/input/gh64.scala index 0d6da46a..20b69849 100644 --- a/shared/src/test/scala/scala/util/parsing/input/gh64.scala +++ b/shared/src/test/scala/scala/util/parsing/input/gh64.scala @@ -2,6 +2,7 @@ package scala.util.parsing.input import org.junit.Assert._ import org.junit.Test +import scala.language.implicitConversions class gh64 { From e0e031cf63f5b42c892fc2bb72f11446405b0fcc Mon Sep 17 00:00:00 2001 From: Philippus Date: Sun, 8 Mar 2020 14:01:27 +0100 Subject: [PATCH 07/14] Indent properly --- .../parsing/combinator/PackratParsersTest.scala | 16 ++++++++-------- .../scala/util/parsing/combinator/t1100.scala | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/shared/src/test/scala/scala/util/parsing/combinator/PackratParsersTest.scala b/shared/src/test/scala/scala/util/parsing/combinator/PackratParsersTest.scala index d0271d61..b9b59a6c 100644 --- a/shared/src/test/scala/scala/util/parsing/combinator/PackratParsersTest.scala +++ b/shared/src/test/scala/scala/util/parsing/combinator/PackratParsersTest.scala @@ -140,14 +140,14 @@ private object grammars1 extends StandardTokenParsers with PackratParsers { */ - val term: PackratParser[Int] = (term~("+"~>fact) ^^ {case x~y => x+y} - |term~("-"~>fact) ^^ {case x~y => x-y} - |fact) - - val fact: PackratParser[Int] = (fact~("*"~>numericLit) ^^ {case x~y => x*y.toInt} - |fact~("/"~>numericLit) ^^ {case x~y => x/y.toInt} - |"("~>term<~")" - |numericLit ^^ {_.toInt}) + val term: PackratParser[Int] = (term~("+"~>fact) ^^ {case x~y => x+y} + |term~("-"~>fact) ^^ {case x~y => x-y} + |fact) + + val fact: PackratParser[Int] = (fact~("*"~>numericLit) ^^ {case x~y => x*y.toInt} + |fact~("/"~>numericLit) ^^ {case x~y => x/y.toInt} + |"("~>term<~")" + |numericLit ^^ {_.toInt}) } private object grammars2 extends StandardTokenParsers with PackratParsers { diff --git a/shared/src/test/scala/scala/util/parsing/combinator/t1100.scala b/shared/src/test/scala/scala/util/parsing/combinator/t1100.scala index 3f8c7d2b..e7a85748 100644 --- a/shared/src/test/scala/scala/util/parsing/combinator/t1100.scala +++ b/shared/src/test/scala/scala/util/parsing/combinator/t1100.scala @@ -12,7 +12,7 @@ class T1100 { def p1: Parser[Char] = accept('a') | err("errors are propagated") } -val expected = """[1.4] error: errors are propagated + val expected = """[1.4] error: errors are propagated aaab ^""" From c1fbc3c88a97966c86b6bf3b5a5c15bb9480d84e Mon Sep 17 00:00:00 2001 From: Philippus Date: Sun, 8 Mar 2020 14:07:22 +0100 Subject: [PATCH 08/14] Add cases for exhaustivity --- .../scala/util/parsing/combinator/PackratParsersTest.scala | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/shared/src/test/scala/scala/util/parsing/combinator/PackratParsersTest.scala b/shared/src/test/scala/scala/util/parsing/combinator/PackratParsersTest.scala index b9b59a6c..f95d45ec 100644 --- a/shared/src/test/scala/scala/util/parsing/combinator/PackratParsersTest.scala +++ b/shared/src/test/scala/scala/util/parsing/combinator/PackratParsersTest.scala @@ -17,6 +17,8 @@ class PackratParsersTest { def extractResult(r : ParseResult[Int]): Int = r match { case Success(a,_) => a case NoSuccess(a,_) => sys.error(a) + case Failure(a, _) => sys.error(a) + case Error(a, _) => sys.error(a) } def check(expected: Int, expr: String): Unit = { val parseResult = head(new lexical.Scanner(expr)) @@ -71,6 +73,8 @@ class PackratParsersTest { def extractResult(r : ParseResult[Int]): Int = r match { case Success(a,_) => a case NoSuccess(a,_) => sys.error(a) + case Failure(a, _) => sys.error(a) + case Error(a, _) => sys.error(a) } def check(expected: Int, expr: String): Unit = { val parseResult = head(new lexical.Scanner(expr)) @@ -94,6 +98,8 @@ class PackratParsersTest { def extractResult(r: ParseResult[AnBnCnResult]): AnBnCnResult = r match { case Success(a,_) => a case NoSuccess(a,_) => sys.error(a) + case Failure(a, _) => sys.error(a) + case Error(a, _) => sys.error(a) } def threeLists(as: List[Symbol], bs: List[Symbol], cs: List[Symbol]): AnBnCnResult = { val as1 = as.map(_.name) From fef93313810f341f00c92574412b4bebd4b67679 Mon Sep 17 00:00:00 2001 From: Philippus Date: Sun, 8 Mar 2020 14:08:45 +0100 Subject: [PATCH 09/14] Convert es explicitly using the implicit f --- .../main/scala/scala/util/parsing/combinator/Parsers.scala | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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 4f50225e..c260b443 100644 --- a/shared/src/main/scala/scala/util/parsing/combinator/Parsers.scala +++ b/shared/src/main/scala/scala/util/parsing/combinator/Parsers.scala @@ -663,8 +663,9 @@ trait Parsers { * @param es the list of expected elements * @return a Parser that recognizes a specified list of elements */ - def acceptSeq[ES](es: ES)(implicit f: ES => Iterable[Elem]): Parser[List[Elem]] = - es.foldRight[Parser[List[Elem]]](success(Nil)){(x, pxs) => accept(x) ~ pxs ^^ mkList} + def acceptSeq[ES](es: ES)(implicit f: ES => Iterable[Elem]): Parser[List[Elem]] = { + f(es).foldRight[Parser[List[Elem]]](success(Nil)){(x, pxs) => accept(x) ~ pxs ^^ mkList} + } /** A parser that always fails. * From 2775891c9f72f6d106d5a838c7d06439866b7033 Mon Sep 17 00:00:00 2001 From: Philippus Date: Sun, 8 Mar 2020 14:37:20 +0100 Subject: [PATCH 10/14] Check type using isInstanceOf --- .../scala/scala/util/parsing/combinator/PackratParsers.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared/src/main/scala/scala/util/parsing/combinator/PackratParsers.scala b/shared/src/main/scala/scala/util/parsing/combinator/PackratParsers.scala index 17e5f893..07fbc152 100644 --- a/shared/src/main/scala/scala/util/parsing/combinator/PackratParsers.scala +++ b/shared/src/main/scala/scala/util/parsing/combinator/PackratParsers.scala @@ -107,7 +107,7 @@ trait PackratParsers extends Parsers { val q = super.phrase(p) new PackratParser[T] { def apply(in: Input) = in match { - case in: PackratReader[_] => q(in) + case in if in.isInstanceOf[PackratReader[_]] => q(in) case in => q(new PackratReader(in)) } } From c4b81a96eef9647b737b3c5130665ebc50f1804f Mon Sep 17 00:00:00 2001 From: Philippus Date: Sun, 8 Mar 2020 17:36:32 +0100 Subject: [PATCH 11/14] Add hardcoded exclusion --- build.sbt | 1 + 1 file changed, 1 insertion(+) diff --git a/build.sbt b/build.sbt index 5bf0afda..2ee322e3 100644 --- a/build.sbt +++ b/build.sbt @@ -40,6 +40,7 @@ lazy val parserCombinators = crossProject(JVMPlatform, JSPlatform, NativePlatfor libraryDependencies += "com.novocode" % "junit-interface" % "0.11" % Test ) .jsSettings( + crossScalaVersions -= "0.22.0-RC1", // Scala.js cannot run forked tests fork in Test := false ) From beae1c9b6f9b9c9665bc2d81eade6c8b72e02e04 Mon Sep 17 00:00:00 2001 From: Philippus Date: Sun, 8 Mar 2020 18:25:51 +0100 Subject: [PATCH 12/14] Exclude doc-related scalacOptions for dotty --- build.sbt | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/build.sbt b/build.sbt index 2ee322e3..79ca00ec 100644 --- a/build.sbt +++ b/build.sbt @@ -11,19 +11,22 @@ lazy val parserCombinators = crossProject(JVMPlatform, JSPlatform, NativePlatfor apiMappings += (scalaInstance.value.libraryJar -> url(s"https://www.scala-lang.org/api/${scalaVersion.value}/")), - scalacOptions in (Compile, doc) ++= Seq( - "-diagrams", - "-doc-source-url", - s"https://github.com/scala/scala-parser-combinators/tree/v${version.value}€{FILE_PATH}.scala", - "-sourcepath", - (baseDirectory in LocalRootProject).value.absolutePath, - "-doc-title", - "Scala Parser Combinators", - "-doc-version", - version.value, - if (isDotty.value) "-language:Scala2" - else "" - ), + scalacOptions in (Compile, doc) ++= { + if (isDotty.value) + Seq("-language:Scala2") + else + Seq( + "-diagrams", + "-doc-source-url", + s"https://github.com/scala/scala-parser-combinators/tree/v${version.value}€{FILE_PATH}.scala", + "-sourcepath", + (baseDirectory in LocalRootProject).value.absolutePath, + "-doc-title", + "Scala Parser Combinators", + "-doc-version", + version.value + ) + }, unmanagedSourceDirectories in Compile ++= { (unmanagedSourceDirectories in Compile).value.map { dir => CrossVersion.partialVersion(scalaVersion.value) match { From 69bc2c4a671578ee559767c26f5cacf3df2756f5 Mon Sep 17 00:00:00 2001 From: Philippus Date: Mon, 9 Mar 2020 16:25:39 +0100 Subject: [PATCH 13/14] Add comments and todo --- .../scala/scala/util/parsing/combinator/PackratParsers.scala | 2 +- .../src/main/scala/scala/util/parsing/combinator/Parsers.scala | 3 ++- .../parsing/combinator/syntactical/StandardTokenParsers.scala | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/shared/src/main/scala/scala/util/parsing/combinator/PackratParsers.scala b/shared/src/main/scala/scala/util/parsing/combinator/PackratParsers.scala index 07fbc152..2728135a 100644 --- a/shared/src/main/scala/scala/util/parsing/combinator/PackratParsers.scala +++ b/shared/src/main/scala/scala/util/parsing/combinator/PackratParsers.scala @@ -107,7 +107,7 @@ trait PackratParsers extends Parsers { val q = super.phrase(p) new PackratParser[T] { def apply(in: Input) = in match { - case in if in.isInstanceOf[PackratReader[_]] => q(in) + case in if in.isInstanceOf[PackratReader[_]] => q(in) // TODO: try to change back to "case in: PackratReader[_]" after https://github.com/lampepfl/dotty/pull/8413 case in => q(new PackratReader(in)) } } 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 c260b443..5dd01bb3 100644 --- a/shared/src/main/scala/scala/util/parsing/combinator/Parsers.scala +++ b/shared/src/main/scala/scala/util/parsing/combinator/Parsers.scala @@ -664,7 +664,8 @@ trait Parsers { * @return a Parser that recognizes a specified list of elements */ def acceptSeq[ES](es: ES)(implicit f: ES => Iterable[Elem]): Parser[List[Elem]] = { - f(es).foldRight[Parser[List[Elem]]](success(Nil)){(x, pxs) => accept(x) ~ pxs ^^ mkList} + f(es) // explicit conversion for dotty + .foldRight[Parser[List[Elem]]](success(Nil)){(x, pxs) => accept(x) ~ pxs ^^ mkList} } /** A parser that always fails. diff --git a/shared/src/main/scala/scala/util/parsing/combinator/syntactical/StandardTokenParsers.scala b/shared/src/main/scala/scala/util/parsing/combinator/syntactical/StandardTokenParsers.scala index 6cf5876a..131beb7b 100644 --- a/shared/src/main/scala/scala/util/parsing/combinator/syntactical/StandardTokenParsers.scala +++ b/shared/src/main/scala/scala/util/parsing/combinator/syntactical/StandardTokenParsers.scala @@ -25,7 +25,7 @@ import scala.language.implicitConversions */ class StandardTokenParsers extends StdTokenParsers { type Tokens = StdTokens - val lexical: StdLexical = new StdLexical() + val lexical: StdLexical = new StdLexical() // type annotation added for dotty //an implicit keyword function that gives a warning when a given word is not in the reserved/delimiters list override implicit def keyword(chars : String): Parser[String] = From b560430744a8fe9e5d620d9f214b3fa1b3f954cd Mon Sep 17 00:00:00 2001 From: Philippus Date: Tue, 17 Mar 2020 22:27:28 +0100 Subject: [PATCH 14/14] Update dotty to 0.23.0-RC1 --- .travis.yml | 6 +++--- build.sbt | 2 +- .../scala/util/parsing/combinator/PackratParsers.scala | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 57370e58..bf8bf4c9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,7 @@ import: scala/scala-dev:travis/default.yml language: scala scala: - - 0.22.0-RC1 + - 0.23.0-RC1 - 2.11.12 - 2.12.10 - 2.13.1 @@ -18,9 +18,9 @@ env: matrix: exclude: - - scala: 0.22.0-RC1 + - scala: 0.23.0-RC1 env: ADOPTOPENJDK=8 SCALAJS_VERSION=0.6.32 - - scala: 0.22.0-RC1 + - scala: 0.23.0-RC1 env: ADOPTOPENJDK=8 SCALAJS_VERSION=1.0.1 include: - scala: 2.11.12 diff --git a/build.sbt b/build.sbt index 79ca00ec..214730af 100644 --- a/build.sbt +++ b/build.sbt @@ -43,7 +43,7 @@ lazy val parserCombinators = crossProject(JVMPlatform, JSPlatform, NativePlatfor libraryDependencies += "com.novocode" % "junit-interface" % "0.11" % Test ) .jsSettings( - crossScalaVersions -= "0.22.0-RC1", + crossScalaVersions -= "0.23.0-RC1", // Scala.js cannot run forked tests fork in Test := false ) diff --git a/shared/src/main/scala/scala/util/parsing/combinator/PackratParsers.scala b/shared/src/main/scala/scala/util/parsing/combinator/PackratParsers.scala index 2728135a..17e5f893 100644 --- a/shared/src/main/scala/scala/util/parsing/combinator/PackratParsers.scala +++ b/shared/src/main/scala/scala/util/parsing/combinator/PackratParsers.scala @@ -107,7 +107,7 @@ trait PackratParsers extends Parsers { val q = super.phrase(p) new PackratParser[T] { def apply(in: Input) = in match { - case in if in.isInstanceOf[PackratReader[_]] => q(in) // TODO: try to change back to "case in: PackratReader[_]" after https://github.com/lampepfl/dotty/pull/8413 + case in: PackratReader[_] => q(in) case in => q(new PackratReader(in)) } }