github.com/nozzle/golangci-lint@v1.49.0-nz3/pkg/golinters/govet_test.go (about) 1 package golinters 2 3 import ( 4 "sort" 5 "testing" 6 7 "golang.org/x/tools/go/analysis" 8 "golang.org/x/tools/go/analysis/passes/asmdecl" 9 "golang.org/x/tools/go/analysis/passes/assign" 10 "golang.org/x/tools/go/analysis/passes/atomic" 11 "golang.org/x/tools/go/analysis/passes/bools" 12 "golang.org/x/tools/go/analysis/passes/buildtag" 13 "golang.org/x/tools/go/analysis/passes/cgocall" 14 "golang.org/x/tools/go/analysis/passes/shadow" 15 16 "github.com/golangci/golangci-lint/pkg/config" 17 ) 18 19 func TestGovet(t *testing.T) { 20 // Checking that every default analyzer is in "all analyzers" list. 21 var checkList []*analysis.Analyzer 22 checkList = append(checkList, defaultAnalyzers...) 23 checkList = append(checkList, shadow.Analyzer) // special case, used in analyzersFromConfig 24 25 for _, defaultAnalyzer := range checkList { 26 found := false 27 for _, a := range allAnalyzers { 28 if a.Name == defaultAnalyzer.Name { 29 found = true 30 break 31 } 32 } 33 if !found { 34 t.Errorf("%s is not in allAnalyzers", defaultAnalyzer.Name) 35 } 36 } 37 } 38 39 type sortedAnalyzers []*analysis.Analyzer 40 41 func (p sortedAnalyzers) Len() int { return len(p) } 42 func (p sortedAnalyzers) Less(i, j int) bool { return p[i].Name < p[j].Name } 43 func (p sortedAnalyzers) Swap(i, j int) { p[i].Name, p[j].Name = p[j].Name, p[i].Name } 44 45 func TestGovetSorted(t *testing.T) { 46 // Keeping analyzers sorted so their order match the import order. 47 t.Run("All", func(t *testing.T) { 48 if !sort.IsSorted(sortedAnalyzers(allAnalyzers)) { 49 t.Error("please keep all analyzers list sorted by name") 50 } 51 }) 52 t.Run("Default", func(t *testing.T) { 53 if !sort.IsSorted(sortedAnalyzers(defaultAnalyzers)) { 54 t.Error("please keep default analyzers list sorted by name") 55 } 56 }) 57 } 58 59 func TestGovetAnalyzerIsEnabled(t *testing.T) { 60 defaultAnalyzers := []*analysis.Analyzer{ 61 asmdecl.Analyzer, 62 assign.Analyzer, 63 atomic.Analyzer, 64 bools.Analyzer, 65 buildtag.Analyzer, 66 cgocall.Analyzer, 67 } 68 for _, tc := range []struct { 69 Enable []string 70 Disable []string 71 EnableAll bool 72 DisableAll bool 73 74 Name string 75 Enabled bool 76 }{ 77 {Name: "assign", Enabled: true}, 78 {Name: "cgocall", Enabled: false, DisableAll: true}, 79 {Name: "errorsas", Enabled: false}, 80 {Name: "bools", Enabled: false, Disable: []string{"bools"}}, 81 {Name: "unsafeptr", Enabled: true, Enable: []string{"unsafeptr"}}, 82 {Name: "shift", Enabled: true, EnableAll: true}, 83 {Name: "shadow", EnableAll: true, Disable: []string{"shadow"}, Enabled: false}, 84 } { 85 cfg := &config.GovetSettings{ 86 Enable: tc.Enable, 87 Disable: tc.Disable, 88 EnableAll: tc.EnableAll, 89 DisableAll: tc.DisableAll, 90 } 91 if enabled := isAnalyzerEnabled(tc.Name, cfg, defaultAnalyzers); enabled != tc.Enabled { 92 t.Errorf("%+v", tc) 93 } 94 } 95 }