github.com/nozzle/golangci-lint@v1.49.0-nz3/pkg/result/processors/exclude_rules.go (about)

     1  package processors
     2  
     3  import (
     4  	"regexp"
     5  
     6  	"github.com/golangci/golangci-lint/pkg/fsutils"
     7  	"github.com/golangci/golangci-lint/pkg/logutils"
     8  	"github.com/golangci/golangci-lint/pkg/result"
     9  )
    10  
    11  type excludeRule struct {
    12  	baseRule
    13  }
    14  
    15  type ExcludeRule struct {
    16  	BaseRule
    17  }
    18  
    19  type ExcludeRules struct {
    20  	rules     []excludeRule
    21  	lineCache *fsutils.LineCache
    22  	log       logutils.Log
    23  }
    24  
    25  func NewExcludeRules(rules []ExcludeRule, lineCache *fsutils.LineCache, log logutils.Log) *ExcludeRules {
    26  	r := &ExcludeRules{
    27  		lineCache: lineCache,
    28  		log:       log,
    29  	}
    30  	r.rules = createRules(rules, "(?i)")
    31  
    32  	return r
    33  }
    34  
    35  func createRules(rules []ExcludeRule, prefix string) []excludeRule {
    36  	parsedRules := make([]excludeRule, 0, len(rules))
    37  	for _, rule := range rules {
    38  		parsedRule := excludeRule{}
    39  		parsedRule.linters = rule.Linters
    40  		if rule.Text != "" {
    41  			parsedRule.text = regexp.MustCompile(prefix + rule.Text)
    42  		}
    43  		if rule.Source != "" {
    44  			parsedRule.source = regexp.MustCompile(prefix + rule.Source)
    45  		}
    46  		if rule.Path != "" {
    47  			path := normalizePathInRegex(rule.Path)
    48  			parsedRule.path = regexp.MustCompile(path)
    49  		}
    50  		parsedRules = append(parsedRules, parsedRule)
    51  	}
    52  	return parsedRules
    53  }
    54  
    55  func (p ExcludeRules) Process(issues []result.Issue) ([]result.Issue, error) {
    56  	if len(p.rules) == 0 {
    57  		return issues, nil
    58  	}
    59  	return filterIssues(issues, func(i *result.Issue) bool {
    60  		for _, rule := range p.rules {
    61  			rule := rule
    62  			if rule.match(i, p.lineCache, p.log) {
    63  				return false
    64  			}
    65  		}
    66  		return true
    67  	}), nil
    68  }
    69  
    70  func (ExcludeRules) Name() string { return "exclude-rules" }
    71  func (ExcludeRules) Finish()      {}
    72  
    73  var _ Processor = ExcludeRules{}
    74  
    75  type ExcludeRulesCaseSensitive struct {
    76  	*ExcludeRules
    77  }
    78  
    79  func NewExcludeRulesCaseSensitive(rules []ExcludeRule, lineCache *fsutils.LineCache, log logutils.Log) *ExcludeRulesCaseSensitive {
    80  	r := &ExcludeRules{
    81  		lineCache: lineCache,
    82  		log:       log,
    83  	}
    84  	r.rules = createRules(rules, "")
    85  
    86  	return &ExcludeRulesCaseSensitive{r}
    87  }
    88  
    89  func (ExcludeRulesCaseSensitive) Name() string { return "exclude-rules-case-sensitive" }
    90  
    91  var _ Processor = ExcludeCaseSensitive{}