Skip to content

Commit 55b2f5d

Browse files
authored
dev: removes BaseRule, ExcludeRule, SeverityRule duplications (#4676)
1 parent b2df2f4 commit 55b2f5d

File tree

8 files changed

+113
-189
lines changed

8 files changed

+113
-189
lines changed

pkg/lint/runner.go

+3-72
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,8 @@ func NewRunner(log logutils.Log, cfg *config.Config, args []string, goenv *gouti
8080
// Must be before exclude because users see already marked output and configure excluding by it.
8181
processors.NewIdentifierMarker(),
8282

83-
getExcludeProcessor(&cfg.Issues),
84-
getExcludeRulesProcessor(&cfg.Issues, log, files),
83+
processors.NewExclude(&cfg.Issues),
84+
processors.NewExcludeRules(log.Child(logutils.DebugKeyExcludeRules), files, &cfg.Issues),
8585
processors.NewNolint(log.Child(logutils.DebugKeyNolint), dbManager, enabledLinters),
8686

8787
processors.NewUniqByLine(cfg),
@@ -91,7 +91,7 @@ func NewRunner(log logutils.Log, cfg *config.Config, args []string, goenv *gouti
9191
processors.NewMaxFromLinter(cfg.Issues.MaxIssuesPerLinter, log.Child(logutils.DebugKeyMaxFromLinter), cfg),
9292
processors.NewSourceCode(lineCache, log.Child(logutils.DebugKeySourceCode)),
9393
processors.NewPathShortener(),
94-
getSeverityRulesProcessor(&cfg.Severity, log, files),
94+
processors.NewSeverity(log.Child(logutils.DebugKeySeverityRules), files, &cfg.Severity),
9595

9696
// The fixer still needs to see paths for the issues that are relative to the current directory.
9797
processors.NewFixer(cfg, log, fileCache),
@@ -242,72 +242,3 @@ func (r *Runner) processIssues(issues []result.Issue, sw *timeutils.Stopwatch, s
242242

243243
return issues
244244
}
245-
246-
func getExcludeProcessor(cfg *config.Issues) processors.Processor {
247-
opts := processors.ExcludeOptions{
248-
CaseSensitive: cfg.ExcludeCaseSensitive,
249-
}
250-
251-
if len(cfg.ExcludePatterns) != 0 {
252-
opts.Pattern = fmt.Sprintf("(%s)", strings.Join(cfg.ExcludePatterns, "|"))
253-
}
254-
255-
return processors.NewExclude(opts)
256-
}
257-
258-
func getExcludeRulesProcessor(cfg *config.Issues, log logutils.Log, files *fsutils.Files) processors.Processor {
259-
var excludeRules []processors.ExcludeRule
260-
for _, r := range cfg.ExcludeRules {
261-
excludeRules = append(excludeRules, processors.ExcludeRule{
262-
BaseRule: processors.BaseRule{
263-
Text: r.Text,
264-
Source: r.Source,
265-
Path: r.Path,
266-
PathExcept: r.PathExcept,
267-
Linters: r.Linters,
268-
},
269-
})
270-
}
271-
272-
if cfg.UseDefaultExcludes {
273-
for _, r := range config.GetExcludePatterns(cfg.IncludeDefaultExcludes) {
274-
excludeRules = append(excludeRules, processors.ExcludeRule{
275-
BaseRule: processors.BaseRule{
276-
Text: r.Pattern,
277-
Linters: []string{r.Linter},
278-
},
279-
})
280-
}
281-
}
282-
283-
opts := processors.ExcludeRulesOptions{
284-
Rules: excludeRules,
285-
CaseSensitive: cfg.ExcludeCaseSensitive,
286-
}
287-
288-
return processors.NewExcludeRules(log.Child(logutils.DebugKeyExcludeRules), files, opts)
289-
}
290-
291-
func getSeverityRulesProcessor(cfg *config.Severity, log logutils.Log, files *fsutils.Files) processors.Processor {
292-
var severityRules []processors.SeverityRule
293-
for _, r := range cfg.Rules {
294-
severityRules = append(severityRules, processors.SeverityRule{
295-
Severity: r.Severity,
296-
BaseRule: processors.BaseRule{
297-
Text: r.Text,
298-
Source: r.Source,
299-
Path: r.Path,
300-
PathExcept: r.PathExcept,
301-
Linters: r.Linters,
302-
},
303-
})
304-
}
305-
306-
severityOpts := processors.SeverityOptions{
307-
Default: cfg.Default,
308-
Rules: severityRules,
309-
CaseSensitive: cfg.CaseSensitive,
310-
}
311-
312-
return processors.NewSeverity(log.Child(logutils.DebugKeySeverityRules), files, severityOpts)
313-
}

pkg/result/processors/base_rule.go

-8
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,6 @@ import (
1010

1111
const caseInsensitivePrefix = "(?i)"
1212

13-
type BaseRule struct {
14-
Text string
15-
Source string
16-
Path string
17-
PathExcept string
18-
Linters []string
19-
}
20-
2113
type baseRule struct {
2214
text *regexp.Regexp
2315
source *regexp.Regexp

pkg/result/processors/exclude.go

+12-9
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package processors
22

33
import (
4+
"fmt"
45
"regexp"
6+
"strings"
57

8+
"github.com/golangci/golangci-lint/pkg/config"
69
"github.com/golangci/golangci-lint/pkg/result"
710
)
811

@@ -14,22 +17,22 @@ type Exclude struct {
1417
pattern *regexp.Regexp
1518
}
1619

17-
type ExcludeOptions struct {
18-
Pattern string
19-
CaseSensitive bool
20-
}
21-
22-
func NewExclude(opts ExcludeOptions) *Exclude {
20+
func NewExclude(cfg *config.Issues) *Exclude {
2321
p := &Exclude{name: "exclude"}
2422

23+
var pattern string
24+
if len(cfg.ExcludePatterns) != 0 {
25+
pattern = fmt.Sprintf("(%s)", strings.Join(cfg.ExcludePatterns, "|"))
26+
}
27+
2528
prefix := caseInsensitivePrefix
26-
if opts.CaseSensitive {
29+
if cfg.ExcludeCaseSensitive {
2730
p.name = "exclude-case-sensitive"
2831
prefix = ""
2932
}
3033

31-
if opts.Pattern != "" {
32-
p.pattern = regexp.MustCompile(prefix + opts.Pattern)
34+
if pattern != "" {
35+
p.pattern = regexp.MustCompile(prefix + pattern)
3336
}
3437

3538
return p

pkg/result/processors/exclude_rules.go

+18-13
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package processors
33
import (
44
"regexp"
55

6+
"github.com/golangci/golangci-lint/pkg/config"
67
"github.com/golangci/golangci-lint/pkg/fsutils"
78
"github.com/golangci/golangci-lint/pkg/logutils"
89
"github.com/golangci/golangci-lint/pkg/result"
@@ -14,10 +15,6 @@ type excludeRule struct {
1415
baseRule
1516
}
1617

17-
type ExcludeRule struct {
18-
BaseRule
19-
}
20-
2118
type ExcludeRules struct {
2219
name string
2320

@@ -27,25 +24,33 @@ type ExcludeRules struct {
2724
rules []excludeRule
2825
}
2926

30-
type ExcludeRulesOptions struct {
31-
Rules []ExcludeRule
32-
CaseSensitive bool
33-
}
34-
35-
func NewExcludeRules(log logutils.Log, files *fsutils.Files, opts ExcludeRulesOptions) *ExcludeRules {
27+
func NewExcludeRules(log logutils.Log, files *fsutils.Files, cfg *config.Issues) *ExcludeRules {
3628
p := &ExcludeRules{
3729
name: "exclude-rules",
3830
files: files,
3931
log: log,
4032
}
4133

4234
prefix := caseInsensitivePrefix
43-
if opts.CaseSensitive {
35+
if cfg.ExcludeCaseSensitive {
4436
prefix = ""
4537
p.name = "exclude-rules-case-sensitive"
4638
}
4739

48-
p.rules = createRules(opts.Rules, prefix)
40+
excludeRules := cfg.ExcludeRules
41+
42+
if cfg.UseDefaultExcludes {
43+
for _, r := range config.GetExcludePatterns(cfg.IncludeDefaultExcludes) {
44+
excludeRules = append(excludeRules, config.ExcludeRule{
45+
BaseRule: config.BaseRule{
46+
Text: r.Pattern,
47+
Linters: []string{r.Linter},
48+
},
49+
})
50+
}
51+
}
52+
53+
p.rules = createRules(excludeRules, prefix)
4954

5055
return p
5156
}
@@ -71,7 +76,7 @@ func (p ExcludeRules) Process(issues []result.Issue) ([]result.Issue, error) {
7176

7277
func (ExcludeRules) Finish() {}
7378

74-
func createRules(rules []ExcludeRule, prefix string) []excludeRule {
79+
func createRules(rules []config.ExcludeRule, prefix string) []excludeRule {
7580
parsedRules := make([]excludeRule, 0, len(rules))
7681

7782
for _, rule := range rules {

pkg/result/processors/exclude_rules_test.go

+26-25
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77

88
"github.com/stretchr/testify/assert"
99

10+
"github.com/golangci/golangci-lint/pkg/config"
1011
"github.com/golangci/golangci-lint/pkg/fsutils"
1112
"github.com/golangci/golangci-lint/pkg/result"
1213
)
@@ -15,33 +16,33 @@ func TestExcludeRules_multiple(t *testing.T) {
1516
lineCache := fsutils.NewLineCache(fsutils.NewFileCache())
1617
files := fsutils.NewFiles(lineCache, "")
1718

18-
opts := ExcludeRulesOptions{Rules: []ExcludeRule{
19+
opts := &config.Issues{ExcludeRules: []config.ExcludeRule{
1920
{
20-
BaseRule: BaseRule{
21+
BaseRule: config.BaseRule{
2122
Text: "^exclude$",
2223
Linters: []string{"linter"},
2324
},
2425
},
2526
{
26-
BaseRule: BaseRule{
27+
BaseRule: config.BaseRule{
2728
Linters: []string{"testlinter"},
2829
Path: `_test\.go`,
2930
},
3031
},
3132
{
32-
BaseRule: BaseRule{
33+
BaseRule: config.BaseRule{
3334
Text: "^testonly$",
3435
Path: `_test\.go`,
3536
},
3637
},
3738
{
38-
BaseRule: BaseRule{
39+
BaseRule: config.BaseRule{
3940
Text: "^nontestonly$",
4041
PathExcept: `_test\.go`,
4142
},
4243
},
4344
{
44-
BaseRule: BaseRule{
45+
BaseRule: config.BaseRule{
4546
Source: "^//go:generate ",
4647
Linters: []string{"lll"},
4748
},
@@ -94,10 +95,10 @@ func TestExcludeRules_pathPrefix(t *testing.T) {
9495
pathPrefix := path.Join("some", "dir")
9596
files := fsutils.NewFiles(lineCache, pathPrefix)
9697

97-
opts := ExcludeRulesOptions{
98-
Rules: []ExcludeRule{
98+
opts := &config.Issues{
99+
ExcludeRules: []config.ExcludeRule{
99100
{
100-
BaseRule: BaseRule{
101+
BaseRule: config.BaseRule{
101102
Path: `some/dir/e\.go`,
102103
},
103104
},
@@ -136,10 +137,10 @@ func TestExcludeRules_pathPrefix(t *testing.T) {
136137
}
137138

138139
func TestExcludeRules_text(t *testing.T) {
139-
opts := ExcludeRulesOptions{
140-
Rules: []ExcludeRule{
140+
opts := &config.Issues{
141+
ExcludeRules: []config.ExcludeRule{
141142
{
142-
BaseRule: BaseRule{
143+
BaseRule: config.BaseRule{
143144
Text: "^exclude$",
144145
Linters: []string{"linter"},
145146
},
@@ -170,36 +171,36 @@ func TestExcludeRules_text(t *testing.T) {
170171
}
171172

172173
func TestExcludeRules_empty(t *testing.T) {
173-
processAssertSame(t, NewExcludeRules(nil, nil, ExcludeRulesOptions{}), newIssueFromTextTestCase("test"))
174+
processAssertSame(t, NewExcludeRules(nil, nil, &config.Issues{}), newIssueFromTextTestCase("test"))
174175
}
175176

176177
func TestExcludeRules_caseSensitive_multiple(t *testing.T) {
177178
lineCache := fsutils.NewLineCache(fsutils.NewFileCache())
178179
files := fsutils.NewFiles(lineCache, "")
179180

180-
opts := ExcludeRulesOptions{
181-
CaseSensitive: true,
182-
Rules: []ExcludeRule{
181+
opts := &config.Issues{
182+
ExcludeCaseSensitive: true,
183+
ExcludeRules: []config.ExcludeRule{
183184
{
184-
BaseRule: BaseRule{
185+
BaseRule: config.BaseRule{
185186
Text: "^exclude$",
186187
Linters: []string{"linter"},
187188
},
188189
},
189190
{
190-
BaseRule: BaseRule{
191+
BaseRule: config.BaseRule{
191192
Linters: []string{"testlinter"},
192193
Path: `_test\.go`,
193194
},
194195
},
195196
{
196-
BaseRule: BaseRule{
197+
BaseRule: config.BaseRule{
197198
Text: "^testonly$",
198199
Path: `_test\.go`,
199200
},
200201
},
201202
{
202-
BaseRule: BaseRule{
203+
BaseRule: config.BaseRule{
203204
Source: "^//go:generate ",
204205
Linters: []string{"lll"},
205206
},
@@ -251,11 +252,11 @@ func TestExcludeRules_caseSensitive_multiple(t *testing.T) {
251252
}
252253

253254
func TestExcludeRules_caseSensitive_text(t *testing.T) {
254-
opts := ExcludeRulesOptions{
255-
CaseSensitive: true,
256-
Rules: []ExcludeRule{
255+
opts := &config.Issues{
256+
ExcludeCaseSensitive: true,
257+
ExcludeRules: []config.ExcludeRule{
257258
{
258-
BaseRule: BaseRule{
259+
BaseRule: config.BaseRule{
259260
Text: "^exclude$",
260261
Linters: []string{"linter"},
261262
},
@@ -287,5 +288,5 @@ func TestExcludeRules_caseSensitive_text(t *testing.T) {
287288
}
288289

289290
func TestExcludeRules_caseSensitive_empty(t *testing.T) {
290-
processAssertSame(t, NewExcludeRules(nil, nil, ExcludeRulesOptions{CaseSensitive: true}), newIssueFromTextTestCase("test"))
291+
processAssertSame(t, NewExcludeRules(nil, nil, &config.Issues{ExcludeCaseSensitive: true}), newIssueFromTextTestCase("test"))
291292
}

pkg/result/processors/exclude_test.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,12 @@ import (
55

66
"github.com/stretchr/testify/assert"
77

8+
"github.com/golangci/golangci-lint/pkg/config"
89
"github.com/golangci/golangci-lint/pkg/result"
910
)
1011

1112
func TestExclude(t *testing.T) {
12-
p := NewExclude(ExcludeOptions{Pattern: "^exclude$"})
13+
p := NewExclude(&config.Issues{ExcludePatterns: []string{"^exclude$"}})
1314

1415
texts := []string{"excLude", "1", "", "exclud", "notexclude"}
1516

@@ -30,11 +31,11 @@ func TestExclude(t *testing.T) {
3031
}
3132

3233
func TestExclude_empty(t *testing.T) {
33-
processAssertSame(t, NewExclude(ExcludeOptions{}), newIssueFromTextTestCase("test"))
34+
processAssertSame(t, NewExclude(&config.Issues{}), newIssueFromTextTestCase("test"))
3435
}
3536

3637
func TestExclude_caseSensitive(t *testing.T) {
37-
p := NewExclude(ExcludeOptions{Pattern: "^exclude$", CaseSensitive: true})
38+
p := NewExclude(&config.Issues{ExcludePatterns: []string{"^exclude$"}, ExcludeCaseSensitive: true})
3839

3940
texts := []string{"excLude", "1", "", "exclud", "exclude"}
4041

0 commit comments

Comments
 (0)