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  }