dev: refactor govet impl with slices.Contains (#4372)
Co-authored-by: Fernandez Ludovic <ldez@users.noreply.github.com>
This commit is contained in:
parent
6f2684035f
commit
7cf6cc9d9f
@ -1,6 +1,8 @@
|
|||||||
package golinters
|
package golinters
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"slices"
|
||||||
|
|
||||||
"golang.org/x/tools/go/analysis"
|
"golang.org/x/tools/go/analysis"
|
||||||
"golang.org/x/tools/go/analysis/passes/appends"
|
"golang.org/x/tools/go/analysis/passes/appends"
|
||||||
"golang.org/x/tools/go/analysis/passes/asmdecl"
|
"golang.org/x/tools/go/analysis/passes/asmdecl"
|
||||||
@ -170,40 +172,25 @@ func analyzersFromConfig(settings *config.GovetSettings) []*analysis.Analyzer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func isAnalyzerEnabled(name string, cfg *config.GovetSettings, defaultAnalyzers []*analysis.Analyzer) bool {
|
func isAnalyzerEnabled(name string, cfg *config.GovetSettings, defaultAnalyzers []*analysis.Analyzer) bool {
|
||||||
|
// TODO(ldez) remove loopclosure when go1.23
|
||||||
if name == loopclosure.Analyzer.Name && config.IsGreaterThanOrEqualGo122(cfg.Go) {
|
if name == loopclosure.Analyzer.Name && config.IsGreaterThanOrEqualGo122(cfg.Go) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
if cfg.EnableAll {
|
switch {
|
||||||
for _, n := range cfg.Disable {
|
case cfg.EnableAll:
|
||||||
if n == name {
|
return !slices.Contains(cfg.Disable, name)
|
||||||
return false
|
|
||||||
}
|
case slices.Contains(cfg.Enable, name):
|
||||||
}
|
|
||||||
return true
|
return true
|
||||||
}
|
|
||||||
|
|
||||||
// Raw for loops should be OK on small slice lengths.
|
case slices.Contains(cfg.Disable, name):
|
||||||
for _, n := range cfg.Enable {
|
|
||||||
if n == name {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, n := range cfg.Disable {
|
|
||||||
if n == name {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if cfg.DisableAll {
|
|
||||||
return false
|
return false
|
||||||
}
|
|
||||||
|
|
||||||
for _, a := range defaultAnalyzers {
|
case cfg.DisableAll:
|
||||||
if a.Name == name {
|
return false
|
||||||
return true
|
|
||||||
}
|
default:
|
||||||
|
return slices.ContainsFunc(defaultAnalyzers, func(a *analysis.Analyzer) bool { return a.Name == name })
|
||||||
}
|
}
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
|
@ -72,6 +72,7 @@ func TestGovetAnalyzerIsEnabled(t *testing.T) {
|
|||||||
Disable []string
|
Disable []string
|
||||||
EnableAll bool
|
EnableAll bool
|
||||||
DisableAll bool
|
DisableAll bool
|
||||||
|
Go string
|
||||||
|
|
||||||
Name string
|
Name string
|
||||||
Enabled bool
|
Enabled bool
|
||||||
@ -83,12 +84,14 @@ func TestGovetAnalyzerIsEnabled(t *testing.T) {
|
|||||||
{Name: "unsafeptr", Enabled: true, Enable: []string{"unsafeptr"}},
|
{Name: "unsafeptr", Enabled: true, Enable: []string{"unsafeptr"}},
|
||||||
{Name: "shift", Enabled: true, EnableAll: true},
|
{Name: "shift", Enabled: true, EnableAll: true},
|
||||||
{Name: "shadow", EnableAll: true, Disable: []string{"shadow"}, Enabled: false},
|
{Name: "shadow", EnableAll: true, Disable: []string{"shadow"}, Enabled: false},
|
||||||
|
{Name: "loopclosure", EnableAll: true, Enabled: false, Go: "1.22"}, // TODO(ldez) remove loopclosure when go1.23
|
||||||
} {
|
} {
|
||||||
cfg := &config.GovetSettings{
|
cfg := &config.GovetSettings{
|
||||||
Enable: tc.Enable,
|
Enable: tc.Enable,
|
||||||
Disable: tc.Disable,
|
Disable: tc.Disable,
|
||||||
EnableAll: tc.EnableAll,
|
EnableAll: tc.EnableAll,
|
||||||
DisableAll: tc.DisableAll,
|
DisableAll: tc.DisableAll,
|
||||||
|
Go: tc.Go,
|
||||||
}
|
}
|
||||||
if enabled := isAnalyzerEnabled(tc.Name, cfg, defaultAnalyzers); enabled != tc.Enabled {
|
if enabled := isAnalyzerEnabled(tc.Name, cfg, defaultAnalyzers); enabled != tc.Enabled {
|
||||||
t.Errorf("%+v", tc)
|
t.Errorf("%+v", tc)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user