summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLi Haoyi <haoyi@dropbox.com>2014-11-16 18:18:29 -0800
committerLi Haoyi <haoyi@dropbox.com>2014-11-16 18:18:29 -0800
commitee1d60aa8f1a2761a7cb06381e4eae602d5f25dc (patch)
tree24f1a7340794f89e034abd5723d024214a33a2be
parent90963daf606ea1c0854132a3e8cbafd17a5a346a (diff)
downloadhands-on-scala-js-ee1d60aa8f1a2761a7cb06381e4eae602d5f25dc.tar.gz
hands-on-scala-js-ee1d60aa8f1a2761a7cb06381e4eae602d5f25dc.tar.bz2
hands-on-scala-js-ee1d60aa8f1a2761a7cb06381e4eae602d5f25dc.zip
Failing test case for `|` in pattern matches
-rw-r--r--scalatexApi/src/main/scala/torimatomeru/ScalaSyntax.scala13
-rw-r--r--scalatexApi/src/main/scala/torimatomeru/syntax/Basic.scala7
-rw-r--r--scalatexApi/src/test/scala/torimatomeru/SyntaxTest.scala22
3 files changed, 37 insertions, 5 deletions
diff --git a/scalatexApi/src/main/scala/torimatomeru/ScalaSyntax.scala b/scalatexApi/src/main/scala/torimatomeru/ScalaSyntax.scala
index cb907e3..fcc9637 100644
--- a/scalatexApi/src/main/scala/torimatomeru/ScalaSyntax.scala
+++ b/scalatexApi/src/main/scala/torimatomeru/ScalaSyntax.scala
@@ -71,7 +71,7 @@ class ScalaSyntax(val input: ParserInput) extends Parser with Basic with Identif
// Qualifiers and Ids
///////////////////////////////////////////
- def QualId = rule { oneOrMore(IdS()) separatedBy '.' }
+ def QualId(G: B = t) = rule { oneOrMore(IdS(false)) separatedBy '.' ~ W(G) }
def Ids = rule { oneOrMore(IdS()) separatedBy ',' }
//path and stableId were refactored (wrt spec) to avoid recursiveness and be more specific
@@ -332,7 +332,14 @@ class ScalaSyntax(val input: ParserInput) extends Parser with Basic with Identif
def TopStatSeq: Rule0 = rule { zeroOrMore(TopStat).separatedBy(SemiS) }
def TopStat: Rule0 = rule { Packaging | PackageObject(false) | Import(false) | zeroOrMore(Annotation ~ optional(NewlineS)) ~ zeroOrMore(Modifier) ~ TmplDef(false) | MATCH }
- def Packaging: Rule0 = rule { "package" ~ QualId ~ optional(NewlineS) ~ '{' ~ TopStatSeq ~ '}' }
+ def Packaging: Rule0 = rule { "package" ~ QualId() ~ '{' ~ TopStatSeq ~ '}' }
def PackageObject(G: B = t): Rule0 = rule { "package" ~ "object" ~ ObjectDef(G) }
- def CompilationUnit: Rule1[String] = rule { capture(zeroOrMore(SemiS) ~ zeroOrMore("package" ~ QualId).separatedBy(SemiS) ~ TopStatSeq ~ EOI) }
+ def CompilationUnit: Rule1[String] = rule {
+ capture(
+ zeroOrMore(SemiS) ~
+ zeroOrMore("package" ~ QualId(false)).separatedBy(SemiS) ~
+ TopStatSeq ~
+ EOI
+ )
+ }
}
diff --git a/scalatexApi/src/main/scala/torimatomeru/syntax/Basic.scala b/scalatexApi/src/main/scala/torimatomeru/syntax/Basic.scala
index 4240ea9..1cc9d39 100644
--- a/scalatexApi/src/main/scala/torimatomeru/syntax/Basic.scala
+++ b/scalatexApi/src/main/scala/torimatomeru/syntax/Basic.scala
@@ -23,7 +23,12 @@ trait Basic { self: ScalaSyntax =>
def WhitespaceChar = rule { "\u0020" | "\u0009" }
def Newline = rule { "\r\n" | "\n" }
def Semi = rule { ';' | oneOrMore(NewlineS) }
- def OperatorChar = rule { anyOf("""!#$%&*+-/:<=>?@\^|~""") | CharPredicate.from(c => c.getType match { case Character.OTHER_SYMBOL | Character.MATH_SYMBOL => true; case _ => false}) }
+ def OperatorChar = rule {
+ anyOf("""!#$%&*+-/:<=>?@\^|~""") |
+ CharPredicate.from(_.getType match {
+ case Character.OTHER_SYMBOL | Character.MATH_SYMBOL => true; case _ => false
+ })
+ }
def Letter = rule { Upper | Lower | CharPredicate.from(c => c.isLetter | c.isDigit) }
def Lower = rule { "a" - "z" | "$" | "_" | CharPredicate.from(_.isLower) }
def Upper = rule { "A" - "Z" | CharPredicate.from(_.isUpper) }
diff --git a/scalatexApi/src/test/scala/torimatomeru/SyntaxTest.scala b/scalatexApi/src/test/scala/torimatomeru/SyntaxTest.scala
index 29c57c8..156071e 100644
--- a/scalatexApi/src/test/scala/torimatomeru/SyntaxTest.scala
+++ b/scalatexApi/src/test/scala/torimatomeru/SyntaxTest.scala
@@ -148,7 +148,7 @@ object SyntaxTest extends TestSuite{
| runtimeErrors: Boolean,
| debug: Boolean)
| : c.Expr[Frag] = {
- | }
+ | }
|}
""".stripMargin
)
@@ -161,6 +161,25 @@ object SyntaxTest extends TestSuite{
|}
""".stripMargin
)
+ * - check(
+ """
+ |package torimatomeru
+ |
+ |package syntax
+ |
+ |import org.parboiled2._
+ |
+ """.stripMargin
+ )
+ * - check(
+ """
+ |object Foo{
+ | 0 match {
+ | case A | B => 0
+ | }
+ |}
+ """.stripMargin
+ )
}
'file{
* - check(io.Source.fromFile("scalatexApi/src/test/scala/torimatomeru/SyntaxTest.scala").mkString)
@@ -170,6 +189,7 @@ object SyntaxTest extends TestSuite{
// somewhere in there, but I can't see it =/
// * - check(io.Source.fromFile("scalatexApi/src/test/scala/scalatex/ParserTests.scala").mkString)
// * - check(io.Source.fromFile("scalatexApi/src/main/scala/scalatex/package.scala").mkString)
+ * - check(io.Source.fromFile("scalatexApi/src/main/scala/torimatomeru/syntax/Basic.scala").mkString)
}
}