feat: add reassign linter (#3064)
This commit is contained in:
parent
77962e9283
commit
58809c3bf5
@ -1225,6 +1225,13 @@ linters-settings:
|
|||||||
- CamelCase
|
- CamelCase
|
||||||
- UnitAbbreviations
|
- UnitAbbreviations
|
||||||
|
|
||||||
|
reassign:
|
||||||
|
# Patterns for global variable names that are checked for reassignment.
|
||||||
|
# See https://github.com/curioswitch/go-reassign#usage
|
||||||
|
# Default: ["EOF", "Err.*"]
|
||||||
|
patterns:
|
||||||
|
- ".*"
|
||||||
|
|
||||||
revive:
|
revive:
|
||||||
# Maximum number of open files at the same time.
|
# Maximum number of open files at the same time.
|
||||||
# See https://github.com/mgechev/revive#command-line-flags
|
# See https://github.com/mgechev/revive#command-line-flags
|
||||||
@ -1951,6 +1958,7 @@ linters:
|
|||||||
- prealloc
|
- prealloc
|
||||||
- predeclared
|
- predeclared
|
||||||
- promlinter
|
- promlinter
|
||||||
|
- reassign
|
||||||
- revive
|
- revive
|
||||||
- rowserrcheck
|
- rowserrcheck
|
||||||
- scopelint
|
- scopelint
|
||||||
@ -2055,6 +2063,7 @@ linters:
|
|||||||
- prealloc
|
- prealloc
|
||||||
- predeclared
|
- predeclared
|
||||||
- promlinter
|
- promlinter
|
||||||
|
- reassign
|
||||||
- revive
|
- revive
|
||||||
- rowserrcheck
|
- rowserrcheck
|
||||||
- scopelint
|
- scopelint
|
||||||
|
1
go.mod
1
go.mod
@ -21,6 +21,7 @@ require (
|
|||||||
github.com/breml/errchkjson v0.3.0
|
github.com/breml/errchkjson v0.3.0
|
||||||
github.com/butuzov/ireturn v0.1.1
|
github.com/butuzov/ireturn v0.1.1
|
||||||
github.com/charithe/durationcheck v0.0.9
|
github.com/charithe/durationcheck v0.0.9
|
||||||
|
github.com/curioswitch/go-reassign v0.1.2
|
||||||
github.com/daixiang0/gci v0.6.3
|
github.com/daixiang0/gci v0.6.3
|
||||||
github.com/denis-tingaikin/go-header v0.4.3
|
github.com/denis-tingaikin/go-header v0.4.3
|
||||||
github.com/esimonov/ifshort v1.0.4
|
github.com/esimonov/ifshort v1.0.4
|
||||||
|
2
go.sum
generated
2
go.sum
generated
@ -103,6 +103,8 @@ github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnht
|
|||||||
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||||
github.com/cristalhq/acmd v0.7.0/go.mod h1:LG5oa43pE/BbxtfMoImHCQN++0Su7dzipdgBjMCBVDQ=
|
github.com/cristalhq/acmd v0.7.0/go.mod h1:LG5oa43pE/BbxtfMoImHCQN++0Su7dzipdgBjMCBVDQ=
|
||||||
|
github.com/curioswitch/go-reassign v0.1.2 h1:ekM07+z+VFT560Exz4mTv0/s1yU9gem6CJc/tlYpkmI=
|
||||||
|
github.com/curioswitch/go-reassign v0.1.2/go.mod h1:bFJIHgtTM3hRm2sKXSPkbwNjSFyGURQXyn4IXD2qwfQ=
|
||||||
github.com/daixiang0/gci v0.6.3 h1:wUAqXChk8HbwXn8AfxD9DYSCp9Bpz1L3e6Q4Roe+q9E=
|
github.com/daixiang0/gci v0.6.3 h1:wUAqXChk8HbwXn8AfxD9DYSCp9Bpz1L3e6Q4Roe+q9E=
|
||||||
github.com/daixiang0/gci v0.6.3/go.mod h1:EpVfrztufwVgQRXjnX4zuNinEpLj5OmMjtu/+MB0V0c=
|
github.com/daixiang0/gci v0.6.3/go.mod h1:EpVfrztufwVgQRXjnX4zuNinEpLj5OmMjtu/+MB0V0c=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
@ -168,6 +168,7 @@ type LintersSettings struct {
|
|||||||
Prealloc PreallocSettings
|
Prealloc PreallocSettings
|
||||||
Predeclared PredeclaredSettings
|
Predeclared PredeclaredSettings
|
||||||
Promlinter PromlinterSettings
|
Promlinter PromlinterSettings
|
||||||
|
Reassign ReassignSettings
|
||||||
Revive ReviveSettings
|
Revive ReviveSettings
|
||||||
RowsErrCheck RowsErrCheckSettings
|
RowsErrCheck RowsErrCheckSettings
|
||||||
Staticcheck StaticCheckSettings
|
Staticcheck StaticCheckSettings
|
||||||
@ -532,6 +533,10 @@ type PromlinterSettings struct {
|
|||||||
DisabledLinters []string `mapstructure:"disabled-linters"`
|
DisabledLinters []string `mapstructure:"disabled-linters"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ReassignSettings struct {
|
||||||
|
Patterns []string `mapstructure:"patterns"`
|
||||||
|
}
|
||||||
|
|
||||||
type ReviveSettings struct {
|
type ReviveSettings struct {
|
||||||
MaxOpenFiles int `mapstructure:"max-open-files"`
|
MaxOpenFiles int `mapstructure:"max-open-files"`
|
||||||
IgnoreGeneratedHeader bool `mapstructure:"ignore-generated-header"`
|
IgnoreGeneratedHeader bool `mapstructure:"ignore-generated-header"`
|
||||||
|
32
pkg/golinters/reassign.go
Normal file
32
pkg/golinters/reassign.go
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
package golinters
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/curioswitch/go-reassign"
|
||||||
|
"golang.org/x/tools/go/analysis"
|
||||||
|
|
||||||
|
"github.com/golangci/golangci-lint/pkg/config"
|
||||||
|
"github.com/golangci/golangci-lint/pkg/golinters/goanalysis"
|
||||||
|
)
|
||||||
|
|
||||||
|
func NewReassign(settings *config.ReassignSettings) *goanalysis.Linter {
|
||||||
|
a := reassign.NewAnalyzer()
|
||||||
|
|
||||||
|
var cfg map[string]map[string]interface{}
|
||||||
|
if settings != nil && len(settings.Patterns) > 0 {
|
||||||
|
cfg = map[string]map[string]interface{}{
|
||||||
|
a.Name: {
|
||||||
|
reassign.FlagPattern: fmt.Sprintf("^(%s)$", strings.Join(settings.Patterns, "|")),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return goanalysis.NewLinter(
|
||||||
|
a.Name,
|
||||||
|
a.Doc,
|
||||||
|
[]*analysis.Analyzer{a},
|
||||||
|
cfg,
|
||||||
|
).WithLoadMode(goanalysis.LoadModeSyntax)
|
||||||
|
}
|
@ -154,6 +154,7 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config {
|
|||||||
preallocCfg *config.PreallocSettings
|
preallocCfg *config.PreallocSettings
|
||||||
predeclaredCfg *config.PredeclaredSettings
|
predeclaredCfg *config.PredeclaredSettings
|
||||||
promlinterCfg *config.PromlinterSettings
|
promlinterCfg *config.PromlinterSettings
|
||||||
|
reassignCfg *config.ReassignSettings
|
||||||
reviveCfg *config.ReviveSettings
|
reviveCfg *config.ReviveSettings
|
||||||
rowserrcheckCfg *config.RowsErrCheckSettings
|
rowserrcheckCfg *config.RowsErrCheckSettings
|
||||||
staticcheckCfg *config.StaticCheckSettings
|
staticcheckCfg *config.StaticCheckSettings
|
||||||
@ -227,6 +228,7 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config {
|
|||||||
parallelTestCfg = &m.cfg.LintersSettings.ParallelTest
|
parallelTestCfg = &m.cfg.LintersSettings.ParallelTest
|
||||||
predeclaredCfg = &m.cfg.LintersSettings.Predeclared
|
predeclaredCfg = &m.cfg.LintersSettings.Predeclared
|
||||||
promlinterCfg = &m.cfg.LintersSettings.Promlinter
|
promlinterCfg = &m.cfg.LintersSettings.Promlinter
|
||||||
|
reassignCfg = &m.cfg.LintersSettings.Reassign
|
||||||
reviveCfg = &m.cfg.LintersSettings.Revive
|
reviveCfg = &m.cfg.LintersSettings.Revive
|
||||||
rowserrcheckCfg = &m.cfg.LintersSettings.RowsErrCheck
|
rowserrcheckCfg = &m.cfg.LintersSettings.RowsErrCheck
|
||||||
staticcheckCfg = &m.cfg.LintersSettings.Staticcheck
|
staticcheckCfg = &m.cfg.LintersSettings.Staticcheck
|
||||||
@ -683,6 +685,11 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config {
|
|||||||
WithPresets(linter.PresetStyle).
|
WithPresets(linter.PresetStyle).
|
||||||
WithURL("https://github.com/yeya24/promlinter"),
|
WithURL("https://github.com/yeya24/promlinter"),
|
||||||
|
|
||||||
|
linter.NewConfig(golinters.NewReassign(reassignCfg)).
|
||||||
|
WithSince("1.49.0").
|
||||||
|
WithPresets(linter.PresetBugs).
|
||||||
|
WithURL("https://github.com/curioswitch/go-reassign"),
|
||||||
|
|
||||||
linter.NewConfig(golinters.NewRevive(reviveCfg)).
|
linter.NewConfig(golinters.NewRevive(reviveCfg)).
|
||||||
WithSince("v1.37.0").
|
WithSince("v1.37.0").
|
||||||
WithPresets(linter.PresetStyle, linter.PresetMetaLinter).
|
WithPresets(linter.PresetStyle, linter.PresetMetaLinter).
|
||||||
|
5
test/testdata/configs/reassign_patterns.yml
vendored
Normal file
5
test/testdata/configs/reassign_patterns.yml
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
linters-settings:
|
||||||
|
reassign:
|
||||||
|
patterns:
|
||||||
|
- DefaultClient
|
||||||
|
- DefaultTransport
|
13
test/testdata/reassign.go
vendored
Normal file
13
test/testdata/reassign.go
vendored
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
//golangcitest:args -Ereassign
|
||||||
|
package testdata
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
func reassignTest() {
|
||||||
|
http.DefaultClient = nil
|
||||||
|
http.DefaultTransport = nil
|
||||||
|
io.EOF = nil // want `reassigning variable EOF in other package io`
|
||||||
|
}
|
14
test/testdata/reassign_patterns.go
vendored
Normal file
14
test/testdata/reassign_patterns.go
vendored
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
//golangcitest:args -Ereassign
|
||||||
|
//golangcitest:config_path testdata/configs/reassign_patterns.yml
|
||||||
|
package testdata
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
func reassignTestPatterns() {
|
||||||
|
http.DefaultClient = nil // want `reassigning variable DefaultClient in other package http`
|
||||||
|
http.DefaultTransport = nil // want `reassigning variable DefaultTransport in other package http`
|
||||||
|
io.EOF = nil
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user