35 lines
589 B
Go
35 lines
589 B
Go
package parse
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
|
|
"github.com/tdewolff/parse/buffer"
|
|
)
|
|
|
|
type Error struct {
|
|
Message string
|
|
Line int
|
|
Col int
|
|
Context string
|
|
}
|
|
|
|
func NewError(msg string, r io.Reader, offset int) *Error {
|
|
line, col, context, _ := Position(r, offset)
|
|
return &Error{
|
|
msg,
|
|
line,
|
|
col,
|
|
context,
|
|
}
|
|
}
|
|
|
|
func NewErrorLexer(msg string, l *buffer.Lexer) *Error {
|
|
r := buffer.NewReader(l.Bytes())
|
|
offset := l.Offset()
|
|
return NewError(msg, r, offset)
|
|
}
|
|
|
|
func (e *Error) Error() string {
|
|
return fmt.Sprintf("parse error:%d:%d: %s\n%s", e.Line, e.Col, e.Message, e.Context)
|
|
}
|