diff --git a/go.mod b/go.mod index 7030f2f87620..7da5c074e24d 100644 --- a/go.mod +++ b/go.mod @@ -58,7 +58,7 @@ require ( github.com/jingyugao/rowserrcheck v1.1.1 github.com/jjti/go-spancheck v0.6.4 github.com/julz/importas v0.2.0 - github.com/karamaru-alpha/copyloopvar v1.1.0 + github.com/karamaru-alpha/copyloopvar v1.2.1 github.com/kisielk/errcheck v1.8.0 github.com/kkHAIKE/contextcheck v1.1.5 github.com/kulti/thelper v0.6.3 diff --git a/go.sum b/go.sum index b0570ef00b60..61ad2bd75f53 100644 --- a/go.sum +++ b/go.sum @@ -326,8 +326,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.2.0 h1:y+MJN/UdL63QbFJHws9BVC5RpA2iq0kpjrFajTGivjQ= github.com/julz/importas v0.2.0/go.mod h1:pThlt589EnCYtMnmhmRYY/qn9lCf/frPOK+WMx3xiJY= -github.com/karamaru-alpha/copyloopvar v1.1.0 h1:x7gNyKcC2vRBO1H2Mks5u1VxQtYvFiym7fCjIP8RPos= -github.com/karamaru-alpha/copyloopvar v1.1.0/go.mod h1:u7CIfztblY0jZLOQZgH3oYsJzpC2A7S6u/lfgSXHy0k= +github.com/karamaru-alpha/copyloopvar v1.2.1 h1:wmZaZYIjnJ0b5UoKDjUHrikcV0zuPyyxI4SVplLd2CI= +github.com/karamaru-alpha/copyloopvar v1.2.1/go.mod h1:nFmMlFNlClC2BPvNaHMdkirmTJxVCY0lhxBtlfOypMM= github.com/kisielk/errcheck v1.8.0 h1:ZX/URYa7ilESY19ik/vBmCn6zdGQLxACwjAcWbHlYlg= github.com/kisielk/errcheck v1.8.0/go.mod h1:1kLL+jV4e+CFfueBmI1dSK2ADDyQnlrnrY/FqKluHJQ= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= diff --git a/pkg/golinters/copyloopvar/copyloopvar_integration_test.go b/pkg/golinters/copyloopvar/copyloopvar_integration_test.go index d26700d9dfd9..348fc893e824 100644 --- a/pkg/golinters/copyloopvar/copyloopvar_integration_test.go +++ b/pkg/golinters/copyloopvar/copyloopvar_integration_test.go @@ -9,3 +9,11 @@ import ( func TestFromTestdata(t *testing.T) { integration.RunTestdata(t) } + +func TestFix(t *testing.T) { + integration.RunFix(t) +} + +func TestFixPathPrefix(t *testing.T) { + integration.RunFixPathPrefix(t) +} diff --git a/pkg/golinters/copyloopvar/testdata/fix/in/copyloopvar.go b/pkg/golinters/copyloopvar/testdata/fix/in/copyloopvar.go new file mode 100644 index 000000000000..2563f1e1711c --- /dev/null +++ b/pkg/golinters/copyloopvar/testdata/fix/in/copyloopvar.go @@ -0,0 +1,39 @@ +//golangcitest:args -Ecopyloopvar +//golangcitest:expected_exitcode 0 +package testdata + +import "fmt" + +func _() { + 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 _() { + 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() + } +} diff --git a/pkg/golinters/copyloopvar/testdata/fix/out/copyloopvar.go b/pkg/golinters/copyloopvar/testdata/fix/out/copyloopvar.go new file mode 100644 index 000000000000..5ab77817bcfc --- /dev/null +++ b/pkg/golinters/copyloopvar/testdata/fix/out/copyloopvar.go @@ -0,0 +1,39 @@ +//golangcitest:args -Ecopyloopvar +//golangcitest:expected_exitcode 0 +package testdata + +import "fmt" + +func _() { + slice := []int{1, 2, 3} + fns := make([]func(), 0, len(slice)*2) + for i, v := range slice { + // want `The copy of the 'for' variable "i" can be deleted \(Go 1\.22\+\)` + fns = append(fns, func() { + fmt.Println(i) + }) + // 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 _() { + loopCount := 3 + fns := make([]func(), 0, loopCount) + for i := 1; i <= loopCount; 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() + } +} diff --git a/pkg/lint/lintersdb/builder_linter.go b/pkg/lint/lintersdb/builder_linter.go index 4338aa88ccf9..116e46a9f4ee 100644 --- a/pkg/lint/lintersdb/builder_linter.go +++ b/pkg/lint/lintersdb/builder_linter.go @@ -181,6 +181,7 @@ func (LinterBuilder) Build(cfg *config.Config) ([]*linter.Config, error) { linter.NewConfig(copyloopvar.New(&cfg.LintersSettings.CopyLoopVar)). WithSince("v1.57.0"). WithPresets(linter.PresetStyle). + WithAutoFix(). WithURL("https://github.com/karamaru-alpha/copyloopvar"). WithNoopFallback(cfg, linter.IsGoLowerThanGo122()),