Skip to content

Commit 53c7da9

Browse files
committed
feat: add reassign linter
1 parent 0a884a4 commit 53c7da9

File tree

7 files changed

+59
-0
lines changed

7 files changed

+59
-0
lines changed

.golangci.reference.yml

+7
Original file line numberDiff line numberDiff line change
@@ -1221,6 +1221,12 @@ linters-settings:
12211221
- CamelCase
12221222
- UnitAbbreviations
12231223

1224+
reassign:
1225+
# Pattern for variables that are checked for reassignment.
1226+
# See https://github.com/curioswitch/go-reassign#usage
1227+
# Defaults to "^(EOF|Err.*)$"
1228+
pattern: ".*"
1229+
12241230
revive:
12251231
# Maximum number of open files at the same time.
12261232
# See https://github.com/mgechev/revive#command-line-flags
@@ -1941,6 +1947,7 @@ linters:
19411947
- prealloc
19421948
- predeclared
19431949
- promlinter
1950+
- reassign
19441951
- revive
19451952
- rowserrcheck
19461953
- scopelint

go.mod

+1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ require (
2121
github.com/breml/errchkjson v0.3.0
2222
github.com/butuzov/ireturn v0.1.1
2323
github.com/charithe/durationcheck v0.0.9
24+
github.com/curioswitch/go-reassign v0.1.0
2425
github.com/daixiang0/gci v0.6.2
2526
github.com/denis-tingaikin/go-header v0.4.3
2627
github.com/esimonov/ifshort v1.0.4

go.sum

+2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/config/linters_settings.go

+5
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ type LintersSettings struct {
167167
Prealloc PreallocSettings
168168
Predeclared PredeclaredSettings
169169
Promlinter PromlinterSettings
170+
Reassign ReassignSettings
170171
Revive ReviveSettings
171172
RowsErrCheck RowsErrCheckSettings
172173
Staticcheck StaticCheckSettings
@@ -517,6 +518,10 @@ type PromlinterSettings struct {
517518
DisabledLinters []string `mapstructure:"disabled-linters"`
518519
}
519520

521+
type ReassignSettings struct {
522+
Pattern string `mapstructure:"pattern"`
523+
}
524+
520525
type ReviveSettings struct {
521526
MaxOpenFiles int `mapstructure:"max-open-files"`
522527
IgnoreGeneratedHeader bool `mapstructure:"ignore-generated-header"`

pkg/golinters/reassign.go

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package golinters
2+
3+
import (
4+
"github.com/curioswitch/go-reassign"
5+
"golang.org/x/tools/go/analysis"
6+
7+
"github.com/golangci/golangci-lint/pkg/config"
8+
"github.com/golangci/golangci-lint/pkg/golinters/goanalysis"
9+
)
10+
11+
func NewReassign(settings *config.ReassignSettings) *goanalysis.Linter {
12+
a := reassign.NewAnalyzer()
13+
14+
var cfg map[string]map[string]interface{}
15+
if settings != nil {
16+
cfg = map[string]map[string]interface{}{
17+
a.Name: {
18+
reassign.FlagPattern: settings.Pattern,
19+
},
20+
}
21+
}
22+
23+
return goanalysis.NewLinter(
24+
a.Name,
25+
a.Doc,
26+
[]*analysis.Analyzer{a},
27+
cfg,
28+
).WithLoadMode(goanalysis.LoadModeSyntax)
29+
}

pkg/lint/lintersdb/manager.go

+7
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config {
153153
preallocCfg *config.PreallocSettings
154154
predeclaredCfg *config.PredeclaredSettings
155155
promlinterCfg *config.PromlinterSettings
156+
reassignCfg *config.ReassignSettings
156157
reviveCfg *config.ReviveSettings
157158
rowserrcheckCfg *config.RowsErrCheckSettings
158159
staticcheckCfg *config.StaticCheckSettings
@@ -225,6 +226,7 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config {
225226
parallelTestCfg = &m.cfg.LintersSettings.ParallelTest
226227
predeclaredCfg = &m.cfg.LintersSettings.Predeclared
227228
promlinterCfg = &m.cfg.LintersSettings.Promlinter
229+
reassignCfg = &m.cfg.LintersSettings.Reassign
228230
reviveCfg = &m.cfg.LintersSettings.Revive
229231
rowserrcheckCfg = &m.cfg.LintersSettings.RowsErrCheck
230232
staticcheckCfg = &m.cfg.LintersSettings.Staticcheck
@@ -668,6 +670,11 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config {
668670
WithPresets(linter.PresetStyle).
669671
WithURL("https://github.com/yeya24/promlinter"),
670672

673+
linter.NewConfig(golinters.NewReassign(reassignCfg)).
674+
WithSince("1.49.0").
675+
WithPresets(linter.PresetBugs).
676+
WithURL("https://github.com/curioswitch/go-reassign"),
677+
671678
linter.NewConfig(golinters.NewRevive(reviveCfg)).
672679
WithSince("v1.37.0").
673680
WithPresets(linter.PresetStyle, linter.PresetMetaLinter).

test/testdata/reassign.go

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
//golangcitest:args -Ereassign
2+
package testdata
3+
4+
import "io"
5+
6+
func breakIO() {
7+
io.EOF = nil // ERROR `reassigning variable EOF in other package io`
8+
}

0 commit comments

Comments
 (0)