...

Source file src/github.com/noirbizarre/gonja/parser/error.go

Documentation: github.com/noirbizarre/gonja/parser

     1  package parser
     2  
     3  import (
     4  	// "bufio"
     5  	// "fmt"
     6  	// "os"
     7  	"github.com/pkg/errors"
     8  	"github.com/goph/emperror"
     9  	"github.com/noirbizarre/gonja/tokens"
    10  )
    11  
    12  // Error produces a nice error message and returns an error-object.
    13  // The 'token'-argument is optional. If provided, it will take
    14  // the token's position information. If not provided, it will
    15  // automatically use the CURRENT token's position information.
    16  func (p *Parser) Error(msg string, token *tokens.Token) error {
    17  	// if token == nil {
    18  	// 	// Set current token
    19  	// 	token = p.Current()
    20  	// 	if token == nil {
    21  	// 		// Set to last token
    22  	// 		if len(p.tokens) > 0 {
    23  	// 			token = p.tokens[len(p.tokens)-1]
    24  	// 		}
    25  	// 	}
    26  	// }
    27  	// var line, col int
    28  	// if token != nil {
    29  	// 	line = token.Line
    30  	// 	col = token.Col
    31  	// }
    32  	// return &Error{
    33  	// 	// Template:  p.template,
    34  	// 	// Filename:  p.name,
    35  	// 	Sender:    "parser",
    36  	// 	Line:      line,
    37  	// 	Column:    col,
    38  	// 	Token:     token,
    39  	// 	OrigError: errors.New(msg),
    40  	// }
    41  	// s += fmt.Sprintf(" | Line %d Col %d", e.Line, e.Column)
    42  	// 	if e.Token != nil {
    43  	// 		s += fmt.Sprintf(" near '%s'", e.Token.Val)
    44  	// 	}
    45  	if token == nil {
    46  		return errors.New(msg)
    47  	} else {
    48  		return emperror.With(
    49  			errors.Errorf(`%s (Line: %d Col: %d, near "%s")`, msg, token.Line, token.Col, token.Val),
    50  			"token", token,
    51  		)
    52  	}
    53  }
    54  
    55  // // The Error type is being used to address an error during lexing, parsing or
    56  // // execution. If you want to return an error object (for example in your own
    57  // // tag or filter) fill this object with as much information as you have.
    58  // // Make sure "Sender" is always given (if you're returning an error within
    59  // // a filter, make Sender equals 'filter:yourfilter'; same goes for tags: 'tag:mytag').
    60  // // It's okay if you only fill in ErrorMsg if you don't have any other details at hand.
    61  // type Error struct {
    62  // 	// Template  *Template
    63  // 	// Filename  string
    64  // 	Line      int
    65  // 	Column    int
    66  // 	Token     *tokens.Token
    67  // 	Sender    string
    68  // 	OrigError error
    69  // }
    70  
    71  // // func (e *Error) updateFromTokenIfNeeded(template *Template, t *Token) *Error {
    72  // // 	if e.Template == nil {
    73  // // 		e.Template = template
    74  // // 	}
    75  
    76  // // 	if e.Token == nil {
    77  // // 		e.Token = t
    78  // // 		if e.Line <= 0 {
    79  // // 			e.Line = t.Line
    80  // // 			e.Column = t.Col
    81  // // 		}
    82  // // 	}
    83  
    84  // // 	return e
    85  // // }
    86  
    87  // // Returns a nice formatted error string.
    88  // func (e *Error) Error() string {
    89  // 	s := "[Error"
    90  // 	if e.Sender != "" {
    91  // 		s += " (where: " + e.Sender + ")"
    92  // 	}
    93  // 	if e.Filename != "" {
    94  // 		s += " in " + e.Filename
    95  // 	}
    96  // 	if e.Line > 0 {
    97  // 		s += fmt.Sprintf(" | Line %d Col %d", e.Line, e.Column)
    98  // 		if e.Token != nil {
    99  // 			s += fmt.Sprintf(" near '%s'", e.Token.Val)
   100  // 		}
   101  // 	}
   102  // 	s += "] "
   103  // 	s += e.OrigError.Error()
   104  // 	return s
   105  // }
   106  
   107  // // // RawLine returns the affected line from the original template, if available.
   108  // // func (e *Error) RawLine() (line string, available bool, outErr error) {
   109  // // 	if e.Line <= 0 || e.Filename == "<string>" {
   110  // // 		return "", false, nil
   111  // // 	}
   112  
   113  // // 	filename := e.Filename
   114  // // 	if e.Template != nil {
   115  // // 		filename = e.Template.set.resolveFilename(e.Template, e.Filename)
   116  // // 	}
   117  // // 	file, err := os.Open(filename)
   118  // // 	if err != nil {
   119  // // 		return "", false, err
   120  // // 	}
   121  // // 	defer func() {
   122  // // 		err := file.Close()
   123  // // 		if err != nil && outErr == nil {
   124  // // 			outErr = err
   125  // // 		}
   126  // // 	}()
   127  
   128  // // 	scanner := bufio.NewScanner(file)
   129  // // 	l := 0
   130  // // 	for scanner.Scan() {
   131  // // 		l++
   132  // // 		if l == e.Line {
   133  // // 			return scanner.Text(), true, nil
   134  // // 		}
   135  // // 	}
   136  // // 	return "", false, nil
   137  // // }
   138  

View as plain text