From 252cb5f2f33d3e9bd191568d8860e3edaf50458e Mon Sep 17 00:00:00 2001 From: James Shubin Date: Sun, 21 Jul 2019 03:10:21 -0400 Subject: [PATCH] lang: Detect windows style CR and return a better error If you get a sneaky \r in your code, the error just looks like whitespace, so this way we can warn you explicitly. --- lang/lexer.nex | 6 +++++- lang/lexparse.go | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lang/lexer.nex b/lang/lexer.nex index 967285c3..7eb1368d 100644 --- a/lang/lexer.nex +++ b/lang/lexer.nex @@ -384,8 +384,12 @@ yylex.pos(lval) // our pos s := yylex.Text() lp := yylex.cast() + e := ErrLexerUnrecognized + if s == "\r" { // windows! + e = ErrLexerUnrecognizedCR + } lp.lexerErr = &LexParseErr{ - Err: ErrLexerUnrecognized, + Err: e, Str: s, Row: yylex.Line(), Col: yylex.Column(), diff --git a/lang/lexparse.go b/lang/lexparse.go index 1541796d..8bc86c15 100644 --- a/lang/lexparse.go +++ b/lang/lexparse.go @@ -46,6 +46,7 @@ const ( // These constants represent the different possible lexer/parser errors. const ( ErrLexerUnrecognized = interfaces.Error("unrecognized") + ErrLexerUnrecognizedCR = interfaces.Error("unrecognized carriage return") ErrLexerStringBadEscaping = interfaces.Error("string: bad escaping") ErrLexerIntegerOverflow = interfaces.Error("integer: overflow") ErrLexerFloatOverflow = interfaces.Error("float: overflow")