From 85b02edf1367ec96c8221c54ac611c903193c320 Mon Sep 17 00:00:00 2001 From: Maik Schreiber Date: Sat, 18 Sep 2021 03:03:12 +0200 Subject: [PATCH 1/5] add varnamelen linter --- .golangci.example.yml | 12 +++++++++++ go.mod | 3 ++- go.sum | 20 +++++++++++------ pkg/config/linters_settings.go | 7 ++++++ pkg/golinters/varnamelen.go | 39 ++++++++++++++++++++++++++++++++++ pkg/lint/lintersdb/manager.go | 7 ++++++ test/testdata/varnamelen.go | 15 +++++++++++++ 7 files changed, 96 insertions(+), 7 deletions(-) create mode 100644 pkg/golinters/varnamelen.go create mode 100644 test/testdata/varnamelen.go diff --git a/.golangci.example.yml b/.golangci.example.yml index ce12ab0bf2f3..abf99fe4a4d0 100644 --- a/.golangci.example.yml +++ b/.golangci.example.yml @@ -633,6 +633,18 @@ linters-settings: # Select the Go version to target. The default is '1.13'. go: "1.15" + varnamelen: + # The longest distance, in source lines, that is being considered a "small scope." (defaults to 5) + # Variables used in at most this many lines will be ignored. + max-distance: 5 + # The minimum length of a variable's name that is considered "long." (defaults to 4) + # Variable names that are at least this long will be ignored. + min-name-length: 4 + # Optional list of variable names that should be ignored completely. (defaults to empty list) + ignore-names: + - err + - ctx + whitespace: multi-if: false # Enforces newlines (or comments) after every multi-line if statement multi-func: false # Enforces newlines (or comments) after every multi-line function signature diff --git a/go.mod b/go.mod index db6d32e1f25d..a3de445e1a43 100644 --- a/go.mod +++ b/go.mod @@ -13,6 +13,7 @@ require ( github.com/ashanbrown/forbidigo v1.2.0 github.com/ashanbrown/makezero v0.0.0-20210520155254-b6261585ddde github.com/bkielbasa/cyclop v1.2.0 + github.com/blizzy78/varnamelen v0.1.0 github.com/bombsimon/wsl/v3 v3.3.0 github.com/butuzov/ireturn v0.1.0 github.com/charithe/durationcheck v0.0.8 @@ -86,7 +87,7 @@ require ( github.com/uudashr/gocognit v1.0.5 github.com/valyala/quicktemplate v1.6.3 github.com/yeya24/promlinter v0.1.0 - golang.org/x/tools v0.1.5 + golang.org/x/tools v0.1.6 gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b honnef.co/go/tools v0.2.1 mvdan.cc/gofumpt v0.1.1 diff --git a/go.sum b/go.sum index 2682f888e8b8..92649f946f0b 100644 --- a/go.sum +++ b/go.sum @@ -46,8 +46,6 @@ contrib.go.opencensus.io/exporter/stackdriver v0.13.4/go.mod h1:aXENhDJ1Y4lIg4EU dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Antonboom/errname v0.1.4 h1:lGSlI42Gm4bI1e+IITtXJXvxFM8N7naWimVFKcb0McY= github.com/Antonboom/errname v0.1.4/go.mod h1:jRXo3m0E0EuCnK3wbsSVH3X55Z4iTDLl6ZfCxwFj4TM= -github.com/Antonboom/nilnil v0.0.0-20210914182304-d33f75a9101c h1:GZ/bAqfmHdiHy8O0jwbGwLsK0qyw+8iuCaqNbCcV/to= -github.com/Antonboom/nilnil v0.0.0-20210914182304-d33f75a9101c/go.mod h1:PhHLvRPSghY5Y7mX4TW+BHZQYo1A8flE5H20D3IPZBo= github.com/Antonboom/nilnil v0.1.0 h1:DLDavmg0a6G/F4Lt9t7Enrbgb3Oph6LnDE6YVsmTt74= github.com/Antonboom/nilnil v0.1.0/go.mod h1:PhHLvRPSghY5Y7mX4TW+BHZQYo1A8flE5H20D3IPZBo= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= @@ -97,6 +95,8 @@ github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJm github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= github.com/bkielbasa/cyclop v1.2.0 h1:7Jmnh0yL2DjKfw28p86YTd/B4lRGcNuu12sKE35sM7A= github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= +github.com/blizzy78/varnamelen v0.1.0 h1:l3ArUruFr3dpTNayXMvd+NSgsESVV9dNMotPAP+kLW0= +github.com/blizzy78/varnamelen v0.1.0/go.mod h1:hbwRdBvoBqxk34XyQ6HA0UH3G0/1TKuv5AC4eaBT0Ec= github.com/bombsimon/wsl/v3 v3.3.0 h1:Mka/+kRLoQJq7g2rggtgQsjuI/K5Efd87WX96EWFxjM= github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= github.com/butuzov/ireturn v0.1.0 h1:fMNgwuKMwsV9qtPNFgI7/NUOF3+CfbdLPGX6ZhDaMgA= @@ -447,6 +447,8 @@ github.com/maratori/testpackage v1.0.1 h1:QtJ5ZjqapShm0w5DosRjg0PRlSdAdlx+W6cCKo github.com/maratori/testpackage v1.0.1/go.mod h1:ddKdw+XG0Phzhx8BFDTKgpWP4i7MpApTE5fXSKAqwDU= github.com/matoous/godox v0.0.0-20210227103229-6504466cf951 h1:pWxk9e//NbPwfxat7RXkts09K+dEBJWakUWwICVqYbA= github.com/matoous/godox v0.0.0-20210227103229-6504466cf951/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= +github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE= +github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8= @@ -714,6 +716,7 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= @@ -788,8 +791,9 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.5.0 h1:UG21uOlmZabA4fW5i7ZX6bjw1xELEGg/ZLgZq9auk/Q= +golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -836,8 +840,9 @@ golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781 h1:DzZ89McO9/gWPsQXS/FVKAlG02ZjaQ6AlZRBimEYOd0= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d h1:20cMwl2fHAzkJMEA+8J4JgqBQcQGzbisXo31MIeenXI= +golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -926,8 +931,10 @@ golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210816074244-15123e1e1f71 h1:ikCpsnYR+Ew0vu99XlDp55lGgDJdIMx3f4a18jfse/s= +golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210816074244-15123e1e1f71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210917161153-d61c044b1678 h1:J27LZFQBFoihqXoegpscI10HpjZ7B5WQLLKL2FZXQKw= +golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1038,8 +1045,9 @@ golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5 h1:ouewzE6p+/VEB31YYnTbEJdi8pFqKp4P4n85vwo3DHA= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.6 h1:SIasE1FVIQOWz2GEAHFOmoW7xchJcqlucjSULTL0Ag4= +golang.org/x/tools v0.1.6/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/pkg/config/linters_settings.go b/pkg/config/linters_settings.go index b0d1d7cd7690..e426f7d15d65 100644 --- a/pkg/config/linters_settings.go +++ b/pkg/config/linters_settings.go @@ -134,6 +134,7 @@ type LintersSettings struct { Unparam UnparamSettings Unused StaticCheckSettings Varcheck VarCheckSettings + Varnamelen VarnamelenSettings Whitespace WhitespaceSettings Wrapcheck WrapcheckSettings WSL WSLSettings @@ -467,6 +468,12 @@ type VarCheckSettings struct { CheckExportedFields bool `mapstructure:"exported-fields"` } +type VarnamelenSettings struct { + MaxDistance int `mapstructure:"max-distance"` + MinNameLength int `mapstructure:"min-name-length"` + IgnoreNames []string `mapstructure:"ignore-names"` +} + type WhitespaceSettings struct { MultiIf bool `mapstructure:"multi-if"` MultiFunc bool `mapstructure:"multi-func"` diff --git a/pkg/golinters/varnamelen.go b/pkg/golinters/varnamelen.go new file mode 100644 index 000000000000..b2f618701074 --- /dev/null +++ b/pkg/golinters/varnamelen.go @@ -0,0 +1,39 @@ +package golinters + +import ( + "strconv" + "strings" + + "github.com/blizzy78/varnamelen" + "golang.org/x/tools/go/analysis" + + "github.com/golangci/golangci-lint/pkg/config" + "github.com/golangci/golangci-lint/pkg/golinters/goanalysis" +) + +func NewVarnamelen(settings *config.VarnamelenSettings) *goanalysis.Linter { + a := varnamelen.NewAnalyzer() + + cfg := map[string]map[string]interface{}{} + if settings != nil { + vnlCfg := map[string]interface{}{ + "ignoreNames": strings.Join(settings.IgnoreNames, ","), + } + + if settings.MaxDistance > 0 { + vnlCfg["maxDistance"] = strconv.Itoa(settings.MaxDistance) + } + if settings.MinNameLength > 0 { + vnlCfg["minNameLength"] = strconv.Itoa(settings.MinNameLength) + } + + cfg[a.Name] = vnlCfg + } + + return goanalysis.NewLinter( + a.Name, + "checks that the length of a variable's name matches its scope", + []*analysis.Analyzer{a}, + cfg, + ) +} diff --git a/pkg/lint/lintersdb/manager.go b/pkg/lint/lintersdb/manager.go index 5e7fcd380cb8..443e00f009c4 100644 --- a/pkg/lint/lintersdb/manager.go +++ b/pkg/lint/lintersdb/manager.go @@ -119,6 +119,7 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config { var testpackageCfg *config.TestpackageSettings var thelperCfg *config.ThelperSettings var unusedCfg *config.StaticCheckSettings + var varnamelenCfg *config.VarnamelenSettings var wrapcheckCfg *config.WrapcheckSettings if m.cfg != nil { @@ -142,6 +143,7 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config { testpackageCfg = &m.cfg.LintersSettings.Testpackage thelperCfg = &m.cfg.LintersSettings.Thelper unusedCfg = &m.cfg.LintersSettings.Unused + varnamelenCfg = &m.cfg.LintersSettings.Varnamelen wrapcheckCfg = &m.cfg.LintersSettings.Wrapcheck } @@ -520,6 +522,11 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config { WithLoadForGoAnalysis(). WithURL("https://github.com/Antonboom/nilnil"). WithSince("v1.43.0"), + linter.NewConfig(golinters.NewVarnamelen(varnamelenCfg)). + WithPresets(linter.PresetStyle). + WithLoadForGoAnalysis(). + WithURL("https://github.com/blizzy78/varnamelen"). + WithSince("v1.43.0"), // nolintlint must be last because it looks at the results of all the previous linters for unused nolint directives linter.NewConfig(golinters.NewNoLintLint()). diff --git a/test/testdata/varnamelen.go b/test/testdata/varnamelen.go new file mode 100644 index 000000000000..02c6657a9b8b --- /dev/null +++ b/test/testdata/varnamelen.go @@ -0,0 +1,15 @@ +//args: -Evarnamelen +package testdata + +func varnamelen() { + x := 1 // ERROR "variable name 'x' is too short for the scope of its usage" + x++ + x++ + x++ + x++ + x++ + x++ + x++ + x++ + x++ +} From 82081a08fc7c8c01a6e04859bf294526ffe1a901 Mon Sep 17 00:00:00 2001 From: Maik Schreiber Date: Sat, 18 Sep 2021 14:48:59 +0200 Subject: [PATCH 2/5] update to varnamelen v0.2.0 --- .golangci.example.yml | 8 ++++++-- go.mod | 2 +- go.sum | 2 ++ pkg/config/linters_settings.go | 2 ++ pkg/golinters/varnamelen.go | 11 ++++++++++- 5 files changed, 21 insertions(+), 4 deletions(-) diff --git a/.golangci.example.yml b/.golangci.example.yml index abf99fe4a4d0..10204c32cd72 100644 --- a/.golangci.example.yml +++ b/.golangci.example.yml @@ -637,9 +637,13 @@ linters-settings: # The longest distance, in source lines, that is being considered a "small scope." (defaults to 5) # Variables used in at most this many lines will be ignored. max-distance: 5 - # The minimum length of a variable's name that is considered "long." (defaults to 4) + # The minimum length of a variable's name that is considered "long." (defaults to 3) # Variable names that are at least this long will be ignored. - min-name-length: 4 + min-name-length: 3 + # Check method receiver names. (defaults to false) + check-receiver: false + # Check named return values. (defaults to false) + check-return: false # Optional list of variable names that should be ignored completely. (defaults to empty list) ignore-names: - err diff --git a/go.mod b/go.mod index a3de445e1a43..8b0a949de15c 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,7 @@ require ( github.com/ashanbrown/forbidigo v1.2.0 github.com/ashanbrown/makezero v0.0.0-20210520155254-b6261585ddde github.com/bkielbasa/cyclop v1.2.0 - github.com/blizzy78/varnamelen v0.1.0 + github.com/blizzy78/varnamelen v0.2.0 github.com/bombsimon/wsl/v3 v3.3.0 github.com/butuzov/ireturn v0.1.0 github.com/charithe/durationcheck v0.0.8 diff --git a/go.sum b/go.sum index 92649f946f0b..04c021d6a982 100644 --- a/go.sum +++ b/go.sum @@ -97,6 +97,8 @@ github.com/bkielbasa/cyclop v1.2.0 h1:7Jmnh0yL2DjKfw28p86YTd/B4lRGcNuu12sKE35sM7 github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= github.com/blizzy78/varnamelen v0.1.0 h1:l3ArUruFr3dpTNayXMvd+NSgsESVV9dNMotPAP+kLW0= github.com/blizzy78/varnamelen v0.1.0/go.mod h1:hbwRdBvoBqxk34XyQ6HA0UH3G0/1TKuv5AC4eaBT0Ec= +github.com/blizzy78/varnamelen v0.2.0 h1:OVTE0Lqf+COJQf47FJpGooTIxhcOhmR1Zvutd0ZZ/9M= +github.com/blizzy78/varnamelen v0.2.0/go.mod h1:hbwRdBvoBqxk34XyQ6HA0UH3G0/1TKuv5AC4eaBT0Ec= github.com/bombsimon/wsl/v3 v3.3.0 h1:Mka/+kRLoQJq7g2rggtgQsjuI/K5Efd87WX96EWFxjM= github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= github.com/butuzov/ireturn v0.1.0 h1:fMNgwuKMwsV9qtPNFgI7/NUOF3+CfbdLPGX6ZhDaMgA= diff --git a/pkg/config/linters_settings.go b/pkg/config/linters_settings.go index e426f7d15d65..38448f618743 100644 --- a/pkg/config/linters_settings.go +++ b/pkg/config/linters_settings.go @@ -471,6 +471,8 @@ type VarCheckSettings struct { type VarnamelenSettings struct { MaxDistance int `mapstructure:"max-distance"` MinNameLength int `mapstructure:"min-name-length"` + CheckReceiver bool `mapstructure:"check-receiver"` + CheckReturn bool `mapstructure:"check-return"` IgnoreNames []string `mapstructure:"ignore-names"` } diff --git a/pkg/golinters/varnamelen.go b/pkg/golinters/varnamelen.go index b2f618701074..a371b6fa2fa5 100644 --- a/pkg/golinters/varnamelen.go +++ b/pkg/golinters/varnamelen.go @@ -17,7 +17,9 @@ func NewVarnamelen(settings *config.VarnamelenSettings) *goanalysis.Linter { cfg := map[string]map[string]interface{}{} if settings != nil { vnlCfg := map[string]interface{}{ - "ignoreNames": strings.Join(settings.IgnoreNames, ","), + "checkReceiver": boolString(settings.CheckReceiver), + "checkReturn": boolString(settings.CheckReturn), + "ignoreNames": strings.Join(settings.IgnoreNames, ","), } if settings.MaxDistance > 0 { @@ -37,3 +39,10 @@ func NewVarnamelen(settings *config.VarnamelenSettings) *goanalysis.Linter { cfg, ) } + +func boolString(b bool) string { + if b { + return "true" + } + return "false" +} From bb2c547528bcb710252b8492779533f9d0b1fefa Mon Sep 17 00:00:00 2001 From: Maik Schreiber Date: Sat, 18 Sep 2021 19:29:26 +0200 Subject: [PATCH 3/5] update to varnamelen v0.3.0 --- go.mod | 2 +- go.sum | 2 ++ pkg/golinters/varnamelen.go | 13 +++---------- pkg/lint/lintersdb/manager.go | 1 - 4 files changed, 6 insertions(+), 12 deletions(-) diff --git a/go.mod b/go.mod index 8b0a949de15c..583b6bdb1ff6 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,7 @@ require ( github.com/ashanbrown/forbidigo v1.2.0 github.com/ashanbrown/makezero v0.0.0-20210520155254-b6261585ddde github.com/bkielbasa/cyclop v1.2.0 - github.com/blizzy78/varnamelen v0.2.0 + github.com/blizzy78/varnamelen v0.3.0 github.com/bombsimon/wsl/v3 v3.3.0 github.com/butuzov/ireturn v0.1.0 github.com/charithe/durationcheck v0.0.8 diff --git a/go.sum b/go.sum index 04c021d6a982..9c5bba62bd54 100644 --- a/go.sum +++ b/go.sum @@ -99,6 +99,8 @@ github.com/blizzy78/varnamelen v0.1.0 h1:l3ArUruFr3dpTNayXMvd+NSgsESVV9dNMotPAP+ github.com/blizzy78/varnamelen v0.1.0/go.mod h1:hbwRdBvoBqxk34XyQ6HA0UH3G0/1TKuv5AC4eaBT0Ec= github.com/blizzy78/varnamelen v0.2.0 h1:OVTE0Lqf+COJQf47FJpGooTIxhcOhmR1Zvutd0ZZ/9M= github.com/blizzy78/varnamelen v0.2.0/go.mod h1:hbwRdBvoBqxk34XyQ6HA0UH3G0/1TKuv5AC4eaBT0Ec= +github.com/blizzy78/varnamelen v0.3.0 h1:80mYO7Y5ppeEefg1Jzu+NBg16iwToOQVnDnNIoWSShs= +github.com/blizzy78/varnamelen v0.3.0/go.mod h1:hbwRdBvoBqxk34XyQ6HA0UH3G0/1TKuv5AC4eaBT0Ec= github.com/bombsimon/wsl/v3 v3.3.0 h1:Mka/+kRLoQJq7g2rggtgQsjuI/K5Efd87WX96EWFxjM= github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= github.com/butuzov/ireturn v0.1.0 h1:fMNgwuKMwsV9qtPNFgI7/NUOF3+CfbdLPGX6ZhDaMgA= diff --git a/pkg/golinters/varnamelen.go b/pkg/golinters/varnamelen.go index a371b6fa2fa5..168c881c4bb3 100644 --- a/pkg/golinters/varnamelen.go +++ b/pkg/golinters/varnamelen.go @@ -17,8 +17,8 @@ func NewVarnamelen(settings *config.VarnamelenSettings) *goanalysis.Linter { cfg := map[string]map[string]interface{}{} if settings != nil { vnlCfg := map[string]interface{}{ - "checkReceiver": boolString(settings.CheckReceiver), - "checkReturn": boolString(settings.CheckReturn), + "checkReceiver": strconv.FormatBool(settings.CheckReceiver), + "checkReturn": strconv.FormatBool(settings.CheckReturn), "ignoreNames": strings.Join(settings.IgnoreNames, ","), } @@ -37,12 +37,5 @@ func NewVarnamelen(settings *config.VarnamelenSettings) *goanalysis.Linter { "checks that the length of a variable's name matches its scope", []*analysis.Analyzer{a}, cfg, - ) -} - -func boolString(b bool) string { - if b { - return "true" - } - return "false" + ).WithLoadMode(goanalysis.LoadModeSyntax) } diff --git a/pkg/lint/lintersdb/manager.go b/pkg/lint/lintersdb/manager.go index 443e00f009c4..ef425ca4c2f4 100644 --- a/pkg/lint/lintersdb/manager.go +++ b/pkg/lint/lintersdb/manager.go @@ -524,7 +524,6 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config { WithSince("v1.43.0"), linter.NewConfig(golinters.NewVarnamelen(varnamelenCfg)). WithPresets(linter.PresetStyle). - WithLoadForGoAnalysis(). WithURL("https://github.com/blizzy78/varnamelen"). WithSince("v1.43.0"), From f5d67efd5c9b9de14c2d616d32810f969e31e621 Mon Sep 17 00:00:00 2001 From: Maik Schreiber Date: Sat, 18 Sep 2021 19:32:08 +0200 Subject: [PATCH 4/5] remove ctx from ignored names since "ctx context.Context" is now always ignored anyway --- .golangci.example.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.golangci.example.yml b/.golangci.example.yml index 10204c32cd72..250ed7aa9e38 100644 --- a/.golangci.example.yml +++ b/.golangci.example.yml @@ -647,7 +647,6 @@ linters-settings: # Optional list of variable names that should be ignored completely. (defaults to empty list) ignore-names: - err - - ctx whitespace: multi-if: false # Enforces newlines (or comments) after every multi-line if statement From f96a1108f8eaa94c5ef2804d681449d39a4615fc Mon Sep 17 00:00:00 2001 From: Fernandez Ludovic Date: Sun, 26 Sep 2021 20:01:33 +0200 Subject: [PATCH 5/5] review: use std import in the linter test. --- test/testdata/varnamelen.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/testdata/varnamelen.go b/test/testdata/varnamelen.go index 02c6657a9b8b..3a49c396d798 100644 --- a/test/testdata/varnamelen.go +++ b/test/testdata/varnamelen.go @@ -1,8 +1,10 @@ //args: -Evarnamelen package testdata +import "math" + func varnamelen() { - x := 1 // ERROR "variable name 'x' is too short for the scope of its usage" + x := math.MinInt8 // ERROR "variable name 'x' is too short for the scope of its usage" x++ x++ x++