From d2aaffc083bb1aa54301d0e908be0a0e412af8c9 Mon Sep 17 00:00:00 2001 From: Ryo Nihei Date: Wed, 28 Jul 2021 23:00:33 +0900 Subject: Add a token position and detailed info to a lexical error message --- spec/parser.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'spec/parser.go') diff --git a/spec/parser.go b/spec/parser.go index 4773da6..29248f4 100644 --- a/spec/parser.go +++ b/spec/parser.go @@ -76,6 +76,14 @@ func raiseSyntaxError(row int, synErr *SyntaxError) { }) } +func raiseSyntaxErrorWithDetail(row int, synErr *SyntaxError, detail string) { + panic(&verr.SpecError{ + Cause: synErr, + Detail: detail, + Row: row, + }) +} + func Parse(src io.Reader) (*RootNode, error) { p, err := newParser(src) if err != nil { @@ -426,7 +434,7 @@ func (p *parser) consume(expected tokenKind) bool { } p.pos = tok.pos if tok.kind == tokenKindInvalid { - raiseSyntaxError(p.pos.Row, synErrInvalidToken) + raiseSyntaxErrorWithDetail(p.pos.Row, synErrInvalidToken, tok.text) } if tok.kind == expected { p.lastTok = tok -- cgit v1.2.3