Add ignore tests
This commit is contained in:
@@ -114,19 +114,19 @@ proc str*(expectedString: string): parserFnT {.inline.} =
|
|||||||
# -- Parsing API
|
# -- Parsing API
|
||||||
|
|
||||||
proc optional*(parserFn: parserFnT): parserFnT {.inline.} =
|
proc optional*(parserFn: parserFnT): parserFnT {.inline.} =
|
||||||
## Creates parser function with a nested `parserFn`.
|
## Creates parser function with a nested `parserFn`:
|
||||||
## Continue on succesful parser
|
## Continues on succesful parser
|
||||||
## Ignores failing parsers
|
## Ignores failing parsers
|
||||||
return proc(parser: Parser): ParserResult =
|
return proc(parser: Parser): ParserResult =
|
||||||
let newParser = parserFn(parser)
|
let newParser = parserFn(parser)
|
||||||
|
|
||||||
if newParser.isOk():
|
if newParser.isOk():
|
||||||
newParser
|
newParser
|
||||||
else:
|
else:
|
||||||
parser.ok()
|
parser.ok()
|
||||||
|
|
||||||
proc ignore*(parserFn: parserFnT): parserFnT {.inline.} =
|
proc ignore*(parserFn: parserFnT): parserFnT {.inline.} =
|
||||||
## Parse characters but throw success tokens away
|
## Creates parser function with a nested `parserFn`:
|
||||||
|
## Parses using the `parserFn` but dont capture the resulting tokens.
|
||||||
return proc(parser: Parser): ParserResult =
|
return proc(parser: Parser): ParserResult =
|
||||||
return parserFn(parser)
|
return parserFn(parser)
|
||||||
.map((x: Parser) => Parser(
|
.map((x: Parser) => Parser(
|
||||||
@@ -278,3 +278,6 @@ when isMainModule:
|
|||||||
# Optional
|
# Optional
|
||||||
assert testParser123.flatMap(optional(ch('1'))).tokensToString() == "1"
|
assert testParser123.flatMap(optional(ch('1'))).tokensToString() == "1"
|
||||||
assert testParser123.flatMap(optional(ch('2'))).tokensToString() == ""
|
assert testParser123.flatMap(optional(ch('2'))).tokensToString() == ""
|
||||||
|
|
||||||
|
# Ignore
|
||||||
|
assert testParser123.flatMap(ignore(ch('1'))).tokensToString() == ""
|
||||||
|
|||||||
Reference in New Issue
Block a user