summaryrefslogtreecommitdiff
path: root/vendor/github.com/tdewolff/parse/v2/error.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/tdewolff/parse/v2/error.go')
-rw-r--r--vendor/github.com/tdewolff/parse/v2/error.go47
1 files changed, 47 insertions, 0 deletions
diff --git a/vendor/github.com/tdewolff/parse/v2/error.go b/vendor/github.com/tdewolff/parse/v2/error.go
new file mode 100644
index 000000000..f6657f711
--- /dev/null
+++ b/vendor/github.com/tdewolff/parse/v2/error.go
@@ -0,0 +1,47 @@
+package parse
+
+import (
+ "bytes"
+ "fmt"
+ "io"
+)
+
+// Error is a parsing error returned by parser. It contains a message and an offset at which the error occurred.
+type Error struct {
+ Message string
+ Line int
+ Column int
+ Context string
+}
+
+// NewError creates a new error
+func NewError(r io.Reader, offset int, message string, a ...interface{}) *Error {
+ line, column, context := Position(r, offset)
+ if 0 < len(a) {
+ message = fmt.Sprintf(message, a...)
+ }
+ return &Error{
+ Message: message,
+ Line: line,
+ Column: column,
+ Context: context,
+ }
+}
+
+// NewErrorLexer creates a new error from an active Lexer.
+func NewErrorLexer(l *Input, message string, a ...interface{}) *Error {
+ r := bytes.NewBuffer(l.Bytes())
+ offset := l.Offset()
+ return NewError(r, offset, message, a...)
+}
+
+// Position returns the line, column, and context of the error.
+// Context is the entire line at which the error occurred.
+func (e *Error) Position() (int, int, string) {
+ return e.Line, e.Column, e.Context
+}
+
+// Error returns the error string, containing the context and line + column number.
+func (e *Error) Error() string {
+ return fmt.Sprintf("%s on line %d and column %d\n%s", e.Message, e.Line, e.Column, e.Context)
+}