Skip to content

Commit 4838429

Browse files
authored
dev: simplify exclude processors (#4456)
1 parent 54b0f3c commit 4838429

File tree

7 files changed

+183
-152
lines changed

7 files changed

+183
-152
lines changed

pkg/lint/runner.go

Lines changed: 9 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -254,20 +254,15 @@ func (r *Runner) processIssues(issues []result.Issue, sw *timeutils.Stopwatch, s
254254
}
255255

256256
func getExcludeProcessor(cfg *config.Issues) processors.Processor {
257-
var excludeTotalPattern string
258-
259-
if len(cfg.ExcludePatterns) != 0 {
260-
excludeTotalPattern = fmt.Sprintf("(%s)", strings.Join(cfg.ExcludePatterns, "|"))
257+
opts := processors.ExcludeOptions{
258+
CaseSensitive: cfg.ExcludeCaseSensitive,
261259
}
262260

263-
var excludeProcessor processors.Processor
264-
if cfg.ExcludeCaseSensitive {
265-
excludeProcessor = processors.NewExcludeCaseSensitive(excludeTotalPattern)
266-
} else {
267-
excludeProcessor = processors.NewExclude(excludeTotalPattern)
261+
if len(cfg.ExcludePatterns) != 0 {
262+
opts.Pattern = fmt.Sprintf("(%s)", strings.Join(cfg.ExcludePatterns, "|"))
268263
}
269264

270-
return excludeProcessor
265+
return processors.NewExclude(opts)
271266
}
272267

273268
func getExcludeRulesProcessor(cfg *config.Issues, log logutils.Log, files *fsutils.Files) processors.Processor {
@@ -295,22 +290,12 @@ func getExcludeRulesProcessor(cfg *config.Issues, log logutils.Log, files *fsuti
295290
}
296291
}
297292

298-
var excludeRulesProcessor processors.Processor
299-
if cfg.ExcludeCaseSensitive {
300-
excludeRulesProcessor = processors.NewExcludeRulesCaseSensitive(
301-
excludeRules,
302-
files,
303-
log.Child(logutils.DebugKeyExcludeRules),
304-
)
305-
} else {
306-
excludeRulesProcessor = processors.NewExcludeRules(
307-
excludeRules,
308-
files,
309-
log.Child(logutils.DebugKeyExcludeRules),
310-
)
293+
opts := processors.ExcludeRulesOptions{
294+
Rules: excludeRules,
295+
CaseSensitive: cfg.ExcludeCaseSensitive,
311296
}
312297

313-
return excludeRulesProcessor
298+
return processors.NewExcludeRules(log.Child(logutils.DebugKeyExcludeRules), files, opts)
314299
}
315300

316301
func getSeverityRulesProcessor(cfg *config.Severity, log logutils.Log, files *fsutils.Files) processors.Processor {

pkg/result/processors/base_rule.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import (
88
"github.com/golangci/golangci-lint/pkg/result"
99
)
1010

11+
const caseInsensitivePrefix = "(?i)"
12+
1113
type BaseRule struct {
1214
Text string
1315
Source string

pkg/result/processors/exclude.go

Lines changed: 21 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,37 @@ import (
66
"github.com/golangci/golangci-lint/pkg/result"
77
)
88

9+
var _ Processor = Exclude{}
10+
911
type Exclude struct {
12+
name string
13+
1014
pattern *regexp.Regexp
1115
}
1216

13-
var _ Processor = Exclude{}
17+
type ExcludeOptions struct {
18+
Pattern string
19+
CaseSensitive bool
20+
}
1421

15-
func NewExclude(pattern string) *Exclude {
16-
var patternRe *regexp.Regexp
17-
if pattern != "" {
18-
patternRe = regexp.MustCompile("(?i)" + pattern)
22+
func NewExclude(opts ExcludeOptions) *Exclude {
23+
p := &Exclude{name: "exclude"}
24+
25+
prefix := caseInsensitivePrefix
26+
if opts.CaseSensitive {
27+
p.name = "exclude-case-sensitive"
28+
prefix = ""
1929
}
20-
return &Exclude{
21-
pattern: patternRe,
30+
31+
if opts.Pattern != "" {
32+
p.pattern = regexp.MustCompile(prefix + opts.Pattern)
2233
}
34+
35+
return p
2336
}
2437

2538
func (p Exclude) Name() string {
26-
return "exclude"
39+
return p.name
2740
}
2841

2942
func (p Exclude) Process(issues []result.Issue) ([]result.Issue, error) {
@@ -37,23 +50,3 @@ func (p Exclude) Process(issues []result.Issue) ([]result.Issue, error) {
3750
}
3851

3952
func (p Exclude) Finish() {}
40-
41-
type ExcludeCaseSensitive struct {
42-
*Exclude
43-
}
44-
45-
var _ Processor = ExcludeCaseSensitive{}
46-
47-
func NewExcludeCaseSensitive(pattern string) *ExcludeCaseSensitive {
48-
var patternRe *regexp.Regexp
49-
if pattern != "" {
50-
patternRe = regexp.MustCompile(pattern)
51-
}
52-
return &ExcludeCaseSensitive{
53-
&Exclude{pattern: patternRe},
54-
}
55-
}
56-
57-
func (p ExcludeCaseSensitive) Name() string {
58-
return "exclude-case-sensitive"
59-
}

pkg/result/processors/exclude_rules.go

Lines changed: 49 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import (
88
"github.com/golangci/golangci-lint/pkg/result"
99
)
1010

11+
var _ Processor = ExcludeRules{}
12+
1113
type excludeRule struct {
1214
baseRule
1315
}
@@ -17,43 +19,35 @@ type ExcludeRule struct {
1719
}
1820

1921
type ExcludeRules struct {
20-
rules []excludeRule
21-
files *fsutils.Files
22+
name string
23+
2224
log logutils.Log
25+
files *fsutils.Files
26+
27+
rules []excludeRule
2328
}
2429

25-
func NewExcludeRules(rules []ExcludeRule, files *fsutils.Files, log logutils.Log) *ExcludeRules {
26-
r := &ExcludeRules{
30+
type ExcludeRulesOptions struct {
31+
Rules []ExcludeRule
32+
CaseSensitive bool
33+
}
34+
35+
func NewExcludeRules(log logutils.Log, files *fsutils.Files, opts ExcludeRulesOptions) *ExcludeRules {
36+
p := &ExcludeRules{
37+
name: "exclude-rules",
2738
files: files,
2839
log: log,
2940
}
30-
r.rules = createRules(rules, "(?i)")
31-
32-
return r
33-
}
3441

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)
42+
prefix := caseInsensitivePrefix
43+
if opts.CaseSensitive {
44+
prefix = ""
45+
p.name = "exclude-rules-case-sensitive"
5546
}
56-
return parsedRules
47+
48+
p.rules = createRules(opts.Rules, prefix)
49+
50+
return p
5751
}
5852

5953
func (p ExcludeRules) Process(issues []result.Issue) ([]result.Issue, error) {
@@ -71,25 +65,35 @@ func (p ExcludeRules) Process(issues []result.Issue) ([]result.Issue, error) {
7165
}), nil
7266
}
7367

74-
func (ExcludeRules) Name() string { return "exclude-rules" }
75-
func (ExcludeRules) Finish() {}
68+
func (p ExcludeRules) Name() string { return p.name }
7669

77-
var _ Processor = ExcludeRules{}
70+
func (ExcludeRules) Finish() {}
7871

79-
type ExcludeRulesCaseSensitive struct {
80-
*ExcludeRules
81-
}
72+
func createRules(rules []ExcludeRule, prefix string) []excludeRule {
73+
parsedRules := make([]excludeRule, 0, len(rules))
8274

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, "")
75+
for _, rule := range rules {
76+
parsedRule := excludeRule{}
77+
parsedRule.linters = rule.Linters
8978

90-
return &ExcludeRulesCaseSensitive{r}
91-
}
79+
if rule.Text != "" {
80+
parsedRule.text = regexp.MustCompile(prefix + rule.Text)
81+
}
9282

93-
func (ExcludeRulesCaseSensitive) Name() string { return "exclude-rules-case-sensitive" }
83+
if rule.Source != "" {
84+
parsedRule.source = regexp.MustCompile(prefix + rule.Source)
85+
}
86+
87+
if rule.Path != "" {
88+
parsedRule.path = regexp.MustCompile(fsutils.NormalizePathInRegex(rule.Path))
89+
}
90+
91+
if rule.PathExcept != "" {
92+
parsedRule.pathExcept = regexp.MustCompile(fsutils.NormalizePathInRegex(rule.PathExcept))
93+
}
9494

95-
var _ Processor = ExcludeCaseSensitive{}
95+
parsedRules = append(parsedRules, parsedRule)
96+
}
97+
98+
return parsedRules
99+
}

0 commit comments

Comments
 (0)