github.com/vanstinator/golangci-lint@v0.0.0-20240223191551-cc572f00d9d1/pkg/golinters/varnamelen.go (about)

     1  package golinters
     2  
     3  import (
     4  	"strconv"
     5  	"strings"
     6  
     7  	"github.com/blizzy78/varnamelen"
     8  	"golang.org/x/tools/go/analysis"
     9  
    10  	"github.com/vanstinator/golangci-lint/pkg/config"
    11  	"github.com/vanstinator/golangci-lint/pkg/golinters/goanalysis"
    12  )
    13  
    14  func NewVarnamelen(settings *config.VarnamelenSettings) *goanalysis.Linter {
    15  	analyzer := varnamelen.NewAnalyzer()
    16  	cfg := map[string]map[string]any{}
    17  
    18  	if settings != nil {
    19  		vnlCfg := map[string]any{
    20  			"checkReceiver":      strconv.FormatBool(settings.CheckReceiver),
    21  			"checkReturn":        strconv.FormatBool(settings.CheckReturn),
    22  			"checkTypeParam":     strconv.FormatBool(settings.CheckTypeParam),
    23  			"ignoreNames":        strings.Join(settings.IgnoreNames, ","),
    24  			"ignoreTypeAssertOk": strconv.FormatBool(settings.IgnoreTypeAssertOk),
    25  			"ignoreMapIndexOk":   strconv.FormatBool(settings.IgnoreMapIndexOk),
    26  			"ignoreChanRecvOk":   strconv.FormatBool(settings.IgnoreChanRecvOk),
    27  			"ignoreDecls":        strings.Join(settings.IgnoreDecls, ","),
    28  		}
    29  
    30  		if settings.MaxDistance > 0 {
    31  			vnlCfg["maxDistance"] = strconv.Itoa(settings.MaxDistance)
    32  		}
    33  		if settings.MinNameLength > 0 {
    34  			vnlCfg["minNameLength"] = strconv.Itoa(settings.MinNameLength)
    35  		}
    36  
    37  		cfg[analyzer.Name] = vnlCfg
    38  	}
    39  
    40  	return goanalysis.NewLinter(
    41  		analyzer.Name,
    42  		"checks that the length of a variable's name matches its scope",
    43  		[]*analysis.Analyzer{analyzer},
    44  		cfg,
    45  	).WithLoadMode(goanalysis.LoadModeTypesInfo)
    46  }