From ff03ee922dbbdfd9c8e0d28aa898cbe8571eee70 Mon Sep 17 00:00:00 2001 From: Alejandro Mery Date: Tue, 29 Aug 2023 02:41:48 +0000 Subject: [PATCH] lexer: introduce Error{} Signed-off-by: Alejandro Mery --- lexer/error.go | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 lexer/error.go diff --git a/lexer/error.go b/lexer/error.go new file mode 100644 index 0000000..6ffd479 --- /dev/null +++ b/lexer/error.go @@ -0,0 +1,45 @@ +package lexer + +import ( + "fmt" + "strings" +) + +var ( + _ error = (*Error)(nil) +) + +// Error represents a generic parsing error +type Error struct { + Filename string + Line int + Column int + + Content string + Err error +} + +func (err Error) Error() string { + var s []string + + switch { + case err.Line > 0 || err.Column > 0: + s = append(s, fmt.Sprintf("%s:%v:%v", err.Filename, err.Line, err.Column)) + case err.Filename != "": + s = append(s, err.Filename) + } + + if err.Err != nil { + s = append(s, err.Err.Error()) + } + + if err.Content != "" { + s = append(s, fmt.Sprintf("%q", err.Content)) + } + + return strings.Join(s, ": ") +} + +func (err Error) Unwrap() error { + return err.Err +}