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