121 lines
2.8 KiB
Go
121 lines
2.8 KiB
Go
package lintersdb
|
|
|
|
import (
|
|
"sort"
|
|
"testing"
|
|
|
|
"github.com/golangci/golangci-lint/pkg/golinters"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"github.com/golangci/golangci-lint/pkg/config"
|
|
"github.com/golangci/golangci-lint/pkg/lint/linter"
|
|
)
|
|
|
|
//nolint:funlen
|
|
func TestGetEnabledLintersSet(t *testing.T) {
|
|
type cs struct {
|
|
cfg config.Linters
|
|
name string // test case name
|
|
def []string // enabled by default linters
|
|
exp []string // alphabetically ordered enabled linter names
|
|
}
|
|
cases := []cs{
|
|
{
|
|
cfg: config.Linters{
|
|
Disable: []string{golinters.MegacheckMetalinter{}.Name()},
|
|
},
|
|
name: "disable all linters from megacheck",
|
|
def: golinters.MegacheckMetalinter{}.DefaultChildLinterNames(),
|
|
exp: nil, // all disabled
|
|
},
|
|
{
|
|
cfg: config.Linters{
|
|
Disable: []string{golinters.MegacheckStaticcheckName},
|
|
},
|
|
name: "disable only staticcheck",
|
|
def: golinters.MegacheckMetalinter{}.DefaultChildLinterNames(),
|
|
exp: []string{golinters.MegacheckGosimpleName, golinters.MegacheckUnusedName},
|
|
},
|
|
{
|
|
name: "don't merge into megacheck",
|
|
def: golinters.MegacheckMetalinter{}.DefaultChildLinterNames(),
|
|
exp: golinters.MegacheckMetalinter{}.DefaultChildLinterNames(),
|
|
},
|
|
{
|
|
name: "expand megacheck",
|
|
cfg: config.Linters{
|
|
Enable: []string{golinters.MegacheckMetalinter{}.Name()},
|
|
},
|
|
def: nil,
|
|
exp: golinters.MegacheckMetalinter{}.DefaultChildLinterNames(),
|
|
},
|
|
{
|
|
name: "don't disable anything",
|
|
def: []string{"gofmt", "govet"},
|
|
exp: []string{"gofmt", "govet"},
|
|
},
|
|
{
|
|
name: "enable gosec by gas alias",
|
|
cfg: config.Linters{
|
|
Enable: []string{"gas"},
|
|
},
|
|
exp: []string{"gosec"},
|
|
},
|
|
{
|
|
name: "enable gosec by primary name",
|
|
cfg: config.Linters{
|
|
Enable: []string{"gosec"},
|
|
},
|
|
exp: []string{"gosec"},
|
|
},
|
|
{
|
|
name: "enable gosec by both names",
|
|
cfg: config.Linters{
|
|
Enable: []string{"gosec", "gas"},
|
|
},
|
|
exp: []string{"gosec"},
|
|
},
|
|
{
|
|
name: "disable gosec by gas alias",
|
|
cfg: config.Linters{
|
|
Disable: []string{"gas"},
|
|
},
|
|
def: []string{"gosec"},
|
|
},
|
|
{
|
|
name: "disable gosec by primary name",
|
|
cfg: config.Linters{
|
|
Disable: []string{"gosec"},
|
|
},
|
|
def: []string{"gosec"},
|
|
},
|
|
}
|
|
|
|
m := NewManager(nil)
|
|
es := NewEnabledSet(m, NewValidator(m), nil, nil)
|
|
for _, c := range cases {
|
|
c := c
|
|
t.Run(c.name, func(t *testing.T) {
|
|
var defaultLinters []*linter.Config
|
|
for _, ln := range c.def {
|
|
lc := m.GetLinterConfig(ln)
|
|
assert.NotNil(t, lc, ln)
|
|
defaultLinters = append(defaultLinters, lc)
|
|
}
|
|
|
|
els := es.build(&c.cfg, defaultLinters)
|
|
var enabledLinters []string
|
|
for ln, lc := range els {
|
|
assert.Equal(t, ln, lc.Name())
|
|
enabledLinters = append(enabledLinters, ln)
|
|
}
|
|
|
|
sort.Strings(enabledLinters)
|
|
sort.Strings(c.exp)
|
|
|
|
assert.Equal(t, c.exp, enabledLinters)
|
|
})
|
|
}
|
|
}
|