Skip to content

Commit 4dfb61b

Browse files
committed
refactor: replace Exclude processor by ExclusionRules processor
1 parent fd957d8 commit 4dfb61b

File tree

5 files changed

+54
-144
lines changed

5 files changed

+54
-144
lines changed

pkg/lint/runner.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -102,9 +102,8 @@ func NewRunner(log logutils.Log, cfg *config.Config, args []string, goenv *gouti
102102
// Must be before exclude because users see already marked output and configure excluding by it.
103103
processors.NewIdentifierMarker(),
104104

105-
processors.NewExclude(&cfg.Issues),
106105
processors.NewExclusionRules(log.Child(logutils.DebugKeyExclusionRules), files,
107-
&cfg.Linters.LinterExclusions, cfg.Issues.IncludeDefaultExcludes, cfg.Issues.ExcludeCaseSensitive),
106+
&cfg.Linters.LinterExclusions, &cfg.Issues),
108107

109108
processors.NewNolintFilter(log.Child(logutils.DebugKeyNolintFilter), dbManager, enabledLinters),
110109

pkg/result/processors/exclude.go

-56
This file was deleted.

pkg/result/processors/exclude_test.go

-56
This file was deleted.

pkg/result/processors/exclusion_rules.go

+46-23
Original file line numberDiff line numberDiff line change
@@ -54,26 +54,41 @@ type ExclusionRules struct {
5454
rules []excludeRule
5555
}
5656

57-
func NewExclusionRules(log logutils.Log, files *fsutils.Files, cfg *config.LinterExclusions,
58-
refs []string, caseSensitive bool) *ExclusionRules {
57+
func NewExclusionRules(log logutils.Log, files *fsutils.Files, cfg *config.LinterExclusions, oldCfg *config.Issues) *ExclusionRules {
5958
p := &ExclusionRules{
6059
log: log,
6160
files: files,
6261
warnUnused: cfg.WarnUnused,
6362
skippedCounter: map[string]int{},
6463
}
6564

66-
excludeRules := slices.Clone(cfg.Rules)
67-
excludeRules = append(excludeRules, filterInclude(getDefaultLintersExclusions(cfg.Default), refs)...)
68-
6965
// TODO(ldez) remove prefix in v2: the matching must be case sensitive, users can add `(?i)` inside the patterns if needed.
7066
prefix := caseInsensitivePrefix
71-
if caseSensitive {
67+
if oldCfg.ExcludeCaseSensitive {
7268
prefix = ""
7369
}
7470

71+
excludeRules := slices.Clone(cfg.Rules)
72+
excludeRules = append(excludeRules, filterInclude(getDefaultLintersExclusions(cfg.Default), oldCfg.IncludeDefaultExcludes)...)
73+
7574
p.rules = createRules(excludeRules, prefix)
7675

76+
// TODO(ldez): should be remove in v2.
77+
for _, pattern := range oldCfg.ExcludePatterns {
78+
if pattern == "" {
79+
continue
80+
}
81+
82+
rule := createRule(&config.ExcludeRule{
83+
BaseRule: config.BaseRule{
84+
Path: `.+\.go`,
85+
Text: pattern,
86+
},
87+
}, prefix)
88+
89+
p.rules = append(p.rules, rule)
90+
}
91+
7792
for _, rule := range p.rules {
7893
if rule.internalReference == "" {
7994
p.skippedCounter[rule.String()] = 0
@@ -121,33 +136,41 @@ func (p *ExclusionRules) Finish() {
121136
}
122137

123138
func createRules(rules []config.ExcludeRule, prefix string) []excludeRule {
139+
if len(rules) == 0 {
140+
return nil
141+
}
142+
124143
parsedRules := make([]excludeRule, 0, len(rules))
125144

126145
for _, rule := range rules {
127-
parsedRule := excludeRule{}
128-
parsedRule.linters = rule.Linters
129-
parsedRule.internalReference = rule.InternalReference
146+
parsedRules = append(parsedRules, createRule(&rule, prefix))
147+
}
130148

131-
if rule.Text != "" {
132-
parsedRule.text = regexp.MustCompile(prefix + rule.Text)
133-
}
149+
return parsedRules
150+
}
134151

135-
if rule.Source != "" {
136-
parsedRule.source = regexp.MustCompile(prefix + rule.Source)
137-
}
152+
func createRule(rule *config.ExcludeRule, prefix string) excludeRule {
153+
parsedRule := excludeRule{}
154+
parsedRule.linters = rule.Linters
155+
parsedRule.internalReference = rule.InternalReference
138156

139-
if rule.Path != "" {
140-
parsedRule.path = regexp.MustCompile(fsutils.NormalizePathInRegex(rule.Path))
141-
}
157+
if rule.Text != "" {
158+
parsedRule.text = regexp.MustCompile(prefix + rule.Text)
159+
}
142160

143-
if rule.PathExcept != "" {
144-
parsedRule.pathExcept = regexp.MustCompile(fsutils.NormalizePathInRegex(rule.PathExcept))
145-
}
161+
if rule.Source != "" {
162+
parsedRule.source = regexp.MustCompile(prefix + rule.Source)
163+
}
146164

147-
parsedRules = append(parsedRules, parsedRule)
165+
if rule.Path != "" {
166+
parsedRule.path = regexp.MustCompile(fsutils.NormalizePathInRegex(rule.Path))
148167
}
149168

150-
return parsedRules
169+
if rule.PathExcept != "" {
170+
parsedRule.pathExcept = regexp.MustCompile(fsutils.NormalizePathInRegex(rule.PathExcept))
171+
}
172+
173+
return parsedRule
151174
}
152175

153176
// TODO(ldez): must be removed in v2, only for compatibility with exclude-use-default/include.

pkg/result/processors/exclusion_rules_test.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ func TestExclusionRules_Process_multiple(t *testing.T) {
5050
},
5151
}
5252

53-
p := NewExclusionRules(nil, files, cfg, nil, false)
53+
p := NewExclusionRules(nil, files, cfg, &config.Issues{})
5454

5555
cases := []issueTestCase{
5656
{Path: "e.go", Text: "exclude", Linter: "linter"},
@@ -104,7 +104,7 @@ func TestExclusionRules_Process_pathPrefix(t *testing.T) {
104104
},
105105
}
106106

107-
p := NewExclusionRules(nil, files, cfg, nil, false)
107+
p := NewExclusionRules(nil, files, cfg, &config.Issues{})
108108

109109
cases := []issueTestCase{
110110
{Path: "e.go"},
@@ -147,7 +147,7 @@ func TestExclusionRules_Process_text(t *testing.T) {
147147
}},
148148
}
149149

150-
p := NewExclusionRules(nil, files, cfg, nil, false)
150+
p := NewExclusionRules(nil, files, cfg, &config.Issues{})
151151

152152
texts := []string{"excLude", "1", "", "exclud", "notexclude"}
153153
var issues []result.Issue
@@ -172,7 +172,7 @@ func TestExclusionRules_Process_text(t *testing.T) {
172172
func TestExclusionRules_Process_empty(t *testing.T) {
173173
files := fsutils.NewFiles(fsutils.NewLineCache(fsutils.NewFileCache()), "")
174174

175-
p := NewExclusionRules(nil, files, &config.LinterExclusions{}, nil, false)
175+
p := NewExclusionRules(nil, files, &config.LinterExclusions{}, &config.Issues{})
176176

177177
processAssertSame(t, p, newIssueFromTextTestCase("test"))
178178
}
@@ -209,7 +209,7 @@ func TestExclusionRules_Process_caseSensitive_multiple(t *testing.T) {
209209
},
210210
}
211211

212-
p := NewExclusionRules(nil, files, cfg, nil, true)
212+
p := NewExclusionRules(nil, files, cfg, &config.Issues{ExcludeCaseSensitive: true})
213213

214214
cases := []issueTestCase{
215215
{Path: "e.go", Text: "exclude", Linter: "linter"},
@@ -266,7 +266,7 @@ func TestExclusionRules_Process_caseSensitive_text(t *testing.T) {
266266
},
267267
}
268268

269-
p := NewExclusionRules(nil, files, cfg, nil, true)
269+
p := NewExclusionRules(nil, files, cfg, &config.Issues{ExcludeCaseSensitive: true})
270270

271271
texts := []string{"exclude", "excLude", "1", "", "exclud", "notexclude"}
272272

@@ -292,7 +292,7 @@ func TestExclusionRules_Process_caseSensitive_text(t *testing.T) {
292292
func TestExclusionRules_Process_caseSensitive_empty(t *testing.T) {
293293
files := fsutils.NewFiles(fsutils.NewLineCache(fsutils.NewFileCache()), "")
294294

295-
p := NewExclusionRules(nil, files, &config.LinterExclusions{}, nil, true)
295+
p := NewExclusionRules(nil, files, &config.LinterExclusions{}, &config.Issues{ExcludeCaseSensitive: true})
296296

297297
processAssertSame(t, p, newIssueFromTextTestCase("test"))
298298
}

0 commit comments

Comments
 (0)