diff --git a/.golangci.reference.yml b/.golangci.reference.yml index d032fbb886d0..ea5a70b8c153 100644 --- a/.golangci.reference.yml +++ b/.golangci.reference.yml @@ -2538,6 +2538,7 @@ linters: - ineffassign - interfacebloat - interfacer + - intrange - ireturn - lll - loggercheck @@ -2659,6 +2660,7 @@ linters: - ineffassign - interfacebloat - interfacer + - intrange - ireturn - lll - loggercheck diff --git a/go.mod b/go.mod index 6e48bde0d495..2c6f6eca4a6f 100644 --- a/go.mod +++ b/go.mod @@ -29,6 +29,7 @@ require ( github.com/butuzov/mirror v1.1.0 github.com/catenacyber/perfsprint v0.7.0 github.com/charithe/durationcheck v0.0.10 + github.com/ckaznocha/intrange v0.1.0 github.com/curioswitch/go-reassign v0.2.0 github.com/daixiang0/gci v0.12.1 github.com/denis-tingaikin/go-header v0.4.3 diff --git a/go.sum b/go.sum index bbc4a06643a9..9d63c8f94af1 100644 --- a/go.sum +++ b/go.sum @@ -115,6 +115,8 @@ github.com/chavacava/garif v0.1.0/go.mod h1:XMyYCkEL58DF0oyW4qDjjnPWONs2HBqYKI+U github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/ckaznocha/intrange v0.1.0 h1:ZiGBhvrdsKpoEfzh9CjBfDSZof6QB0ORY5tXasUtiew= +github.com/ckaznocha/intrange v0.1.0/go.mod h1:Vwa9Ekex2BrEQMg6zlrWwbs/FtYw7eS5838Q7UjK7TQ= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= diff --git a/pkg/golinters/intrange.go b/pkg/golinters/intrange.go new file mode 100644 index 000000000000..8de956dc129b --- /dev/null +++ b/pkg/golinters/intrange.go @@ -0,0 +1,19 @@ +package golinters + +import ( + "github.com/ckaznocha/intrange" + "golang.org/x/tools/go/analysis" + + "github.com/golangci/golangci-lint/pkg/golinters/goanalysis" +) + +func NewIntrange() *goanalysis.Linter { + a := intrange.Analyzer + + return goanalysis.NewLinter( + a.Name, + a.Doc, + []*analysis.Analyzer{a}, + nil, + ).WithLoadMode(goanalysis.LoadModeSyntax) +} diff --git a/pkg/lint/lintersdb/manager.go b/pkg/lint/lintersdb/manager.go index fdc73ec734a1..fda1e32026ca 100644 --- a/pkg/lint/lintersdb/manager.go +++ b/pkg/lint/lintersdb/manager.go @@ -608,6 +608,10 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config { WithURL("https://github.com/mvdan/interfacer"). Deprecated("The repository of the linter has been archived by the owner.", "v1.38.0", ""), + linter.NewConfig(golinters.NewIntrange()). + WithSince("v1.57.0"). + WithURL("https://github.com/ckaznocha/intrange"), + linter.NewConfig(golinters.NewIreturn(ireturnCfg)). WithSince("v1.43.0"). WithPresets(linter.PresetStyle). diff --git a/test/testdata/intrange.go b/test/testdata/intrange.go new file mode 100644 index 000000000000..3d9b711d38bc --- /dev/null +++ b/test/testdata/intrange.go @@ -0,0 +1,19 @@ +//golangcitest:args -Eintrange +package testdata + +import "math" + +func CheckIntrange() { + for i := 0; i < 10; i++ { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)` + } + + for i := uint8(0); i < math.MaxInt8; i++ { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)` + } + + for i := 0; i < 10; i += 2 { + } + + for i := 0; i < 10; i++ { + i += 1 + } +}