github.com/nozzle/golangci-lint@v1.49.0-nz3/pkg/lint/lintersdb/enabled_set_test.go (about) 1 package lintersdb 2 3 import ( 4 "sort" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 9 "github.com/golangci/golangci-lint/pkg/config" 10 "github.com/golangci/golangci-lint/pkg/lint/linter" 11 ) 12 13 //nolint:funlen 14 func TestGetEnabledLintersSet(t *testing.T) { 15 type cs struct { 16 cfg config.Linters 17 name string // test case name 18 def []string // enabled by default linters 19 exp []string // alphabetically ordered enabled linter names 20 } 21 allMegacheckLinterNames := []string{"gosimple", "staticcheck", "unused"} 22 cases := []cs{ 23 { 24 cfg: config.Linters{ 25 Disable: []string{"megacheck"}, 26 }, 27 name: "disable all linters from megacheck", 28 def: allMegacheckLinterNames, 29 exp: nil, // all disabled 30 }, 31 { 32 cfg: config.Linters{ 33 Disable: []string{"staticcheck"}, 34 }, 35 name: "disable only staticcheck", 36 def: allMegacheckLinterNames, 37 exp: []string{"gosimple", "unused"}, 38 }, 39 { 40 name: "don't merge into megacheck", 41 def: allMegacheckLinterNames, 42 exp: allMegacheckLinterNames, 43 }, 44 { 45 name: "expand megacheck", 46 cfg: config.Linters{ 47 Enable: []string{"megacheck"}, 48 }, 49 def: nil, 50 exp: allMegacheckLinterNames, 51 }, 52 { 53 name: "don't disable anything", 54 def: []string{"gofmt", "govet"}, 55 exp: []string{"gofmt", "govet"}, 56 }, 57 { 58 name: "enable gosec by gas alias", 59 cfg: config.Linters{ 60 Enable: []string{"gas"}, 61 }, 62 exp: []string{"gosec"}, 63 }, 64 { 65 name: "enable gosec by primary name", 66 cfg: config.Linters{ 67 Enable: []string{"gosec"}, 68 }, 69 exp: []string{"gosec"}, 70 }, 71 { 72 name: "enable gosec by both names", 73 cfg: config.Linters{ 74 Enable: []string{"gosec", "gas"}, 75 }, 76 exp: []string{"gosec"}, 77 }, 78 { 79 name: "disable gosec by gas alias", 80 cfg: config.Linters{ 81 Disable: []string{"gas"}, 82 }, 83 def: []string{"gosec"}, 84 }, 85 { 86 name: "disable gosec by primary name", 87 cfg: config.Linters{ 88 Disable: []string{"gosec"}, 89 }, 90 def: []string{"gosec"}, 91 }, 92 } 93 94 m := NewManager(nil, nil) 95 es := NewEnabledSet(m, NewValidator(m), nil, nil) 96 for _, c := range cases { 97 c := c 98 t.Run(c.name, func(t *testing.T) { 99 var defaultLinters []*linter.Config 100 for _, ln := range c.def { 101 lcs := m.GetLinterConfigs(ln) 102 assert.NotNil(t, lcs, ln) 103 defaultLinters = append(defaultLinters, lcs...) 104 } 105 106 els := es.build(&c.cfg, defaultLinters) 107 var enabledLinters []string 108 for ln, lc := range els { 109 assert.Equal(t, ln, lc.Name()) 110 enabledLinters = append(enabledLinters, ln) 111 } 112 113 sort.Strings(enabledLinters) 114 sort.Strings(c.exp) 115 116 assert.Equal(t, c.exp, enabledLinters) 117 }) 118 } 119 }