Skip to content

Commit

Permalink
feat: add reassign linter
Browse files Browse the repository at this point in the history
  • Loading branch information
chokoswitch committed Aug 5, 2022
1 parent 0a884a4 commit b0a752f
Show file tree
Hide file tree
Showing 7 changed files with 59 additions and 0 deletions.
7 changes: 7 additions & 0 deletions .golangci.reference.yml
Expand Up @@ -1221,6 +1221,12 @@ linters-settings:
- CamelCase
- UnitAbbreviations

reassign:
# Pattern for variables that are checked for reassignment.
# See https://github.com/curioswitch/go-reassign#usage
# Defaults to "^(EOF|Err.*)$"
pattern: ".*"

revive:
# Maximum number of open files at the same time.
# See https://github.com/mgechev/revive#command-line-flags
Expand Down Expand Up @@ -1941,6 +1947,7 @@ linters:
- prealloc
- predeclared
- promlinter
- reassign
- revive
- rowserrcheck
- scopelint
Expand Down
1 change: 1 addition & 0 deletions go.mod
Expand Up @@ -21,6 +21,7 @@ require (
github.com/breml/errchkjson v0.3.0
github.com/butuzov/ireturn v0.1.1
github.com/charithe/durationcheck v0.0.9
github.com/curioswitch/go-reassign v0.1.0
github.com/daixiang0/gci v0.6.2
github.com/denis-tingaikin/go-header v0.4.3
github.com/esimonov/ifshort v1.0.4
Expand Down
2 changes: 2 additions & 0 deletions go.sum

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions pkg/config/linters_settings.go
Expand Up @@ -167,6 +167,7 @@ type LintersSettings struct {
Prealloc PreallocSettings
Predeclared PredeclaredSettings
Promlinter PromlinterSettings
Reassign ReassignSettings
Revive ReviveSettings
RowsErrCheck RowsErrCheckSettings
Staticcheck StaticCheckSettings
Expand Down Expand Up @@ -517,6 +518,10 @@ type PromlinterSettings struct {
DisabledLinters []string `mapstructure:"disabled-linters"`
}

type ReassignSettings struct {
Pattern string `mapstructure:"pattern"`
}

type ReviveSettings struct {
MaxOpenFiles int `mapstructure:"max-open-files"`
IgnoreGeneratedHeader bool `mapstructure:"ignore-generated-header"`
Expand Down
29 changes: 29 additions & 0 deletions pkg/golinters/reassign.go
@@ -0,0 +1,29 @@
package golinters

import (
"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 {
cfg = map[string]map[string]interface{}{
a.Name: {
reassign.FlagPattern: settings.Pattern,
},
}
}

return goanalysis.NewLinter(
a.Name,
a.Doc,
[]*analysis.Analyzer{a},
cfg,
).WithLoadMode(goanalysis.LoadModeSyntax)
}
7 changes: 7 additions & 0 deletions pkg/lint/lintersdb/manager.go
Expand Up @@ -153,6 +153,7 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config {
preallocCfg *config.PreallocSettings
predeclaredCfg *config.PredeclaredSettings
promlinterCfg *config.PromlinterSettings
reassignCfg *config.ReassignSettings
reviveCfg *config.ReviveSettings
rowserrcheckCfg *config.RowsErrCheckSettings
staticcheckCfg *config.StaticCheckSettings
Expand Down Expand Up @@ -225,6 +226,7 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config {
parallelTestCfg = &m.cfg.LintersSettings.ParallelTest
predeclaredCfg = &m.cfg.LintersSettings.Predeclared
promlinterCfg = &m.cfg.LintersSettings.Promlinter
reassignCfg = &m.cfg.LintersSettings.Reassign
reviveCfg = &m.cfg.LintersSettings.Revive
rowserrcheckCfg = &m.cfg.LintersSettings.RowsErrCheck
staticcheckCfg = &m.cfg.LintersSettings.Staticcheck
Expand Down Expand Up @@ -668,6 +670,11 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config {
WithPresets(linter.PresetStyle).
WithURL("https://github.com/yeya24/promlinter"),

linter.NewConfig(golinters.NewReassign(reassignCfg)).
WithSince("1.49.0").
WithPresets(linter.PresetBugs).
WithURL("https://github.com/curioswitch/go-noreassign"),

linter.NewConfig(golinters.NewRevive(reviveCfg)).
WithSince("v1.37.0").
WithPresets(linter.PresetStyle, linter.PresetMetaLinter).
Expand Down
8 changes: 8 additions & 0 deletions test/testdata/reassign.go
@@ -0,0 +1,8 @@
//golangcitest:args -Ereassign
package testdata

import "io"

func breakIO() {
io.EOF = nil // ERROR `reassigning variable EOF in other package io`
}

0 comments on commit b0a752f

Please sign in to comment.