From b96ff83e0ec0f6b921538b8fc7ce52760c138359 Mon Sep 17 00:00:00 2001 From: Clifton Kaznocha Date: Thu, 15 Feb 2024 15:03:11 -0800 Subject: [PATCH] feat: add intrange linter (#4378) --- .golangci.reference.yml | 2 ++ go.mod | 1 + go.sum | 2 ++ pkg/golinters/intrange.go | 19 +++++++++++++++++++ pkg/lint/lintersdb/manager.go | 4 ++++ test/testdata/intrange.go | 19 +++++++++++++++++++ 6 files changed, 47 insertions(+) create mode 100644 pkg/golinters/intrange.go create mode 100644 test/testdata/intrange.go diff --git a/.golangci.reference.yml b/.golangci.reference.yml index d032fbb8..ea5a70b8 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 6e48bde0..2c6f6eca 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 bbc4a066..9d63c8f9 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 00000000..8de956dc --- /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 fdc73ec7..fda1e320 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 00000000..3d9b711d --- /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 + } +}