From df70758a05637121c43f1b25055734b1ae89ba38 Mon Sep 17 00:00:00 2001 From: Ryosei Karaki <38310693+karamaru-alpha@users.noreply.github.com> Date: Sun, 3 Mar 2024 22:51:16 +0900 Subject: [PATCH] build(deps): bump github.com/karamaru-alpha/copyloopvar from 1.0.4 to 1.0.8 (#4444) --- .golangci.reference.yml | 5 ++++ go.mod | 2 +- go.sum | 4 +-- pkg/config/linters_settings.go | 5 ++++ pkg/golinters/copyloopvar.go | 16 +++++++++-- pkg/lint/lintersdb/builder_linter.go | 2 +- test/testdata/configs/copyloopvar.yml | 3 ++ test/testdata/copyloopvar.go | 6 ++-- test/testdata/copyloopvar_custom.go | 41 +++++++++++++++++++++++++++ 9 files changed, 75 insertions(+), 9 deletions(-) create mode 100644 test/testdata/configs/copyloopvar.yml create mode 100644 test/testdata/copyloopvar_custom.go diff --git a/.golangci.reference.yml b/.golangci.reference.yml index 808aea95..7edfd746 100644 --- a/.golangci.reference.yml +++ b/.golangci.reference.yml @@ -149,6 +149,11 @@ linters-settings: first-strong-isolate: false pop-directional-isolate: false + copyloopvar: + # If true, ignore aliasing of loop variables. + # Default: false + ignore-alias: true + cyclop: # The maximal code complexity to report. # Default: 10 diff --git a/go.mod b/go.mod index 5147f829..f2609e1c 100644 --- a/go.mod +++ b/go.mod @@ -61,7 +61,7 @@ require ( github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af github.com/jjti/go-spancheck v0.5.3 github.com/julz/importas v0.1.0 - github.com/karamaru-alpha/copyloopvar v1.0.4 + github.com/karamaru-alpha/copyloopvar v1.0.8 github.com/kisielk/errcheck v1.7.0 github.com/kkHAIKE/contextcheck v1.1.4 github.com/kulti/thelper v0.6.3 diff --git a/go.sum b/go.sum index f53611f9..17377a20 100644 --- a/go.sum +++ b/go.sum @@ -322,8 +322,8 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/julz/importas v0.1.0 h1:F78HnrsjY3cR7j0etXy5+TU1Zuy7Xt08X/1aJnH5xXY= github.com/julz/importas v0.1.0/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0= -github.com/karamaru-alpha/copyloopvar v1.0.4 h1:JD6IPXo4+RawkSPe9uMKh9OtTzYKsCelAgPMUwaVxBw= -github.com/karamaru-alpha/copyloopvar v1.0.4/go.mod h1:u7CIfztblY0jZLOQZgH3oYsJzpC2A7S6u/lfgSXHy0k= +github.com/karamaru-alpha/copyloopvar v1.0.8 h1:gieLARwuByhEMxRwM3GRS/juJqFbLraftXIKDDNJ50Q= +github.com/karamaru-alpha/copyloopvar v1.0.8/go.mod h1:u7CIfztblY0jZLOQZgH3oYsJzpC2A7S6u/lfgSXHy0k= github.com/kisielk/errcheck v1.7.0 h1:+SbscKmWJ5mOK/bO1zS60F5I9WwZDWOfRsC4RwfwRV0= github.com/kisielk/errcheck v1.7.0/go.mod h1:1kLL+jV4e+CFfueBmI1dSK2ADDyQnlrnrY/FqKluHJQ= github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= diff --git a/pkg/config/linters_settings.go b/pkg/config/linters_settings.go index e55e5ad2..319f2101 100644 --- a/pkg/config/linters_settings.go +++ b/pkg/config/linters_settings.go @@ -206,6 +206,7 @@ var defaultLintersSettings = LintersSettings{ type LintersSettings struct { Asasalint AsasalintSettings BiDiChk BiDiChkSettings + CopyLoopVar CopyLoopVarSettings Cyclop Cyclop Decorder DecorderSettings Depguard DepGuardSettings @@ -313,6 +314,10 @@ type BiDiChkSettings struct { PopDirectionalIsolate bool `mapstructure:"pop-directional-isolate"` } +type CopyLoopVarSettings struct { + IgnoreAlias bool `mapstructure:"ignore-alias"` +} + type Cyclop struct { MaxComplexity int `mapstructure:"max-complexity"` PackageAverage float64 `mapstructure:"package-average"` diff --git a/pkg/golinters/copyloopvar.go b/pkg/golinters/copyloopvar.go index 0389dddd..02ce5f37 100644 --- a/pkg/golinters/copyloopvar.go +++ b/pkg/golinters/copyloopvar.go @@ -4,16 +4,26 @@ import ( "github.com/karamaru-alpha/copyloopvar" "golang.org/x/tools/go/analysis" + "github.com/golangci/golangci-lint/pkg/config" "github.com/golangci/golangci-lint/pkg/golinters/goanalysis" ) -func NewCopyLoopVar() *goanalysis.Linter { - a := copyloopvar.Analyzer +func NewCopyLoopVar(settings *config.CopyLoopVarSettings) *goanalysis.Linter { + a := copyloopvar.NewAnalyzer() + + var cfg map[string]map[string]any + if settings != nil { + cfg = map[string]map[string]any{ + a.Name: { + "ignore-alias": settings.IgnoreAlias, + }, + } + } return goanalysis.NewLinter( a.Name, a.Doc, []*analysis.Analyzer{a}, - nil, + cfg, ).WithLoadMode(goanalysis.LoadModeSyntax) } diff --git a/pkg/lint/lintersdb/builder_linter.go b/pkg/lint/lintersdb/builder_linter.go index 5fe538f6..67b19ce4 100644 --- a/pkg/lint/lintersdb/builder_linter.go +++ b/pkg/lint/lintersdb/builder_linter.go @@ -60,7 +60,7 @@ func (b LinterBuilder) Build(cfg *config.Config) []*linter.Config { WithLoadForGoAnalysis(). WithURL("https://github.com/kkHAIKE/contextcheck"), - linter.NewConfig(golinters.NewCopyLoopVar()). + linter.NewConfig(golinters.NewCopyLoopVar(&cfg.LintersSettings.CopyLoopVar)). WithSince("v1.57.0"). WithPresets(linter.PresetStyle). WithURL("https://github.com/karamaru-alpha/copyloopvar"). diff --git a/test/testdata/configs/copyloopvar.yml b/test/testdata/configs/copyloopvar.yml new file mode 100644 index 00000000..2c3b5872 --- /dev/null +++ b/test/testdata/configs/copyloopvar.yml @@ -0,0 +1,3 @@ +linters-settings: + copyloopvar: + ignore-alias: true diff --git a/test/testdata/copyloopvar.go b/test/testdata/copyloopvar.go index 7fdd2b04..b5f1a884 100644 --- a/test/testdata/copyloopvar.go +++ b/test/testdata/copyloopvar.go @@ -13,10 +13,12 @@ func copyloopvarCase1() { fns = append(fns, func() { fmt.Println(i) }) - _v := v // want `The copy of the 'for' variable "v" can be deleted \(Go 1\.22\+\)` + v := v // want `The copy of the 'for' variable "v" can be deleted \(Go 1\.22\+\)` fns = append(fns, func() { - fmt.Println(_v) + fmt.Println(v) }) + _v := v // want `The copy of the 'for' variable "v" can be deleted \(Go 1\.22\+\)` + _ = _v } for _, fn := range fns { fn() diff --git a/test/testdata/copyloopvar_custom.go b/test/testdata/copyloopvar_custom.go new file mode 100644 index 00000000..9ee37c6c --- /dev/null +++ b/test/testdata/copyloopvar_custom.go @@ -0,0 +1,41 @@ +//go:build go1.22 + +//golangcitest:args -Ecopyloopvar +//golangcitest:config_path testdata/configs/copyloopvar.yml +package testdata + +import "fmt" + +func copyloopvarCase1() { + slice := []int{1, 2, 3} + fns := make([]func(), 0, len(slice)*2) + for i, v := range slice { + i := i // want `The copy of the 'for' variable "i" can be deleted \(Go 1\.22\+\)` + fns = append(fns, func() { + fmt.Println(i) + }) + v := v // want `The copy of the 'for' variable "v" can be deleted \(Go 1\.22\+\)` + fns = append(fns, func() { + fmt.Println(v) + }) + _v := v + _ = _v + } + for _, fn := range fns { + fn() + } +} + +func copyloopvarCase2() { + loopCount := 3 + fns := make([]func(), 0, loopCount) + for i := 1; i <= loopCount; i++ { + i := i // want `The copy of the 'for' variable "i" can be deleted \(Go 1\.22\+\)` + fns = append(fns, func() { + fmt.Println(i) + }) + } + for _, fn := range fns { + fn() + } +}