aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Rudolph <johannes.rudolph@gmail.com>2016-02-24 17:59:03 +0100
committerJohannes Rudolph <johannes.rudolph@gmail.com>2016-02-24 18:02:43 +0100
commit97832ff51a4417212bc49280a4b67c705c391176 (patch)
tree27794d35d7e447bbff46663c3b7d6bb777efceb1
parentd90a154bdaeb14a6c85f1abb0ea1c5fbe8267db1 (diff)
downloadsbt-boilerplate-97832ff51a4417212bc49280a4b67c705c391176.tar.gz
sbt-boilerplate-97832ff51a4417212bc49280a4b67c705c391176.tar.bz2
sbt-boilerplate-97832ff51a4417212bc49280a4b67c705c391176.zip
include complete parsing failure in exception, fixes #15
Also improve error messages a bit.
-rw-r--r--src/main/scala/spray/boilerplate/Generator.scala2
-rw-r--r--src/main/scala/spray/boilerplate/TemplateParser.scala11
2 files changed, 5 insertions, 8 deletions
diff --git a/src/main/scala/spray/boilerplate/Generator.scala b/src/main/scala/spray/boilerplate/Generator.scala
index 5576f56..db2feb9 100644
--- a/src/main/scala/spray/boilerplate/Generator.scala
+++ b/src/main/scala/spray/boilerplate/Generator.scala
@@ -6,8 +6,6 @@
*/
package spray.boilerplate
-import util.parsing.combinator.RegexParsers
-
object Generator {
def generateFromTemplate(template: String, expandTo: Int): String =
generate(TemplateParser.parse(template))(expandTo)
diff --git a/src/main/scala/spray/boilerplate/TemplateParser.scala b/src/main/scala/spray/boilerplate/TemplateParser.scala
index e70b156..99784d9 100644
--- a/src/main/scala/spray/boilerplate/TemplateParser.scala
+++ b/src/main/scala/spray/boilerplate/TemplateParser.scala
@@ -7,7 +7,6 @@
package spray.boilerplate
import util.parsing.combinator.RegexParsers
-import java.lang.RuntimeException
sealed trait TemplateElement {
def ~(next: TemplateElement): TemplateElement = Sequence(this, next)
@@ -41,15 +40,15 @@ object TemplateParser extends RegexParsers {
lazy val elements: Parser[TemplateElement] = rep1(element) ^^ maybeSequence
lazy val element: Parser[TemplateElement] = offset | literalString | expand
- lazy val offset: Parser[Offset] = offsetChars ^^ (s ⇒ Offset(s.toInt))
+ lazy val offset: Parser[Offset] = offsetChars ^^ (s ⇒ Offset(s - '0'))
lazy val literalString: Parser[LiteralString] = rep1(escapedSharp | escapedLiteralNumber | literalChar) ^^ (chs ⇒ LiteralString(chs.mkString))
lazy val literalChar: Parser[Char] =
not(expandStart | """#[^\]]*\]""".r | offsetChars) ~> elem("Any character", _ != EOI)
- lazy val offsetChars = "[012]".r
+ lazy val offsetChars: Parser[Char] = "[012]".r ^^ (_.head) | failure("'##' is used to quote '0', '1', or '2', use '\\#\\#' to output double hashes")
- lazy val escapedSharp: Parser[Char] = "\\#" ^^ (_.drop(1).head)
- lazy val escapedLiteralNumber: Parser[Char] = "##" ~> offsetChars ^^ (_.head)
+ lazy val escapedSharp: Parser[Char] = "\\#" ~> success('#')
+ lazy val escapedLiteralNumber: Parser[Char] = "##" ~! offsetChars ^^ { case _ ~ x ⇒ x }
lazy val outsideLiteralString: Parser[LiteralString] = rep1(escapedSharp | outsideLiteralChar) ^^ (chs ⇒ LiteralString(chs.mkString))
lazy val outsideLiteralChar: Parser[Char] = not(expandStart) ~> elem("Any character", _ != EOI)
@@ -77,6 +76,6 @@ object TemplateParser extends RegexParsers {
def parse(input: String): TemplateElement =
phrase(outsideElements)(new scala.util.parsing.input.CharArrayReader(input.toCharArray)) match {
case Success(res, _) ⇒ res
- case x: NoSuccess ⇒ throw new RuntimeException(x.msg)
+ case x: NoSuccess ⇒ throw new RuntimeException(s"Parsing failed: $x")
}
}