...

Source file src/go.einride.tech/aip/filtering/errors.go

Documentation: go.einride.tech/aip/filtering

     1  package filtering
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"strings"
     7  )
     8  
     9  type filterError interface {
    10  	Position() Position
    11  	Message() string
    12  	Filter() string
    13  }
    14  
    15  func appendFilterError(s *strings.Builder, err error) {
    16  	var errFilter filterError
    17  	if !errors.As(err, &errFilter) {
    18  		return
    19  	}
    20  	_ = s.WriteByte('\n')
    21  	_, _ = s.WriteString(errFilter.Filter())
    22  	_ = s.WriteByte('\n')
    23  	for i := int32(1); i < errFilter.Position().Column; i++ {
    24  		_ = s.WriteByte(' ')
    25  	}
    26  	_, _ = s.WriteString("^ ")
    27  	_, _ = s.WriteString(errFilter.Message())
    28  	_, _ = s.WriteString(" (")
    29  	_, _ = s.WriteString(errFilter.Position().String())
    30  	_, _ = s.WriteString(")\n")
    31  	appendFilterError(s, errors.Unwrap(err))
    32  }
    33  
    34  type lexError struct {
    35  	filter   string
    36  	position Position
    37  	message  string
    38  }
    39  
    40  var _ filterError = &lexError{}
    41  
    42  func (l *lexError) Filter() string {
    43  	return l.filter
    44  }
    45  
    46  func (l *lexError) Position() Position {
    47  	return l.position
    48  }
    49  
    50  func (l *lexError) Message() string {
    51  	return l.message
    52  }
    53  
    54  func (l *lexError) Error() string {
    55  	return fmt.Sprintf("%s: %s", l.position, l.message)
    56  }
    57  
    58  type parseError struct {
    59  	filter   string
    60  	position Position
    61  	message  string
    62  	err      error
    63  }
    64  
    65  func (p *parseError) Filter() string {
    66  	return p.filter
    67  }
    68  
    69  func (p *parseError) Position() Position {
    70  	return p.position
    71  }
    72  
    73  func (p *parseError) Message() string {
    74  	return p.message
    75  }
    76  
    77  func (p *parseError) Unwrap() error {
    78  	return p.err
    79  }
    80  
    81  func (p *parseError) Error() string {
    82  	if p == nil {
    83  		return "<nil>"
    84  	}
    85  	var b strings.Builder
    86  	appendFilterError(&b, p)
    87  	return b.String()
    88  }
    89  
    90  type typeError struct {
    91  	message string
    92  	err     error
    93  }
    94  
    95  func (t *typeError) Error() string {
    96  	if t.err != nil {
    97  		return fmt.Sprintf("%s: %v", t.message, t.err)
    98  	}
    99  	return t.message
   100  }
   101  

View as plain text