github.com/yoheimuta/protolint@v0.49.8-0.20240515023657-4ecaebb7575d/linter/visitor/baseAddVisitor.go (about)

     1  package visitor
     2  
     3  import (
     4  	"github.com/yoheimuta/go-protoparser/v4/parser"
     5  	"github.com/yoheimuta/go-protoparser/v4/parser/meta"
     6  
     7  	"github.com/yoheimuta/protolint/linter/report"
     8  )
     9  
    10  // BaseAddVisitor represents a base visitor which can accumulate failures.
    11  type BaseAddVisitor struct {
    12  	BaseVisitor
    13  	ruleID   string
    14  	severity string
    15  	failures []report.Failure
    16  }
    17  
    18  // NewBaseAddVisitor creates a BaseAddVisitor.
    19  func NewBaseAddVisitor(ruleID string, severity string) *BaseAddVisitor {
    20  	return &BaseAddVisitor{
    21  		ruleID:   ruleID,
    22  		severity: severity,
    23  	}
    24  }
    25  
    26  // Failures returns the accumulated failures.
    27  func (v *BaseAddVisitor) Failures() []report.Failure {
    28  	return v.failures
    29  }
    30  
    31  // AddFailuref adds to the internal buffer and the formatting works like fmt.Sprintf.
    32  func (v *BaseAddVisitor) AddFailuref(
    33  	pos meta.Position,
    34  	format string,
    35  	a ...interface{},
    36  ) {
    37  	v.failures = append(v.failures, report.FailureWithSeverityf(pos, v.ruleID, v.severity, format, a...))
    38  }
    39  
    40  // AddFailurefWithProtoMeta adds to the internal buffer and the formatting works like fmt.Sprintf.
    41  func (v *BaseAddVisitor) AddFailurefWithProtoMeta(
    42  	p *parser.ProtoMeta,
    43  	format string,
    44  	a ...interface{},
    45  ) {
    46  	v.AddFailuref(
    47  		meta.Position{
    48  			Filename: p.Filename,
    49  			Offset:   0,
    50  			Line:     1,
    51  			Column:   1,
    52  		},
    53  		format,
    54  		a...,
    55  	)
    56  }