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