diff --git a/README.md b/README.md
index 0e559f01..4e7145ea 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,13 @@
-# scala-parser-combinators [
](https://travis-ci.org/scala/scala-parser-combinators) [
](http://search.maven.org/#search%7Cga%7C1%7Cg%3Aorg.scala-lang.modules%20a%3Ascala-parser-combinators_2.11) [
](http://search.maven.org/#search%7Cga%7C1%7Cg%3Aorg.scala-lang.modules%20a%3Ascala-parser-combinators_2.12) [](https://gitter.im/scala/scala-parser-combinators)
+# scala-parser-combinators
+
+[
](https://travis-ci.org/scala/scala-parser-combinators)
+[
](http://search.maven.org/#search%7Cga%7C1%7Cg%3Aorg.scala-lang.modules%20a%3Ascala-parser-combinators_2.11)
+[
](http://search.maven.org/#search%7Cga%7C1%7Cg%3Aorg.scala-lang.modules%20a%3Ascala-parser-combinators_2.12)
+[](https://gitter.im/scala/scala-parser-combinators)
### Scala Standard Parser Combinator Library
-This library is now community-maintained. If you are interested in helping please contact @gourlaysama or mention it [on Gitter](https://gitter.im/scala/scala-parser-combinators).
+This library is now community-maintained. If you are interested in helping please contact [@gourlaysama](https://github.com/gourlaysama) or [@Philippus](https://github.com/philippus) or mention it on [Gitter](https://gitter.im/scala/scala-parser-combinators).
As of Scala 2.11, this library is a separate jar that can be omitted from Scala projects that do not use Parser Combinators.
diff --git a/build.sbt b/build.sbt
index cae5f23f..543a6173 100644
--- a/build.sbt
+++ b/build.sbt
@@ -1,5 +1,5 @@
import ScalaModulePlugin._
-import sbtcrossproject.crossProject
+import sbtcrossproject.CrossPlugin.autoImport.crossProject
crossScalaVersions in ThisBuild := List("2.12.8", "2.11.12", "2.13.0-RC1")
@@ -7,11 +7,11 @@ lazy val root = project.in(file("."))
.aggregate(`scala-parser-combinatorsJS`, `scala-parser-combinatorsJVM`, `scala-parser-combinatorsNative`)
.settings(disablePublishing)
-lazy val `scala-parser-combinators` = crossProject(JSPlatform, JVMPlatform, NativePlatform).
- withoutSuffixFor(JVMPlatform).in(file(".")).
- settings(scalaModuleSettings: _*).
- jvmSettings(scalaModuleSettingsJVM).
- settings(
+lazy val `scala-parser-combinators` = crossProject(JSPlatform, JVMPlatform, NativePlatform)
+ .withoutSuffixFor(JVMPlatform).in(file("."))
+ .settings(scalaModuleSettings: _*)
+ .jvmSettings(scalaModuleSettingsJVM)
+ .settings(
name := "scala-parser-combinators",
version := "1.2.0-SNAPSHOT",
mimaPreviousVersion := None,
@@ -38,18 +38,18 @@ lazy val `scala-parser-combinators` = crossProject(JSPlatform, JVMPlatform, Nati
}
}
}
- ).
- jvmSettings(
+ )
+ .jvmSettings(
OsgiKeys.exportPackage := Seq(s"scala.util.parsing.*;version=${version.value}"),
- libraryDependencies += "junit" % "junit" % "4.12" % "test",
- libraryDependencies += "com.novocode" % "junit-interface" % "0.11" % "test"
- ).
- jsSettings(
+ libraryDependencies += "junit" % "junit" % "4.12" % Test,
+ libraryDependencies += "com.novocode" % "junit-interface" % "0.11" % Test
+ )
+ .jsSettings(
// Scala.js cannot run forked tests
fork in Test := false
- ).
- jsConfigure(_.enablePlugins(ScalaJSJUnitPlugin)).
- nativeSettings(
+ )
+ .jsConfigure(_.enablePlugins(ScalaJSJUnitPlugin))
+ .nativeSettings(
skip in compile := System.getProperty("java.version").startsWith("1.6") || !scalaVersion.value.startsWith("2.11"),
test := {},
libraryDependencies := {
diff --git a/js/src/main/scala/scala/util/parsing/input/PositionCache.scala b/js/src/main/scala/scala/util/parsing/input/PositionCache.scala
index 912f10bf..35aedb66 100644
--- a/js/src/main/scala/scala/util/parsing/input/PositionCache.scala
+++ b/js/src/main/scala/scala/util/parsing/input/PositionCache.scala
@@ -12,14 +12,14 @@
package scala.util.parsing.input
-import java.util.{AbstractMap, Collections}
+import java.util.Collections
private[input] trait PositionCache {
- private[input] lazy val indexCache: java.util.Map[CharSequence,Array[Int]] = new AbstractMap[CharSequence, Array[Int]] {
+ private[input] lazy val indexCache: java.util.Map[CharSequence,Array[Int]] =
+ new java.util.AbstractMap[CharSequence, Array[Int]] {
+ override def entrySet() = Collections.emptySet()
- override def entrySet() = Collections.emptySet()
-
- // the /dev/null of Maps
- override def put(ch: CharSequence, a: Array[Int]) = null
- }
+ // the /dev/null of Maps
+ override def put(ch: CharSequence, a: Array[Int]) = null
+ }
}
diff --git a/jvm/src/main/scala/scala/util/parsing/input/PositionCache.scala b/jvm/src/main/scala/scala/util/parsing/input/PositionCache.scala
index 80d6e700..eef4b8ac 100644
--- a/jvm/src/main/scala/scala/util/parsing/input/PositionCache.scala
+++ b/jvm/src/main/scala/scala/util/parsing/input/PositionCache.scala
@@ -12,8 +12,6 @@
package scala.util.parsing.input
-import java.util.WeakHashMap
-
/**
* @author Tomáš Janoušek
*/
@@ -21,7 +19,7 @@ private[input] trait PositionCache {
private lazy val indexCacheTL =
// not DynamicVariable as that would share the map from parent to child :-(
new ThreadLocal[java.util.Map[CharSequence, Array[Int]]] {
- override def initialValue = new WeakHashMap[CharSequence, Array[Int]]
+ override def initialValue = new java.util.WeakHashMap[CharSequence, Array[Int]]
}
private[input] def indexCache = indexCacheTL.get
diff --git a/native/src/main/scala/scala/util/parsing/input/PositionCache.scala b/native/src/main/scala/scala/util/parsing/input/PositionCache.scala
index 102f87ff..818ab84f 100644
--- a/native/src/main/scala/scala/util/parsing/input/PositionCache.scala
+++ b/native/src/main/scala/scala/util/parsing/input/PositionCache.scala
@@ -13,14 +13,14 @@
package scala.util.parsing.input
import java.lang.CharSequence
-import java.util.{AbstractMap, Collections}
+import java.util.Collections
private[input] trait PositionCache {
- private[input] lazy val indexCache: java.util.Map[CharSequence,Array[Int]] = new AbstractMap[CharSequence, Array[Int]] {
+ private[input] lazy val indexCache: java.util.Map[CharSequence,Array[Int]] =
+ new java.util.AbstractMap[CharSequence, Array[Int]] {
+ override def entrySet() = Collections.emptySet()
- override def entrySet() = Collections.emptySet()
-
- // the /dev/null of Maps
- override def put(ch: CharSequence, a: Array[Int]) = null
- }
+ // the /dev/null of Maps
+ override def put(ch: CharSequence, a: Array[Int]) = null
+ }
}
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 ef28944f..29efed2d 100644
--- a/shared/src/main/scala/scala/util/parsing/combinator/JavaTokenParsers.scala
+++ b/shared/src/main/scala/scala/util/parsing/combinator/JavaTokenParsers.scala
@@ -37,6 +37,7 @@ trait JavaTokenParsers extends RegexParsers {
/** An integer, without sign or with a negative sign. */
def wholeNumber: Parser[String] =
"""-?\d+""".r
+
/** Number following one of these rules:
*
* - An integer. For example: `13`
@@ -46,6 +47,7 @@ trait JavaTokenParsers extends RegexParsers {
*/
def decimalNumber: Parser[String] =
"""(\d+(\.\d*)?|\d*\.\d+)""".r
+
/** Double quotes (`"`) enclosing a sequence of:
*
* - Any character except double quotes, control characters or backslash (`\`)
@@ -56,6 +58,7 @@ trait JavaTokenParsers extends RegexParsers {
@migration("`stringLiteral` allows escaping single and double quotes, but not forward slashes any longer.", "2.10.0")
def stringLiteral: Parser[String] =
("\""+"""([^"\x00-\x1F\x7F\\]|\\[\\'"bfnrt]|\\u[a-fA-F0-9]{4})*"""+"\"").r
+
/** A number following the rules of `decimalNumber`, with the following
* optional additions:
*
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 f601f924..17e5f893 100644
--- a/shared/src/main/scala/scala/util/parsing/combinator/PackratParsers.scala
+++ b/shared/src/main/scala/scala/util/parsing/combinator/PackratParsers.scala
@@ -56,9 +56,6 @@ import scala.language.implicitConversions
*/
trait PackratParsers extends Parsers {
-
- //type Input = PackratReader[Elem]
-
/**
* A specialized `Reader` class that wraps an underlying `Reader`
* and provides memoization of parse results.
@@ -165,7 +162,7 @@ trait PackratParsers extends Parsers {
case None => /*no heads*/ cached
case Some(h@Head(hp, involved, evalSet)) => {
//heads found
- if(cached == None && !(hp::involved contains p)) {
+ if(cached.isEmpty && !(hp::involved contains p)) {
//Nothing in the cache, and p is not involved
return Some(MemoEntry(Right(Failure("dummy ",in))))
}
@@ -190,7 +187,7 @@ trait PackratParsers extends Parsers {
* the current parser again
*/
private def setupLR(p: Parser[_], in: PackratReader[_], recDetect: LR): Unit = {
- if(recDetect.head == None) recDetect.head = Some(Head(p, Nil, Nil))
+ if(recDetect.head.isEmpty) recDetect.head = Some(Head(p, Nil, Nil))
in.lrStack.takeWhile(_.rule != p).foreach {x =>
x.head = recDetect.head
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 3ef7d8d2..efe12579 100644
--- a/shared/src/main/scala/scala/util/parsing/combinator/Parsers.scala
+++ b/shared/src/main/scala/scala/util/parsing/combinator/Parsers.scala
@@ -154,7 +154,7 @@ trait Parsers {
def get: T = result
/** The toString method of a Success. */
- override def toString = "["+next.pos+"] parsed: "+result
+ override def toString = s"[${next.pos}] parsed: $result"
val successful = true
}
@@ -190,7 +190,7 @@ trait Parsers {
*/
case class Failure(override val msg: String, override val next: Input) extends NoSuccess(msg, next) {
/** The toString method of a Failure yields an error message. */
- override def toString = "["+next.pos+"] failure: "+msg+"\n\n"+next.pos.longString
+ override def toString = s"[${next.pos}] failure: $msg\n\n${next.pos.longString}"
def append[U >: Nothing](a: => ParseResult[U]): ParseResult[U] = { val alt = a; alt match {
case Success(_, _) => alt
@@ -207,7 +207,7 @@ trait Parsers {
*/
case class Error(override val msg: String, override val next: Input) extends NoSuccess(msg, next) {
/** The toString method of an Error yields an error message. */
- override def toString = "["+next.pos+"] error: "+msg+"\n\n"+next.pos.longString
+ override def toString = s"[${next.pos}] error: $msg\n\n${next.pos.longString}"
def append[U >: Nothing](a: => ParseResult[U]): ParseResult[U] = this
}
@@ -223,7 +223,7 @@ trait Parsers {
abstract class Parser[+T] extends (Input => ParseResult[T]) {
private var name: String = ""
def named(n: String): this.type = {name=n; this}
- override def toString() = "Parser ("+ name +")"
+ override def toString = s"Parser ($name)"
/** An unspecified method that defines the behaviour of this parser. */
def apply(in: Input): ParseResult[T]
@@ -940,7 +940,7 @@ trait Parsers {
* }}}
*/
case class ~[+a, +b](_1: a, _2: b) {
- override def toString = "("+ _1 +"~"+ _2 +")"
+ override def toString = s"(${_1}~${_2})"
}
/** A parser whose `~` combinator disallows back-tracking.
diff --git a/shared/src/main/scala/scala/util/parsing/combinator/lexical/Lexical.scala b/shared/src/main/scala/scala/util/parsing/combinator/lexical/Lexical.scala
index fdee2b3b..8290295b 100644
--- a/shared/src/main/scala/scala/util/parsing/combinator/lexical/Lexical.scala
+++ b/shared/src/main/scala/scala/util/parsing/combinator/lexical/Lexical.scala
@@ -35,7 +35,7 @@ abstract class Lexical extends Scanners with Tokens {
def digit = elem("digit", _.isDigit)
/** A character-parser that matches any character except the ones given in `cs` (and returns it).*/
- def chrExcept(cs: Char*) = elem("", ch => (cs forall (ch != _)))
+ def chrExcept(cs: Char*) = elem("", ch => !cs.contains(ch))
/** A character-parser that matches a white-space character (and returns it).*/
def whitespaceChar = elem("space char", ch => ch <= ' ' && ch != EofCh)
diff --git a/shared/src/main/scala/scala/util/parsing/combinator/lexical/Scanners.scala b/shared/src/main/scala/scala/util/parsing/combinator/lexical/Scanners.scala
index 8b75f9fa..5e37e778 100644
--- a/shared/src/main/scala/scala/util/parsing/combinator/lexical/Scanners.scala
+++ b/shared/src/main/scala/scala/util/parsing/combinator/lexical/Scanners.scala
@@ -45,7 +45,7 @@ trait Scanners extends Parsers {
*/
class Scanner(in: Reader[Char]) extends Reader[Token] {
/** Convenience constructor (makes a character reader out of the given string) */
- def this(in: String) = this(new CharArrayReader(in.toCharArray()))
+ def this(in: String) = this(new CharArrayReader(in.toCharArray))
private val (tok, rest1, rest2) = whitespace(in) match {
case Success(_, in1) =>
token(in1) match {
@@ -64,4 +64,3 @@ trait Scanners extends Parsers {
def atEnd = in.atEnd || (whitespace(in) match { case Success(_, in1) => in1.atEnd case _ => false })
}
}
-
diff --git a/shared/src/main/scala/scala/util/parsing/combinator/syntactical/StdTokenParsers.scala b/shared/src/main/scala/scala/util/parsing/combinator/syntactical/StdTokenParsers.scala
index 77249407..3e97612a 100644
--- a/shared/src/main/scala/scala/util/parsing/combinator/syntactical/StdTokenParsers.scala
+++ b/shared/src/main/scala/scala/util/parsing/combinator/syntactical/StdTokenParsers.scala
@@ -34,9 +34,8 @@ trait StdTokenParsers extends TokenParsers {
* @param chars The character string making up the matched keyword.
* @return a `Parser` that matches the given string
*/
-// implicit def keyword(chars: String): Parser[String] = accept(Keyword(chars)) ^^ (_.chars)
- implicit def keyword(chars: String): Parser[String] =
- keywordCache.getOrElseUpdate(chars, accept(Keyword(chars)) ^^ (_.chars))
+ implicit def keyword(chars: String): Parser[String] =
+ keywordCache.getOrElseUpdate(chars, accept(Keyword(chars)) ^^ (_.chars))
/** A parser which matches a numeric literal */
def numericLit: Parser[String] =
@@ -50,5 +49,3 @@ trait StdTokenParsers extends TokenParsers {
def ident: Parser[String] =
elem("identifier", _.isInstanceOf[Identifier]) ^^ (_.chars)
}
-
-
diff --git a/shared/src/main/scala/scala/util/parsing/combinator/token/StdTokens.scala b/shared/src/main/scala/scala/util/parsing/combinator/token/StdTokens.scala
index 49a8aee0..3fbb964e 100644
--- a/shared/src/main/scala/scala/util/parsing/combinator/token/StdTokens.scala
+++ b/shared/src/main/scala/scala/util/parsing/combinator/token/StdTokens.scala
@@ -23,7 +23,7 @@ package token
trait StdTokens extends Tokens {
/** The class of keyword tokens */
case class Keyword(chars: String) extends Token {
- override def toString = "'"+chars+"'"
+ override def toString = s"'$chars'"
}
/** The class of numeric literal tokens */
@@ -33,11 +33,11 @@ trait StdTokens extends Tokens {
/** The class of string literal tokens */
case class StringLit(chars: String) extends Token {
- override def toString = "\""+chars+"\""
+ override def toString = s""""$chars""""
}
/** The class of identifier tokens */
case class Identifier(chars: String) extends Token {
- override def toString = "identifier "+chars
+ override def toString = s"identifier $chars"
}
}
diff --git a/shared/src/main/scala/scala/util/parsing/combinator/token/Tokens.scala b/shared/src/main/scala/scala/util/parsing/combinator/token/Tokens.scala
index 252a6496..4d89a867 100644
--- a/shared/src/main/scala/scala/util/parsing/combinator/token/Tokens.scala
+++ b/shared/src/main/scala/scala/util/parsing/combinator/token/Tokens.scala
@@ -34,7 +34,7 @@ trait Tokens {
* errors detected during lexical analysis
*/
case class ErrorToken(msg: String) extends Token {
- def chars = "*** error: "+msg
+ def chars = s"*** error: $msg"
}
/** A class for end-of-file tokens */
diff --git a/shared/src/main/scala/scala/util/parsing/input/Position.scala b/shared/src/main/scala/scala/util/parsing/input/Position.scala
index 9987e1f5..c0848985 100644
--- a/shared/src/main/scala/scala/util/parsing/input/Position.scala
+++ b/shared/src/main/scala/scala/util/parsing/input/Position.scala
@@ -37,7 +37,7 @@ trait Position {
protected def lineContents: String
/** Returns a string representation of the `Position`, of the form `line.column`. */
- override def toString = ""+line+"."+column
+ override def toString = s"$line.$column"
/** Returns a more ``visual`` representation of this position.
* More precisely, the resulting string consists of two lines: