lexer: introduce Error{} #6
Merged
amery
merged 1 commits from pr-amery-lexer-error
into main
1 year ago
1 changed files with 45 additions and 0 deletions
@ -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 |
||||||
|
} |
Loading…
Reference in new issue