Cap error on error line

This commit is contained in:
Florian Schroedl
2022-01-20 17:00:00 +01:00
parent 49ebf7329a
commit afcb55b21f

View File

@@ -7,6 +7,7 @@ import std/collections/tables
import results
import fusion/matching
import fp/maybe
import ../utils/str
{.experimental: "caseStmtMacros".}
@@ -106,23 +107,30 @@ proc `$`*(x: ParserError): string =
of charMismatchErr(expected: @expected, parser: @parser, index: @index, unexpected: @unexpected):
# TODO: Only works for single line right now
let original = parser.state.stream
.deleteAfterNewline(parser.state.position)
let errSpace = " ".repeat(max(0, index))
$index & $parser &
&"""Parsing Error (Character Mismatch Error):
{original}
{errSpace}^ Expected '{expected}' but got '{unexpected}'"""
of choiceMismatchErr(expected: @expected, parser: @parser, index: @index, unexpected: @unexpected):
let original = parser.state.stream
.deleteAfterNewline(parser.state.position)
let errSpace = " ".repeat(max(0, index))
$index & $parser &
&"""Parsing Error (Character Mismatch Error):
{original}
{errSpace}^ Expected '{expected}' but got '{unexpected}'"""
of endOfStringErr(parser: @parser, index: @index):
let original = parser.state.stream
.deleteAfterNewline(parser.state.position)
let errSpace = " ".repeat(max(0, index))
$index & $parser &
&"""Parsing Error (EndOfString Expected):
{original}
{errSpace}^ Expected 'EndOfString' at {index} but got {original.len - 1}"""