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{}