Skip to content

Commit 7cf6cc9

Browse files
alexandearldez
andauthored
dev: refactor govet impl with slices.Contains (#4372)
Co-authored-by: Fernandez Ludovic <[email protected]>
1 parent 6f26840 commit 7cf6cc9

File tree

2 files changed

+16
-26
lines changed

2 files changed

+16
-26
lines changed

pkg/golinters/govet.go

Lines changed: 13 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package golinters
22

33
import (
4+
"slices"
5+
46
"golang.org/x/tools/go/analysis"
57
"golang.org/x/tools/go/analysis/passes/appends"
68
"golang.org/x/tools/go/analysis/passes/asmdecl"
@@ -170,40 +172,25 @@ func analyzersFromConfig(settings *config.GovetSettings) []*analysis.Analyzer {
170172
}
171173

172174
func isAnalyzerEnabled(name string, cfg *config.GovetSettings, defaultAnalyzers []*analysis.Analyzer) bool {
175+
// TODO(ldez) remove loopclosure when go1.23
173176
if name == loopclosure.Analyzer.Name && config.IsGreaterThanOrEqualGo122(cfg.Go) {
174177
return false
175178
}
176179

177-
if cfg.EnableAll {
178-
for _, n := range cfg.Disable {
179-
if n == name {
180-
return false
181-
}
182-
}
183-
return true
184-
}
180+
switch {
181+
case cfg.EnableAll:
182+
return !slices.Contains(cfg.Disable, name)
185183

186-
// Raw for loops should be OK on small slice lengths.
187-
for _, n := range cfg.Enable {
188-
if n == name {
189-
return true
190-
}
191-
}
184+
case slices.Contains(cfg.Enable, name):
185+
return true
192186

193-
for _, n := range cfg.Disable {
194-
if n == name {
195-
return false
196-
}
197-
}
187+
case slices.Contains(cfg.Disable, name):
188+
return false
198189

199-
if cfg.DisableAll {
190+
case cfg.DisableAll:
200191
return false
201-
}
202192

203-
for _, a := range defaultAnalyzers {
204-
if a.Name == name {
205-
return true
206-
}
193+
default:
194+
return slices.ContainsFunc(defaultAnalyzers, func(a *analysis.Analyzer) bool { return a.Name == name })
207195
}
208-
return false
209196
}

pkg/golinters/govet_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ func TestGovetAnalyzerIsEnabled(t *testing.T) {
7272
Disable []string
7373
EnableAll bool
7474
DisableAll bool
75+
Go string
7576

7677
Name string
7778
Enabled bool
@@ -83,12 +84,14 @@ func TestGovetAnalyzerIsEnabled(t *testing.T) {
8384
{Name: "unsafeptr", Enabled: true, Enable: []string{"unsafeptr"}},
8485
{Name: "shift", Enabled: true, EnableAll: true},
8586
{Name: "shadow", EnableAll: true, Disable: []string{"shadow"}, Enabled: false},
87+
{Name: "loopclosure", EnableAll: true, Enabled: false, Go: "1.22"}, // TODO(ldez) remove loopclosure when go1.23
8688
} {
8789
cfg := &config.GovetSettings{
8890
Enable: tc.Enable,
8991
Disable: tc.Disable,
9092
EnableAll: tc.EnableAll,
9193
DisableAll: tc.DisableAll,
94+
Go: tc.Go,
9295
}
9396
if enabled := isAnalyzerEnabled(tc.Name, cfg, defaultAnalyzers); enabled != tc.Enabled {
9497
t.Errorf("%+v", tc)

0 commit comments

Comments
 (0)