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

     1  package visitor
     2  
     3  import (
     4  	"github.com/yoheimuta/go-protoparser/v4/parser"
     5  	"github.com/yoheimuta/protolint/linter/fixer"
     6  )
     7  
     8  // BaseFixableVisitor represents a base visitor which can fix failures.
     9  type BaseFixableVisitor struct {
    10  	*BaseAddVisitor
    11  
    12  	Fixer     fixer.Fixer
    13  	finallyFn func() error
    14  }
    15  
    16  // NewBaseFixableVisitor creates a BaseFixableVisitor.
    17  func NewBaseFixableVisitor(
    18  	ruleID string,
    19  	fixMode bool,
    20  	proto *parser.Proto,
    21  	severity string,
    22  ) (*BaseFixableVisitor, error) {
    23  	f, err := fixer.NewFixing(fixMode, proto)
    24  	if err != nil {
    25  		return nil, err
    26  	}
    27  	return &BaseFixableVisitor{
    28  		BaseAddVisitor: NewBaseAddVisitor(ruleID, severity),
    29  		Fixer:          f,
    30  		finallyFn:      f.Finally,
    31  	}, nil
    32  }
    33  
    34  // Finally fixes the proto file by overwriting it.
    35  func (v *BaseFixableVisitor) Finally() error {
    36  	err := v.finallyFn()
    37  	if err != nil {
    38  		return err
    39  	}
    40  	return v.BaseAddVisitor.Finally()
    41  }