gtsocial-umbx

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

error.go (1216B)


      1 package parse
      2 
      3 import (
      4 	"bytes"
      5 	"fmt"
      6 	"io"
      7 )
      8 
      9 // Error is a parsing error returned by parser. It contains a message and an offset at which the error occurred.
     10 type Error struct {
     11 	Message string
     12 	Line    int
     13 	Column  int
     14 	Context string
     15 }
     16 
     17 // NewError creates a new error
     18 func NewError(r io.Reader, offset int, message string, a ...interface{}) *Error {
     19 	line, column, context := Position(r, offset)
     20 	if 0 < len(a) {
     21 		message = fmt.Sprintf(message, a...)
     22 	}
     23 	return &Error{
     24 		Message: message,
     25 		Line:    line,
     26 		Column:  column,
     27 		Context: context,
     28 	}
     29 }
     30 
     31 // NewErrorLexer creates a new error from an active Lexer.
     32 func NewErrorLexer(l *Input, message string, a ...interface{}) *Error {
     33 	r := bytes.NewBuffer(l.Bytes())
     34 	offset := l.Offset()
     35 	return NewError(r, offset, message, a...)
     36 }
     37 
     38 // Position returns the line, column, and context of the error.
     39 // Context is the entire line at which the error occurred.
     40 func (e *Error) Position() (int, int, string) {
     41 	return e.Line, e.Column, e.Context
     42 }
     43 
     44 // Error returns the error string, containing the context and line + column number.
     45 func (e *Error) Error() string {
     46 	return fmt.Sprintf("%s on line %d and column %d\n%s", e.Message, e.Line, e.Column, e.Context)
     47 }