github.com/chenfeining/golangci-lint@v1.0.2-0.20230730162517-14c6c67868df/pkg/result/processors/skip_files.go (about)

     1  package processors
     2  
     3  import (
     4  	"fmt"
     5  	"regexp"
     6  
     7  	"github.com/chenfeining/golangci-lint/pkg/fsutils"
     8  	"github.com/chenfeining/golangci-lint/pkg/result"
     9  )
    10  
    11  type SkipFiles struct {
    12  	patterns   []*regexp.Regexp
    13  	pathPrefix string
    14  }
    15  
    16  var _ Processor = (*SkipFiles)(nil)
    17  
    18  func NewSkipFiles(patterns []string, pathPrefix string) (*SkipFiles, error) {
    19  	var patternsRe []*regexp.Regexp
    20  	for _, p := range patterns {
    21  		p = fsutils.NormalizePathInRegex(p)
    22  		patternRe, err := regexp.Compile(p)
    23  		if err != nil {
    24  			return nil, fmt.Errorf("can't compile regexp %q: %s", p, err)
    25  		}
    26  		patternsRe = append(patternsRe, patternRe)
    27  	}
    28  
    29  	return &SkipFiles{
    30  		patterns:   patternsRe,
    31  		pathPrefix: pathPrefix,
    32  	}, nil
    33  }
    34  
    35  func (p SkipFiles) Name() string {
    36  	return "skip_files"
    37  }
    38  
    39  func (p SkipFiles) Process(issues []result.Issue) ([]result.Issue, error) {
    40  	if len(p.patterns) == 0 {
    41  		return issues, nil
    42  	}
    43  
    44  	return filterIssues(issues, func(i *result.Issue) bool {
    45  		path := fsutils.WithPathPrefix(p.pathPrefix, i.FilePath())
    46  		for _, pattern := range p.patterns {
    47  			if pattern.MatchString(path) {
    48  				return false
    49  			}
    50  		}
    51  
    52  		return true
    53  	}), nil
    54  }
    55  
    56  func (p SkipFiles) Finish() {}