github.com/elek/golangci-lint@v1.42.2-0.20211208090441-c05b7fcb3a9a/pkg/result/processors/exclude_rules.go (about)

     1  package processors
     2  
     3  import (
     4  	"regexp"
     5  
     6  	"github.com/elek/golangci-lint/pkg/fsutils"
     7  	"github.com/elek/golangci-lint/pkg/logutils"
     8  	"github.com/elek/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  			parsedRule.path = regexp.MustCompile(rule.Path)
    48  		}
    49  		parsedRules = append(parsedRules, parsedRule)
    50  	}
    51  	return parsedRules
    52  }
    53  
    54  func (p ExcludeRules) Process(issues []result.Issue) ([]result.Issue, error) {
    55  	if len(p.rules) == 0 {
    56  		return issues, nil
    57  	}
    58  	return filterIssues(issues, func(i *result.Issue) bool {
    59  		for _, rule := range p.rules {
    60  			rule := rule
    61  			if rule.match(i, p.lineCache, p.log) {
    62  				return false
    63  			}
    64  		}
    65  		return true
    66  	}), nil
    67  }
    68  
    69  func (ExcludeRules) Name() string { return "exclude-rules" }
    70  func (ExcludeRules) Finish()      {}
    71  
    72  var _ Processor = ExcludeRules{}
    73  
    74  type ExcludeRulesCaseSensitive struct {
    75  	*ExcludeRules
    76  }
    77  
    78  func NewExcludeRulesCaseSensitive(rules []ExcludeRule, lineCache *fsutils.LineCache, log logutils.Log) *ExcludeRulesCaseSensitive {
    79  	r := &ExcludeRules{
    80  		lineCache: lineCache,
    81  		log:       log,
    82  	}
    83  	r.rules = createRules(rules, "")
    84  
    85  	return &ExcludeRulesCaseSensitive{r}
    86  }
    87  
    88  func (ExcludeRulesCaseSensitive) Name() string { return "exclude-rules-case-sensitive" }
    89  
    90  var _ Processor = ExcludeCaseSensitive{}