github.com/thrasher-corp/golangci-lint@v1.17.3/pkg/lint/lintersdb/enabled_set_test.go (about) 1 package lintersdb 2 3 import ( 4 "sort" 5 "testing" 6 7 "github.com/golangci/golangci-lint/pkg/golinters" 8 9 "github.com/stretchr/testify/assert" 10 11 "github.com/golangci/golangci-lint/pkg/config" 12 "github.com/golangci/golangci-lint/pkg/lint/linter" 13 ) 14 15 func TestGetEnabledLintersSet(t *testing.T) { 16 type cs struct { 17 cfg config.Linters 18 name string // test case name 19 def []string // enabled by default linters 20 exp []string // alphabetically ordered enabled linter names 21 } 22 cases := []cs{ 23 { 24 cfg: config.Linters{ 25 Disable: []string{golinters.MegacheckMetalinter{}.Name()}, 26 }, 27 name: "disable all linters from megacheck", 28 def: golinters.MegacheckMetalinter{}.DefaultChildLinterNames(), 29 exp: nil, // all disabled 30 }, 31 { 32 cfg: config.Linters{ 33 Disable: []string{golinters.MegacheckStaticcheckName}, 34 }, 35 name: "disable only staticcheck", 36 def: golinters.MegacheckMetalinter{}.DefaultChildLinterNames(), 37 exp: []string{golinters.MegacheckGosimpleName, golinters.MegacheckUnusedName}, 38 }, 39 { 40 name: "don't merge into megacheck", 41 def: golinters.MegacheckMetalinter{}.DefaultChildLinterNames(), 42 exp: golinters.MegacheckMetalinter{}.DefaultChildLinterNames(), 43 }, 44 { 45 name: "expand megacheck", 46 cfg: config.Linters{ 47 Enable: []string{golinters.MegacheckMetalinter{}.Name()}, 48 }, 49 def: nil, 50 exp: golinters.MegacheckMetalinter{}.DefaultChildLinterNames(), 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) 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 lc := m.GetLinterConfig(ln) 102 assert.NotNil(t, lc, ln) 103 defaultLinters = append(defaultLinters, lc) 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 }