From 987af5d83557bd8261fa10df00d5a17e7995f638 Mon Sep 17 00:00:00 2001 From: Sasha Melentyev Date: Mon, 25 Jul 2022 11:10:01 +0300 Subject: [PATCH] feat: add usestdlibvars --- .golangci.reference.yml | 2 + go.mod | 1 + go.sum | 2 + pkg/golinters/usestdlibvars.go | 19 ++++++++ pkg/lint/lintersdb/manager.go | 5 ++ test/testdata/usestdlibvars.go | 89 ++++++++++++++++++++++++++++++++++ 6 files changed, 118 insertions(+) create mode 100644 pkg/golinters/usestdlibvars.go create mode 100644 test/testdata/usestdlibvars.go diff --git a/.golangci.reference.yml b/.golangci.reference.yml index dd1459c6b2e5..9ce0ff26a29b 100644 --- a/.golangci.reference.yml +++ b/.golangci.reference.yml @@ -1927,6 +1927,7 @@ linters: - unconvert - unparam - unused + - usestdlibvars - varcheck - varnamelen - wastedassign @@ -2028,6 +2029,7 @@ linters: - unconvert - unparam - unused + - usestdlibvars - varcheck - varnamelen - wastedassign diff --git a/go.mod b/go.mod index b8a76694618f..ecce3441eb2b 100644 --- a/go.mod +++ b/go.mod @@ -74,6 +74,7 @@ require ( github.com/ryancurrah/gomodguard v1.2.3 github.com/ryanrolds/sqlclosecheck v0.3.0 github.com/sanposhiho/wastedassign/v2 v2.0.6 + github.com/sashamelentyev/usestdlibvars v1.5.0 github.com/securego/gosec/v2 v2.12.0 github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c github.com/shirou/gopsutil/v3 v3.22.6 diff --git a/go.sum b/go.sum index 80931b84c0e2..ff408bacaafd 100644 --- a/go.sum +++ b/go.sum @@ -600,6 +600,8 @@ github.com/ryanrolds/sqlclosecheck v0.3.0 h1:AZx+Bixh8zdUBxUA1NxbxVAS78vTPq4rCb8 github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= github.com/sanposhiho/wastedassign/v2 v2.0.6 h1:+6/hQIHKNJAUixEj6EmOngGIisyeI+T3335lYTyxRoA= github.com/sanposhiho/wastedassign/v2 v2.0.6/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= +github.com/sashamelentyev/usestdlibvars v1.5.0 h1:XnVGLLfMbQdEHr73eFNk6Lm2as36cx6FoTEwREDXDuE= +github.com/sashamelentyev/usestdlibvars v1.5.0/go.mod h1:BFt7b5mSVHaaa26ZupiNRV2ODViQBxZZVhtAxAJRrjs= github.com/securego/gosec/v2 v2.12.0 h1:CQWdW7ATFpvLSohMVsajscfyHJ5rsGmEXmsNcsDNmAg= github.com/securego/gosec/v2 v2.12.0/go.mod h1:iTpT+eKTw59bSgklBHlSnH5O2tNygHMDxfvMubA4i7I= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= diff --git a/pkg/golinters/usestdlibvars.go b/pkg/golinters/usestdlibvars.go new file mode 100644 index 000000000000..89db4b63cb6f --- /dev/null +++ b/pkg/golinters/usestdlibvars.go @@ -0,0 +1,19 @@ +package golinters + +import ( + "github.com/sashamelentyev/usestdlibvars/pkg/analyzer" + "golang.org/x/tools/go/analysis" + + "github.com/golangci/golangci-lint/pkg/golinters/goanalysis" +) + +func NewUseStdlibVars() *goanalysis.Linter { + a := analyzer.New() + + 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 048143018dc4..ea5e2d403aa5 100644 --- a/pkg/lint/lintersdb/manager.go +++ b/pkg/lint/lintersdb/manager.go @@ -766,6 +766,11 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config { WithChangeTypes(). WithURL("https://github.com/dominikh/go-tools/tree/master/unused"), + linter.NewConfig(golinters.NewUseStdlibVars()). + WithSince("v1.48.0"). + WithPresets(linter.PresetStyle). + WithURL("https://github.com/sashamelentyev/usestdlibvars"), + linter.NewConfig(golinters.NewVarcheck(varcheckCfg)). WithSince("v1.0.0"). WithLoadForGoAnalysis(). diff --git a/test/testdata/usestdlibvars.go b/test/testdata/usestdlibvars.go new file mode 100644 index 000000000000..d2092e04ae4c --- /dev/null +++ b/test/testdata/usestdlibvars.go @@ -0,0 +1,89 @@ +//golangcitest:args -Eusestdlibvars +package testdata + +import "net/http" + +func _200() { + _ = 200 +} + +func _200_1() { + var w http.ResponseWriter + w.WriteHeader(200) // ERROR `can use http.StatusOK instead "200"` +} + +func sunday() { + _ = "Sunday" // ERROR `can use time.Sunday.String\(\) instead "Sunday"` +} + +func monday() { + _ = "Monday" // ERROR `can use time.Monday.String\(\) instead "Monday"` +} + +func tuesday() { + _ = "Tuesday" // ERROR `can use time.Tuesday.String\(\) instead "Tuesday"` +} + +func wednesday() { + _ = "Wednesday" // ERROR `can use time.Wednesday.String\(\) instead "Wednesday"` +} + +func thursday() { + _ = "Thursday" // ERROR `can use time.Thursday.String\(\) instead "Thursday"` +} + +func friday() { + _ = "Friday" // ERROR `can use time.Friday.String\(\) instead "Friday"` +} + +func saturday() { + _ = "Saturday" // ERROR `can use time.Saturday.String\(\) instead "Saturday"` +} + +func january() { + _ = "January" // ERROR `can use time.January.String\(\) instead "January"` +} + +func february() { + _ = "February" // ERROR `can use time.February.String\(\) instead "February"` +} + +func march() { + _ = "March" // ERROR `can use time.March.String\(\) instead "March"` +} + +func april() { + _ = "April" // ERROR `can use time.April.String\(\) instead "April"` +} + +func may() { + _ = "May" // ERROR `can use time.May.String\(\) instead "May"` +} + +func june() { + _ = "June" // ERROR `can use time.June.String\(\) instead "June"` +} + +func july() { + _ = "July" // ERROR `can use time.July.String\(\) instead "July"` +} + +func august() { + _ = "August" // ERROR `can use time.August.String\(\) instead "August"` +} + +func september() { + _ = "September" // ERROR `can use time.September.String\(\) instead "September"` +} + +func october() { + _ = "October" // ERROR `can use time.October.String\(\) instead "October"` +} + +func november() { + _ = "November" // ERROR `can use time.November.String\(\) instead "November"` +} + +func december() { + _ = "December" // ERROR `can use time.December.String\(\) instead "December"` +}