From ee1d60aa8f1a2761a7cb06381e4eae602d5f25dc Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Sun, 16 Nov 2014 18:18:29 -0800 Subject: Failing test case for `|` in pattern matches --- .../src/main/scala/torimatomeru/ScalaSyntax.scala | 13 ++++++++++--- .../src/main/scala/torimatomeru/syntax/Basic.scala | 7 ++++++- .../src/test/scala/torimatomeru/SyntaxTest.scala | 22 +++++++++++++++++++++- 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) } } -- cgit v1.2.3