Add nilerr linter. (#1788)
This commit is contained in:
parent
05836e489b
commit
66fc779795
1
go.mod
1
go.mod
@ -31,6 +31,7 @@ require (
|
||||
github.com/golangci/revgrep v0.0.0-20210208091834-cd28932614b5
|
||||
github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4
|
||||
github.com/gordonklaus/ineffassign v0.0.0-20210225214923-2e10b2664254
|
||||
github.com/gostaticanalysis/nilerr v0.1.1
|
||||
github.com/jgautheron/goconst v1.4.0
|
||||
github.com/jingyugao/rowserrcheck v0.0.0-20210130005344-c6a0c12dd98d
|
||||
github.com/jirfag/go-printf-func-name v0.0.0-20191110105641-45db9963cdd3
|
||||
|
3
go.sum
generated
3
go.sum
generated
@ -179,6 +179,8 @@ github.com/gostaticanalysis/analysisutil v0.4.1/go.mod h1:18U/DLpRgIUd459wGxVHE0
|
||||
github.com/gostaticanalysis/comment v1.3.0/go.mod h1:xMicKDx7XRXYdVwY9f9wQpDJVnqWxw9wCauCMKp+IBI=
|
||||
github.com/gostaticanalysis/comment v1.4.1 h1:xHopR5L2lRz6OsjH4R2HG5wRhW9ySl3FsHIvi5pcXwc=
|
||||
github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado=
|
||||
github.com/gostaticanalysis/nilerr v0.1.1 h1:ThE+hJP0fEp4zWLkWHWcRyI2Od0p7DlgYG3Uqrmrcpk=
|
||||
github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A=
|
||||
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
|
||||
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
|
||||
github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
||||
@ -591,6 +593,7 @@ golang.org/x/tools v0.0.0-20200831203904-5a2aa26beb65/go.mod h1:Cj7w3i3Rnn0Xh82u
|
||||
golang.org/x/tools v0.0.0-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU=
|
||||
golang.org/x/tools v0.0.0-20201002184944-ecd9fd270d5d/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU=
|
||||
golang.org/x/tools v0.0.0-20201011145850-ed2f50202694/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU=
|
||||
golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||
golang.org/x/tools v0.0.0-20201028025901-8cd080b735b3/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||
golang.org/x/tools v0.0.0-20201114224030-61ea331ec02b/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||
golang.org/x/tools v0.0.0-20201118003311-bd56c0adb394/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||
|
18
pkg/golinters/nilerr.go
Normal file
18
pkg/golinters/nilerr.go
Normal file
@ -0,0 +1,18 @@
|
||||
package golinters
|
||||
|
||||
import (
|
||||
"github.com/gostaticanalysis/nilerr"
|
||||
"golang.org/x/tools/go/analysis"
|
||||
|
||||
"github.com/golangci/golangci-lint/pkg/golinters/goanalysis"
|
||||
)
|
||||
|
||||
func NewNilErr() *goanalysis.Linter {
|
||||
a := nilerr.Analyzer
|
||||
return goanalysis.NewLinter(
|
||||
a.Name,
|
||||
"Finds the code that returns nil even if it checks that the error is not nil.",
|
||||
[]*analysis.Analyzer{a},
|
||||
nil,
|
||||
).WithLoadMode(goanalysis.LoadModeTypesInfo)
|
||||
}
|
@ -386,6 +386,10 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config {
|
||||
WithPresets(linter.PresetStyle).
|
||||
WithLoadForGoAnalysis().
|
||||
WithURL("https://github.com/julz/importas"),
|
||||
linter.NewConfig(golinters.NewNilErr()).
|
||||
WithLoadForGoAnalysis().
|
||||
WithPresets(linter.PresetBugs).
|
||||
WithURL("https://github.com/gostaticanalysis/nilerr"),
|
||||
|
||||
// nolintlint must be last because it looks at the results of all the previous linters for unused nolint directives
|
||||
linter.NewConfig(golinters.NewNoLintLint()).
|
||||
|
35
test/testdata/nilerr.go
vendored
Normal file
35
test/testdata/nilerr.go
vendored
Normal file
@ -0,0 +1,35 @@
|
||||
//args: -Enilerr
|
||||
package testdata
|
||||
|
||||
import "os"
|
||||
|
||||
func nilErr1() error {
|
||||
err := nilErrDo()
|
||||
if err == nil {
|
||||
return err // ERROR `error is nil \(line 7\) but it returns error`
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func nilErr2() error {
|
||||
err := nilErrDo()
|
||||
if err == nil {
|
||||
return err // ERROR `error is nil \(line 16\) but it returns error`
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func nilErr3() error {
|
||||
err := nilErrDo()
|
||||
if err != nil {
|
||||
return nil // ERROR `error is not nil \(line 25\) but it returns nil`
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func nilErrDo() error {
|
||||
return os.ErrNotExist
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user