diff options
author | Li Haoyi <haoyi@dropbox.com> | 2014-11-16 15:07:53 -0800 |
---|---|---|
committer | Li Haoyi <haoyi@dropbox.com> | 2014-11-16 15:07:53 -0800 |
commit | 857c620357775c8ee79de2c53dbdc39456332c4b (patch) | |
tree | c292486380b340aa6cdaa5c65df0d12a20e105b8 /scalatexApi/src | |
parent | 37adfa72f2658b0859a61f09cae5d400efec123e (diff) | |
download | hands-on-scala-js-857c620357775c8ee79de2c53dbdc39456332c4b.tar.gz hands-on-scala-js-857c620357775c8ee79de2c53dbdc39456332c4b.tar.bz2 hands-on-scala-js-857c620357775c8ee79de2c53dbdc39456332c4b.zip |
Some part of SyntaxTest parses successfully, the match expression doesn't
Diffstat (limited to 'scalatexApi/src')
-rw-r--r-- | scalatexApi/src/main/scala/torimatomeru/ScalaSyntax.scala | 6 | ||||
-rw-r--r-- | scalatexApi/src/test/scala/torimatomeru/SyntaxTest.scala | 49 |
2 files changed, 38 insertions, 17 deletions
diff --git a/scalatexApi/src/main/scala/torimatomeru/ScalaSyntax.scala b/scalatexApi/src/main/scala/torimatomeru/ScalaSyntax.scala index 283926e..d0a9b0e 100644 --- a/scalatexApi/src/main/scala/torimatomeru/ScalaSyntax.scala +++ b/scalatexApi/src/main/scala/torimatomeru/ScalaSyntax.scala @@ -207,7 +207,7 @@ class ScalaSyntax(val input: ParserInput) extends Parser with Basic with Identif def Import(G: B = true): Rule0 = rule { "import" ~ oneOrMore(ImportExpr(G)).separatedBy(',') } //ImportExpr is slightly changed wrt spec because StableId always consumes all the Ids possible, so there is no need to one at the end - def ImportExpr(G: B = true): Rule0 = rule { StableId(G) ~ optional('.' ~ ('_' | ImportSelectors(G))) } + def ImportExpr(G: B = true): Rule0 = rule { StableId(G) ~ optional('.' ~ (wspStrG("_", G) | ImportSelectors(G))) } def ImportSelectors(G: B = true): Rule0 = rule { '{' ~ zeroOrMore(ImportSelector ~ ',') ~ (ImportSelector | '_') ~ wspStrG("}", G) } def ImportSelector: Rule0 = rule { IdS() ~ optional("=>" ~ (IdS() | '_')) } @@ -250,9 +250,9 @@ class ScalaSyntax(val input: ParserInput) extends Parser with Basic with Identif def ConstrBlock: Rule0 = rule { '{' ~ SelfInvocation ~ zeroOrMore(SemiS ~ BlockStat) ~ '}' } def SelfInvocation: Rule0 = rule { "this" ~ oneOrMore(ArgumentExprs()) } - def TopStatSeq: Rule0 = rule { oneOrMore(TopStat).separatedBy(SemiS) } + 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 PackageObject(G: B = true): Rule0 = rule { "package" ~ "object" ~ ObjectDef(G) } - def CompilationUnit: Rule0 = rule { zeroOrMore("package" ~ QualId ~ SemiS) ~ TopStatSeq } + def CompilationUnit: Rule1[String] = rule { capture(zeroOrMore(SemiS) ~ zeroOrMore("package" ~ QualId).separatedBy(SemiS) ~ TopStatSeq) } } diff --git a/scalatexApi/src/test/scala/torimatomeru/SyntaxTest.scala b/scalatexApi/src/test/scala/torimatomeru/SyntaxTest.scala index 17b0d5f..4562dbd 100644 --- a/scalatexApi/src/test/scala/torimatomeru/SyntaxTest.scala +++ b/scalatexApi/src/test/scala/torimatomeru/SyntaxTest.scala @@ -8,32 +8,53 @@ import utest.util.Tree import scala.util.{Failure, Success} object SyntaxTest extends TestSuite{ - def check[T](input: String, parse: ScalaSyntax => scala.util.Try[T], expected: T) = { - parse(new ScalaSyntax(input)) match{ + def check[T](input: String) = { + new ScalaSyntax(input).CompilationUnit.run() match{ case Failure(f: ParseError) => println(f.formatTraces) - throw new Exception(f.formatTraces) + throw new Exception(f.position + "\t" + f.formatTraces) case Success(parsed) => - assert(parsed == expected) + assert(parsed == input) } - } def tests = TestSuite{ * - check( - """(1 - |)""".stripMargin, - _.ArgumentExprs().run(), () + "package torimatomeru" + + ) + * - check( + """ + |package torimatomeru + | + |import org.parboiled2.ParseError + |import utest._ + |import utest.framework.Test + """.stripMargin + ) * - check( - """(1, - |1)""".stripMargin, - _.ArgumentExprs().run(), () + """ + |package torimatomeru + | + |import org.parboiled2.ParseError + |import utest._ + |import utest.framework.Test + |import utest.util.Tree + | + |import scala.util.{Failure, Success} + | + |object SyntaxTest extends TestSuite + """.stripMargin ) * - check( - """val omg = "omg" - |omg * 2""".stripMargin, - _.Block.run(), () + """ + |object SyntaxTest extends TestSuite{ + | def check[T](input: String) = { + | + | } + |} + """.stripMargin ) } } |