Remove concatination from the builder, it's now the duty of the internal method

This commit is contained in:
Florian Schroedl
2022-01-20 17:00:00 +01:00
parent 6fe5df066a
commit ff1d6845eb
3 changed files with 47 additions and 37 deletions

View File

@@ -11,9 +11,9 @@ proc tryParseBuild*[T](
builder: Builder[T],
builderFns: seq[tuple[
parserFn: Parser -> ParserResult,
concatFn: (seq[ParserToken], seq[T]) -> seq[T],
builderFn: seq[ParserToken] -> seq[T],
]],
defaultBuilderFn: (seq[ParserToken]) -> seq[T],
defaultBuilderFn: seq[ParserToken] -> seq[T],
stopAtParserFn = newline,
): BuilderResult[T] =
## Parse remaining text in `builder` by going checking in the `builderFns` list for a sucessful `parserFn`.
@@ -32,8 +32,8 @@ proc tryParseBuild*[T](
# Find the first matching parser and convert its tokens
var found = false
for builderFn in builderFns:
let (parserFn, concatFn) = builderFn
for fn in builderFns:
let (parserFn, builderFn) = fn
let parseResult = emptyParser.flatMap(parserFn)
if parseResult.isOk():
@@ -50,10 +50,11 @@ proc tryParseBuild*[T](
parserAcc = parseResult.map(emptyTokens)
builderAcc = builder.initBuilder(
okParser,
concatFn(
okParser.tokens,
builderAcc[1] & defaultBuilderTokens,
),
concat(
builderAcc[1],
defaultBuilderTokens,
builderFn(okParser.tokens),
)
)
break
@@ -68,5 +69,8 @@ proc tryParseBuild*[T](
BuilderResult[T].ok(builder.initBuilder(
builderAcc[0],
builderAcc[1] & defaultBuilderTokens,
concat(
builderAcc[1],
defaultBuilderTokens,
),
))