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  }