From 4c88f084efbe6573fdc2b9799799bf7d1d40d906 Mon Sep 17 00:00:00 2001 From: Sergey Vilgelm Date: Tue, 4 Aug 2020 00:08:10 -0500 Subject: [PATCH 1/8] Use errcheck from main repo instead of golangci-lint --- .github/workflows/pr.yml | 1 + go.mod | 5 ++- go.sum | 9 ++-- pkg/commands/executor.go | 4 +- pkg/golinters/errcheck.go | 52 ++++++++++++++--------- scripts/expand_website_templates/main.go | 4 +- test/run_test.go | 4 +- test/testdata/errcheck.go | 2 +- test/testdata/errcheck_exclude.go | 2 +- test/testdata/errcheck_ignore.go | 4 +- test/testdata/errcheck_ignore_default.go | 9 +++- test/testdata/errcheck_type_assertions.go | 7 +++ 12 files changed, 69 insertions(+), 34 deletions(-) create mode 100644 test/testdata/errcheck_type_assertions.go diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index be1fc0d8cc09..70aa7084315f 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -33,6 +33,7 @@ jobs: uses: golangci/golangci-lint-action@v2.3.0 with: version: latest + args: --verbose tests-on-windows: needs: golangci-lint # run after golangci-lint action to not produce duplicated errors runs-on: windows-latest diff --git a/go.mod b/go.mod index ce17ac3d3e5e..ab87da91a60b 100644 --- a/go.mod +++ b/go.mod @@ -17,7 +17,6 @@ require ( github.com/gofrs/flock v0.8.0 github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a - github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6 github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613 github.com/golangci/gocyclo v0.0.0-20180528144436-0a533e8fa43d github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a @@ -34,6 +33,8 @@ require ( github.com/kulti/thelper v0.1.0 github.com/kunwardeep/paralleltest v1.0.2 github.com/kyoh86/exportloopref v0.1.8 + github.com/kisielk/errcheck v1.4.1-0.20200802052755-ea6ea2fa7078 + github.com/kyoh86/exportloopref v0.1.7 github.com/maratori/testpackage v1.0.1 github.com/matoous/godox v0.0.0-20190911065817-5d6d842e92eb // v1.0 github.com/mattn/go-colorable v0.1.8 @@ -77,3 +78,5 @@ require ( mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b // indirect mvdan.cc/unparam v0.0.0-20200501210554-b37ab49443f7 ) + +replace github.com/kisielk/errcheck => /Users/sergey.vilgelm@ibm.com/icloud/projects/errcheck diff --git a/go.sum b/go.sum index 9cfe7838688c..edcc9287b094 100644 --- a/go.sum +++ b/go.sum @@ -123,8 +123,6 @@ github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 h1:23T5iq8rbUYlhpt5 github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a h1:w8hkcTqaFpzKqonE9uMCefW1WDie15eSP/4MssdenaM= github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= -github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6 h1:YYWNAGTKWhKpcLLt7aSj/odlKrSrelQwlovBpDuf19w= -github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6/go.mod h1:DbHgvLiFKX1Sh2T1w8Q/h4NAI8MHIpzCdnBUDTXU3I0= github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613 h1:9kfjN3AdxcbsZBf8NjltjWihK2QfBBBZuv91cMFfDHw= github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613/go.mod h1:SyvUF2NxV+sN8upjjeVYr5W7tyxaT1JVtvhKhOn2ii8= github.com/golangci/gocyclo v0.0.0-20180528144436-0a533e8fa43d h1:pXTK/gkVNs7Zyy7WKgLXmpQ5bHTrq5GDsp8R9Qs67g0= @@ -219,7 +217,6 @@ github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1 github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.10.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= @@ -239,6 +236,9 @@ github.com/kunwardeep/paralleltest v1.0.2/go.mod h1:ZPqNm1fVHPllh5LPVujzbVz1JN2G github.com/kyoh86/exportloopref v0.1.8 h1:5Ry/at+eFdkX9Vsdw3qU4YkvGtzuVfzT4X7S77LoN/M= github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= github.com/lib/pq v1.0.0 h1:X5PMW56eZitiTeO7tKzZxFCSpbFZJtkMMooicw2us9A= +github.com/kyoh86/exportloopref v0.1.7 h1:u+iHuTbkbTS2D/JP7fCuZDo/t3rBVGo3Hf58Rc+lQVY= +github.com/kyoh86/exportloopref v0.1.7/go.mod h1:h1rDl2Kdj97+Kwh4gdz3ujE7XHmH51Q0lUiZ1z4NLj8= +github.com/lib/pq v1.0.0 h1:X5PMW56eZitiTeO7tKzZxFCSpbFZJtkMMooicw2us9A= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= @@ -528,7 +528,6 @@ golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190110163146-51295c7ec13a/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -565,6 +564,8 @@ golang.org/x/tools v0.0.0-20200426102838-f3a5411a4c3b/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20200622203043-20e05c1c8ffa/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200624225443-88f3c62a19ff/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200624225443-88f3c62a19ff/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200519015757-0d0afa43d58a/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= diff --git a/pkg/commands/executor.go b/pkg/commands/executor.go index 0becc9900db6..7f4702ed6adc 100644 --- a/pkg/commands/executor.go +++ b/pkg/commands/executor.go @@ -205,7 +205,9 @@ func computeConfigSalt(cfg *config.Config) ([]byte, error) { configData.WriteString("\nbuild-tags=%s" + strings.Join(cfg.Run.BuildTags, ",")) h := sha256.New() - h.Write(configData.Bytes()) //nolint:errcheck + if _, err := h.Write(configData.Bytes()); err != nil { + return nil, err + } return h.Sum(nil), nil } diff --git a/pkg/golinters/errcheck.go b/pkg/golinters/errcheck.go index 7df11fc8739e..50a10f53398c 100644 --- a/pkg/golinters/errcheck.go +++ b/pkg/golinters/errcheck.go @@ -10,9 +10,10 @@ import ( "strings" "sync" - errcheck "github.com/golangci/errcheck/golangci" + "github.com/kisielk/errcheck/errcheck" "github.com/pkg/errors" "golang.org/x/tools/go/analysis" + "golang.org/x/tools/go/packages" "github.com/golangci/golangci-lint/pkg/config" "github.com/golangci/golangci-lint/pkg/fsutils" @@ -36,17 +37,23 @@ func NewErrcheck() *goanalysis.Linter { []*analysis.Analyzer{analyzer}, nil, ).WithContextSetter(func(lintCtx *linter.Context) { + // copied from errcheck + checker, err := getChecker(&lintCtx.Settings().Errcheck) + if err != nil { + panic(err.Error()) + } + checker.Verbose = lintCtx.Cfg.Run.IsVerbose + checker.Tags = lintCtx.Cfg.Run.BuildTags + analyzer.Run = func(pass *analysis.Pass) (interface{}, error) { - prog := goanalysis.MakeFakeLoaderProgram(pass) - errCfg, err := genConfig(&lintCtx.Settings().Errcheck) - if err != nil { - return nil, err - } - errcheckIssues, err := errcheck.RunWithConfig(prog, errCfg) - if err != nil { - return nil, err + pkg := &packages.Package{ + Fset: pass.Fset, + Syntax: pass.Files, + Types: pass.Pkg, + TypesInfo: pass.TypesInfo, } + errcheckIssues := checker.CheckPackage(pkg) if len(errcheckIssues) == 0 { return nil, nil } @@ -104,27 +111,32 @@ func parseIgnoreConfig(s string) (map[string]*regexp.Regexp, error) { return cfg, nil } -func genConfig(errCfg *config.ErrcheckSettings) (*errcheck.Config, error) { +func getChecker(errCfg *config.ErrcheckSettings) (*errcheck.Checker, error) { + checker := errcheck.NewChecker() + checker.Blank = errCfg.CheckAssignToBlank + checker.Asserts = errCfg.CheckTypeAssertions + ignoreConfig, err := parseIgnoreConfig(errCfg.Ignore) if err != nil { return nil, errors.Wrap(err, "failed to parse 'ignore' directive") } - c := &errcheck.Config{ - Ignore: ignoreConfig, - Blank: errCfg.CheckAssignToBlank, - Asserts: errCfg.CheckTypeAssertions, + checker.Ignore = map[string]*regexp.Regexp{} + for pkg, re := range ignoreConfig { + checker.Ignore[pkg] = re } + checker.UpdateNonVendoredIgnore() + checker.AddExcludes(errcheck.DefaultExcludes) if errCfg.Exclude != "" { exclude, err := readExcludeFile(errCfg.Exclude) if err != nil { return nil, err } - c.Exclude = exclude + checker.AddExcludes(exclude) } - return c, nil + return checker, nil } func getFirstPathArg() string { @@ -192,7 +204,7 @@ func setupConfigFileSearch(name string) []string { return configSearchPaths } -func readExcludeFile(name string) (map[string]bool, error) { +func readExcludeFile(name string) ([]string, error) { var err error var fh *os.File @@ -206,12 +218,12 @@ func readExcludeFile(name string) (map[string]bool, error) { return nil, errors.Wrapf(err, "failed reading exclude file: %s", name) } scanner := bufio.NewScanner(fh) - exclude := make(map[string]bool) + excludes := []string{} for scanner.Scan() { - exclude[scanner.Text()] = true + excludes = append(excludes, scanner.Text()) } if err := scanner.Err(); err != nil { return nil, errors.Wrapf(err, "failed scanning file: %s", name) } - return exclude, nil + return excludes, nil } diff --git a/scripts/expand_website_templates/main.go b/scripts/expand_website_templates/main.go index 7705f96f2c90..edc1dec3c2dd 100644 --- a/scripts/expand_website_templates/main.go +++ b/scripts/expand_website_templates/main.go @@ -55,7 +55,9 @@ func updateStateFile(replacements map[string]string) error { } h := sha256.New() - h.Write(replBytes) //nolint:errcheck + if _, err := h.Write(replBytes); err != nil { + return err + } var contentBuf bytes.Buffer contentBuf.WriteString("This file stores hash of website templates to trigger " + diff --git a/test/run_test.go b/test/run_test.go index c9bd7a801b0e..7c889cfcde8b 100644 --- a/test/run_test.go +++ b/test/run_test.go @@ -135,7 +135,7 @@ func TestSortedResults(t *testing.T) { "--sort-results=false", strings.Join([]string{ "testdata/sort_results/main.go:12:5: `db` is unused (deadcode)", - "testdata/sort_results/main.go:15:13: Error return value of `returnError` is not checked (errcheck)", + "testdata/sort_results/main.go:15:13: Error return value is not checked (errcheck)", "testdata/sort_results/main.go:8:6: func `returnError` is unused (unused)", }, "\n"), }, @@ -144,7 +144,7 @@ func TestSortedResults(t *testing.T) { strings.Join([]string{ "testdata/sort_results/main.go:8:6: func `returnError` is unused (unused)", "testdata/sort_results/main.go:12:5: `db` is unused (deadcode)", - "testdata/sort_results/main.go:15:13: Error return value of `returnError` is not checked (errcheck)", + "testdata/sort_results/main.go:15:13: Error return value is not checked (errcheck)", }, "\n"), }, } diff --git a/test/testdata/errcheck.go b/test/testdata/errcheck.go index 0d6c118bd36a..dc4343507a09 100644 --- a/test/testdata/errcheck.go +++ b/test/testdata/errcheck.go @@ -12,7 +12,7 @@ func RetErr() error { } func MissedErrorCheck() { - RetErr() // ERROR "Error return value of `RetErr` is not checked" + RetErr() // ERROR "Error return value is not checked" } func IgnoreCloseMissingErrHandling() error { diff --git a/test/testdata/errcheck_exclude.go b/test/testdata/errcheck_exclude.go index 461fd48b1566..e29513113edb 100644 --- a/test/testdata/errcheck_exclude.go +++ b/test/testdata/errcheck_exclude.go @@ -13,6 +13,6 @@ func TestErrcheckExclude() []byte { } func TestErrcheckNoExclude() []byte { - ret, _ := ioutil.ReadAll(nil) // ERROR "Error return value of `ioutil.ReadAll` is not checked" + ret, _ := ioutil.ReadAll(nil) // ERROR "Error return value is not checked" return ret } diff --git a/test/testdata/errcheck_ignore.go b/test/testdata/errcheck_ignore.go index 197f46ed7e06..e60b7739b8c0 100644 --- a/test/testdata/errcheck_ignore.go +++ b/test/testdata/errcheck_ignore.go @@ -13,7 +13,7 @@ func TestErrcheckIgnoreOs() { } func TestErrcheckNoIgnoreFmt(s string) int { - n, _ := fmt.Println(s) // ERROR "Error return value of `fmt.Println` is not checked" + n, _ := fmt.Println(s) // ERROR "Error return value is not checked" return n } @@ -23,6 +23,6 @@ func TestErrcheckIgnoreIoutil() []byte { } func TestErrcheckNoIgnoreIoutil() []byte { - ret, _ := ioutil.ReadAll(nil) // ERROR "Error return value of `ioutil.ReadAll` is not checked" + ret, _ := ioutil.ReadAll(nil) // ERROR "Error return value is not checked" return ret } diff --git a/test/testdata/errcheck_ignore_default.go b/test/testdata/errcheck_ignore_default.go index da59c6d0f9e2..1741599bbcb2 100644 --- a/test/testdata/errcheck_ignore_default.go +++ b/test/testdata/errcheck_ignore_default.go @@ -3,15 +3,22 @@ package testdata import ( + "crypto/sha256" "fmt" "os" ) +func TestErrcheckIgnoreHashWriteByDefault() []byte { + h := sha256.New() + h.Write([]byte("food")) + return h.Sum(nil) +} + func TestErrcheckIgnoreFmtByDefault(s string) int { n, _ := fmt.Println(s) return n } func TestErrcheckNoIgnoreOs() { - _, _ = os.Open("f.txt") // ERROR "Error return value of `os.Open` is not checked" + _, _ = os.Open("f.txt") // ERROR "Error return value is not checked" } diff --git a/test/testdata/errcheck_type_assertions.go b/test/testdata/errcheck_type_assertions.go new file mode 100644 index 000000000000..a85d69ddfbfd --- /dev/null +++ b/test/testdata/errcheck_type_assertions.go @@ -0,0 +1,7 @@ +//args: -Eerrcheck +//config: linters-settings.errcheck.check-type-assertions=true +package testdata + +func ErrorTypeAssertion(filter map[string]interface{}) bool { + return filter["messages_sent.messageid"].(map[string]interface{})["$ne"] != nil +} From 8f883860f018ad8ed81b09e51e60e8cba7eed66a Mon Sep 17 00:00:00 2001 From: Roman Leventov Date: Sun, 27 Dec 2020 18:26:21 +0100 Subject: [PATCH 2/8] Update errcheck after https://github.com/kisielk/errcheck/pull/185 is merged --- go.mod | 3 +-- go.sum | 12 ++++++++++++ pkg/golinters/errcheck.go | 24 +++++++++++------------- test/testdata/errcheck_exclude.go | 2 +- test/testdata/errcheck_ignore.go | 6 +++--- test/testdata/errcheck_ignore_default.go | 2 +- 6 files changed, 29 insertions(+), 20 deletions(-) diff --git a/go.mod b/go.mod index ab87da91a60b..2e8533645a17 100644 --- a/go.mod +++ b/go.mod @@ -34,6 +34,7 @@ require ( github.com/kunwardeep/paralleltest v1.0.2 github.com/kyoh86/exportloopref v0.1.8 github.com/kisielk/errcheck v1.4.1-0.20200802052755-ea6ea2fa7078 + github.com/kisielk/errcheck v1.5.0-alpha.0.20201210184435-7e1276f76cf6 github.com/kyoh86/exportloopref v0.1.7 github.com/maratori/testpackage v1.0.1 github.com/matoous/godox v0.0.0-20190911065817-5d6d842e92eb // v1.0 @@ -78,5 +79,3 @@ require ( mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b // indirect mvdan.cc/unparam v0.0.0-20200501210554-b37ab49443f7 ) - -replace github.com/kisielk/errcheck => /Users/sergey.vilgelm@ibm.com/icloud/projects/errcheck diff --git a/go.sum b/go.sum index edcc9287b094..3871965390ac 100644 --- a/go.sum +++ b/go.sum @@ -217,6 +217,9 @@ github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1 github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.5.0-alpha.0.20201210184435-7e1276f76cf6 h1:xTtI6aTIJw4hFL7n86of8l0vJ5O36Tj4G8izQHYPu1k= +github.com/kisielk/errcheck v1.5.0-alpha.0.20201210184435-7e1276f76cf6/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.10.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= @@ -480,6 +483,8 @@ golang.org/x/net v0.0.0-20200822124328-c89045814202 h1:VvcQYSHwXgi7W+TpUR6A9g6Up golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= @@ -517,17 +522,22 @@ golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634 h1:bNEHhJCnrwMKNMmOx3yAynp5vs5/gRy+XWFtZFu7NBM= golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190110163146-51295c7ec13a/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -570,6 +580,8 @@ golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200812195022-5ae4c3c160a0/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20201226215659-b1c90890d22a h1:pdfjQ7VswBeGam3EpuEJ4e8EAb7JgaubV570LO/SIQM= +golang.org/x/tools v0.0.0-20201226215659-b1c90890d22a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200831203904-5a2aa26beb65/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= golang.org/x/tools v0.0.0-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= diff --git a/pkg/golinters/errcheck.go b/pkg/golinters/errcheck.go index 50a10f53398c..daae3ebf441f 100644 --- a/pkg/golinters/errcheck.go +++ b/pkg/golinters/errcheck.go @@ -42,7 +42,6 @@ func NewErrcheck() *goanalysis.Linter { if err != nil { panic(err.Error()) } - checker.Verbose = lintCtx.Cfg.Run.IsVerbose checker.Tags = lintCtx.Cfg.Run.BuildTags analyzer.Run = func(pass *analysis.Pass) (interface{}, error) { @@ -54,12 +53,12 @@ func NewErrcheck() *goanalysis.Linter { } errcheckIssues := checker.CheckPackage(pkg) - if len(errcheckIssues) == 0 { + if len(errcheckIssues.UncheckedErrors) == 0 { return nil, nil } - issues := make([]goanalysis.Issue, 0, len(errcheckIssues)) - for _, i := range errcheckIssues { + issues := make([]goanalysis.Issue, 0, len(errcheckIssues.UncheckedErrors)) + for _, i := range errcheckIssues.UncheckedErrors { var text string if i.FuncName != "" { text = fmt.Sprintf("Error return value of %s is not checked", formatCode(i.FuncName, lintCtx.Cfg)) @@ -112,31 +111,30 @@ func parseIgnoreConfig(s string) (map[string]*regexp.Regexp, error) { } func getChecker(errCfg *config.ErrcheckSettings) (*errcheck.Checker, error) { - checker := errcheck.NewChecker() - checker.Blank = errCfg.CheckAssignToBlank - checker.Asserts = errCfg.CheckTypeAssertions + var checker errcheck.Checker + checker.Exclusions.BlankAssignments = !errCfg.CheckAssignToBlank + checker.Exclusions.TypeAssertions = !errCfg.CheckTypeAssertions ignoreConfig, err := parseIgnoreConfig(errCfg.Ignore) if err != nil { return nil, errors.Wrap(err, "failed to parse 'ignore' directive") } - checker.Ignore = map[string]*regexp.Regexp{} + checker.Exclusions.SymbolRegexpsByPackage = map[string]*regexp.Regexp{} for pkg, re := range ignoreConfig { - checker.Ignore[pkg] = re + checker.Exclusions.SymbolRegexpsByPackage[pkg] = re } - checker.UpdateNonVendoredIgnore() - checker.AddExcludes(errcheck.DefaultExcludes) + checker.Exclusions.Symbols = append([]string{}, errcheck.DefaultExcludedSymbols...) if errCfg.Exclude != "" { exclude, err := readExcludeFile(errCfg.Exclude) if err != nil { return nil, err } - checker.AddExcludes(exclude) + checker.Exclusions.Symbols = append(checker.Exclusions.Symbols, exclude...) } - return checker, nil + return &checker, nil } func getFirstPathArg() string { diff --git a/test/testdata/errcheck_exclude.go b/test/testdata/errcheck_exclude.go index e29513113edb..e8e323cbe649 100644 --- a/test/testdata/errcheck_exclude.go +++ b/test/testdata/errcheck_exclude.go @@ -13,6 +13,6 @@ func TestErrcheckExclude() []byte { } func TestErrcheckNoExclude() []byte { - ret, _ := ioutil.ReadAll(nil) // ERROR "Error return value is not checked" + ret, _ := ioutil.ReadAll(nil) // ERROR "Error return value of `io/ioutil.ReadAll` is not checked" return ret } diff --git a/test/testdata/errcheck_ignore.go b/test/testdata/errcheck_ignore.go index e60b7739b8c0..097d0cd58bdc 100644 --- a/test/testdata/errcheck_ignore.go +++ b/test/testdata/errcheck_ignore.go @@ -12,8 +12,8 @@ func TestErrcheckIgnoreOs() { _, _ = os.Open("f.txt") } -func TestErrcheckNoIgnoreFmt(s string) int { - n, _ := fmt.Println(s) // ERROR "Error return value is not checked" +func TestErrcheckIgnoreFmt(s string) int { + n, _ := fmt.Println(s) return n } @@ -23,6 +23,6 @@ func TestErrcheckIgnoreIoutil() []byte { } func TestErrcheckNoIgnoreIoutil() []byte { - ret, _ := ioutil.ReadAll(nil) // ERROR "Error return value is not checked" + ret, _ := ioutil.ReadAll(nil) // ERROR "Error return value of `io/ioutil.ReadAll` is not checked" return ret } diff --git a/test/testdata/errcheck_ignore_default.go b/test/testdata/errcheck_ignore_default.go index 1741599bbcb2..18b090c20eb8 100644 --- a/test/testdata/errcheck_ignore_default.go +++ b/test/testdata/errcheck_ignore_default.go @@ -20,5 +20,5 @@ func TestErrcheckIgnoreFmtByDefault(s string) int { } func TestErrcheckNoIgnoreOs() { - _, _ = os.Open("f.txt") // ERROR "Error return value is not checked" + _, _ = os.Open("f.txt") // ERROR "Error return value of `os.Open` is not checked" } From 2944f68b894b190b8bb9aa459181c0f4435cb5f7 Mon Sep 17 00:00:00 2001 From: Fernandez Ludovic Date: Sun, 27 Dec 2020 19:04:36 +0100 Subject: [PATCH 3/8] fix: dependencies. --- go.mod | 4 +--- go.sum | 9 ++------- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/go.mod b/go.mod index 2e8533645a17..d626d7d09fb3 100644 --- a/go.mod +++ b/go.mod @@ -30,12 +30,10 @@ require ( github.com/jgautheron/goconst v0.0.0-20201117150253-ccae5bf973f3 github.com/jingyugao/rowserrcheck v0.0.0-20191204022205-72ab7603b68a github.com/jirfag/go-printf-func-name v0.0.0-20191110105641-45db9963cdd3 + github.com/kisielk/errcheck v1.5.0-alpha.0.20201210184435-7e1276f76cf6 github.com/kulti/thelper v0.1.0 github.com/kunwardeep/paralleltest v1.0.2 github.com/kyoh86/exportloopref v0.1.8 - github.com/kisielk/errcheck v1.4.1-0.20200802052755-ea6ea2fa7078 - github.com/kisielk/errcheck v1.5.0-alpha.0.20201210184435-7e1276f76cf6 - github.com/kyoh86/exportloopref v0.1.7 github.com/maratori/testpackage v1.0.1 github.com/matoous/godox v0.0.0-20190911065817-5d6d842e92eb // v1.0 github.com/mattn/go-colorable v0.1.8 diff --git a/go.sum b/go.sum index 3871965390ac..842fc7b6a95f 100644 --- a/go.sum +++ b/go.sum @@ -239,8 +239,6 @@ github.com/kunwardeep/paralleltest v1.0.2/go.mod h1:ZPqNm1fVHPllh5LPVujzbVz1JN2G github.com/kyoh86/exportloopref v0.1.8 h1:5Ry/at+eFdkX9Vsdw3qU4YkvGtzuVfzT4X7S77LoN/M= github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= github.com/lib/pq v1.0.0 h1:X5PMW56eZitiTeO7tKzZxFCSpbFZJtkMMooicw2us9A= -github.com/kyoh86/exportloopref v0.1.7 h1:u+iHuTbkbTS2D/JP7fCuZDo/t3rBVGo3Hf58Rc+lQVY= -github.com/kyoh86/exportloopref v0.1.7/go.mod h1:h1rDl2Kdj97+Kwh4gdz3ujE7XHmH51Q0lUiZ1z4NLj8= github.com/lib/pq v1.0.0 h1:X5PMW56eZitiTeO7tKzZxFCSpbFZJtkMMooicw2us9A= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= @@ -482,9 +480,9 @@ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200822124328-c89045814202 h1:VvcQYSHwXgi7W+TpUR6A9g6Up98WAHf3f/ulnJ62IyA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= @@ -571,17 +569,14 @@ golang.org/x/tools v0.0.0-20200410194907-79a7a3126eef/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20200414032229-332987a829c3/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200422022333-3d57cf2e726e/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200426102838-f3a5411a4c3b/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200622203043-20e05c1c8ffa/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200624225443-88f3c62a19ff/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200624225443-88f3c62a19ff/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200519015757-0d0afa43d58a/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200812195022-5ae4c3c160a0/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20201226215659-b1c90890d22a h1:pdfjQ7VswBeGam3EpuEJ4e8EAb7JgaubV570LO/SIQM= -golang.org/x/tools v0.0.0-20201226215659-b1c90890d22a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200831203904-5a2aa26beb65/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= golang.org/x/tools v0.0.0-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= From 912c0f14a07e8309c3b2e6b18a46aa279bbb5ef2 Mon Sep 17 00:00:00 2001 From: Fernandez Ludovic Date: Sun, 27 Dec 2020 19:06:34 +0100 Subject: [PATCH 4/8] revert: temp change. --- .github/workflows/pr.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 70aa7084315f..be1fc0d8cc09 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -33,7 +33,6 @@ jobs: uses: golangci/golangci-lint-action@v2.3.0 with: version: latest - args: --verbose tests-on-windows: needs: golangci-lint # run after golangci-lint action to not produce duplicated errors runs-on: windows-latest From 6db056f84a40a0013d06ad45d2f4e9e58a34184c Mon Sep 17 00:00:00 2001 From: Fernandez Ludovic Date: Sun, 27 Dec 2020 19:44:39 +0100 Subject: [PATCH 5/8] review: minor chnages. --- pkg/golinters/errcheck.go | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/pkg/golinters/errcheck.go b/pkg/golinters/errcheck.go index daae3ebf441f..0c16f3c2f633 100644 --- a/pkg/golinters/errcheck.go +++ b/pkg/golinters/errcheck.go @@ -24,12 +24,15 @@ import ( func NewErrcheck() *goanalysis.Linter { const linterName = "errcheck" + var mu sync.Mutex var res []goanalysis.Issue + analyzer := &analysis.Analyzer{ Name: linterName, Doc: goanalysis.TheOnlyanalyzerDoc, } + return goanalysis.NewLinter( linterName, "Errcheck is a program for checking for unchecked errors "+ @@ -65,15 +68,18 @@ func NewErrcheck() *goanalysis.Linter { } else { text = "Error return value is not checked" } + issues = append(issues, goanalysis.NewIssue(&result.Issue{ FromLinter: linterName, Text: text, Pos: i.Pos, }, pass)) } + mu.Lock() res = append(res, issues...) mu.Unlock() + return nil, nil } }).WithIssuesReporter(func(*linter.Context) []goanalysis.Issue { @@ -111,26 +117,30 @@ func parseIgnoreConfig(s string) (map[string]*regexp.Regexp, error) { } func getChecker(errCfg *config.ErrcheckSettings) (*errcheck.Checker, error) { - var checker errcheck.Checker - checker.Exclusions.BlankAssignments = !errCfg.CheckAssignToBlank - checker.Exclusions.TypeAssertions = !errCfg.CheckTypeAssertions - ignoreConfig, err := parseIgnoreConfig(errCfg.Ignore) if err != nil { return nil, errors.Wrap(err, "failed to parse 'ignore' directive") } - checker.Exclusions.SymbolRegexpsByPackage = map[string]*regexp.Regexp{} + checker := errcheck.Checker{ + Exclusions: errcheck.Exclusions{ + BlankAssignments: !errCfg.CheckAssignToBlank, + TypeAssertions: !errCfg.CheckTypeAssertions, + SymbolRegexpsByPackage: map[string]*regexp.Regexp{}, + Symbols: append([]string{}, errcheck.DefaultExcludedSymbols...), + }, + } + for pkg, re := range ignoreConfig { checker.Exclusions.SymbolRegexpsByPackage[pkg] = re } - checker.Exclusions.Symbols = append([]string{}, errcheck.DefaultExcludedSymbols...) if errCfg.Exclude != "" { exclude, err := readExcludeFile(errCfg.Exclude) if err != nil { return nil, err } + checker.Exclusions.Symbols = append(checker.Exclusions.Symbols, exclude...) } @@ -215,13 +225,17 @@ func readExcludeFile(name string) ([]string, error) { if fh == nil { return nil, errors.Wrapf(err, "failed reading exclude file: %s", name) } + scanner := bufio.NewScanner(fh) - excludes := []string{} + + var excludes []string for scanner.Scan() { excludes = append(excludes, scanner.Text()) } + if err := scanner.Err(); err != nil { return nil, errors.Wrapf(err, "failed scanning file: %s", name) } + return excludes, nil } From 6c7a65d31c58e35670933b7effebd38770e0e5f5 Mon Sep 17 00:00:00 2001 From: Sergey Vilgelm Date: Wed, 24 Feb 2021 17:36:27 -0600 Subject: [PATCH 6/8] use v1.5.0 --- go.mod | 2 +- go.sum | 13 ++----------- pkg/golinters/errcheck.go | 26 ++++++++++++++++---------- test/testdata/errcheck_exclude.go | 2 +- test/testdata/errcheck_ignore.go | 2 +- 5 files changed, 21 insertions(+), 24 deletions(-) diff --git a/go.mod b/go.mod index 5d257bcf9f06..fee8104bf044 100644 --- a/go.mod +++ b/go.mod @@ -34,7 +34,7 @@ require ( github.com/jgautheron/goconst v0.0.0-20201117150253-ccae5bf973f3 github.com/jingyugao/rowserrcheck v0.0.0-20210130005344-c6a0c12dd98d github.com/jirfag/go-printf-func-name v0.0.0-20191110105641-45db9963cdd3 - github.com/kisielk/errcheck v1.5.0-alpha.0.20201210184435-7e1276f76cf6 + github.com/kisielk/errcheck v1.5.1-0.20210225024930-4174a4ae53d4 github.com/kulti/thelper v0.4.0 github.com/kunwardeep/paralleltest v1.0.2 github.com/kyoh86/exportloopref v0.1.8 diff --git a/go.sum b/go.sum index 1b114f31877b..004a2bfe923d 100644 --- a/go.sum +++ b/go.sum @@ -220,8 +220,8 @@ github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7 github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/errcheck v1.5.0-alpha.0.20201210184435-7e1276f76cf6 h1:xTtI6aTIJw4hFL7n86of8l0vJ5O36Tj4G8izQHYPu1k= -github.com/kisielk/errcheck v1.5.0-alpha.0.20201210184435-7e1276f76cf6/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/errcheck v1.5.1-0.20210225024930-4174a4ae53d4 h1:nqwB0YWxIrYB4bbp2SfqfbyIDeIsKQ8QYh1oKyBsNtc= +github.com/kisielk/errcheck v1.5.1-0.20210225024930-4174a4ae53d4/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.10.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= @@ -240,8 +240,6 @@ github.com/kunwardeep/paralleltest v1.0.2 h1:/jJRv0TiqPoEy/Y8dQxCFJhD56uS/pnvtat github.com/kunwardeep/paralleltest v1.0.2/go.mod h1:ZPqNm1fVHPllh5LPVujzbVz1JN2GhLxSfY+oqUsvG30= github.com/kyoh86/exportloopref v0.1.8 h1:5Ry/at+eFdkX9Vsdw3qU4YkvGtzuVfzT4X7S77LoN/M= github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= -github.com/lib/pq v1.0.0 h1:X5PMW56eZitiTeO7tKzZxFCSpbFZJtkMMooicw2us9A= -github.com/lib/pq v1.0.0 h1:X5PMW56eZitiTeO7tKzZxFCSpbFZJtkMMooicw2us9A= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= @@ -496,9 +494,6 @@ golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI= -golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb h1:eBmm0M9fYhWpKZLjQUUKka/LtIxf46G4fxeEz5KJr9U= golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= @@ -538,8 +533,6 @@ golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201024232916-9f70ab9862d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4 h1:myAQVi0cGEoqQVR5POX+8RR2mrocKqNN1hmeMqhX27k= @@ -547,8 +540,6 @@ golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= diff --git a/pkg/golinters/errcheck.go b/pkg/golinters/errcheck.go index 0c16f3c2f633..d44e14ac5ad5 100644 --- a/pkg/golinters/errcheck.go +++ b/pkg/golinters/errcheck.go @@ -55,25 +55,31 @@ func NewErrcheck() *goanalysis.Linter { TypesInfo: pass.TypesInfo, } - errcheckIssues := checker.CheckPackage(pkg) + errcheckIssues := checker.CheckPackage(pkg).Unique() if len(errcheckIssues.UncheckedErrors) == 0 { return nil, nil } - issues := make([]goanalysis.Issue, 0, len(errcheckIssues.UncheckedErrors)) - for _, i := range errcheckIssues.UncheckedErrors { + issues := make([]goanalysis.Issue, len(errcheckIssues.UncheckedErrors)) + for i, err := range errcheckIssues.UncheckedErrors { var text string - if i.FuncName != "" { - text = fmt.Sprintf("Error return value of %s is not checked", formatCode(i.FuncName, lintCtx.Cfg)) + if err.FuncName != "" { + text = fmt.Sprintf( + "Error return value of %s is not checked", + formatCode(err.SelectorName, lintCtx.Cfg), + ) } else { text = "Error return value is not checked" } - issues = append(issues, goanalysis.NewIssue(&result.Issue{ - FromLinter: linterName, - Text: text, - Pos: i.Pos, - }, pass)) + issues[i] = goanalysis.NewIssue( + &result.Issue{ + FromLinter: linterName, + Text: text, + Pos: err.Pos, + }, + pass, + ) } mu.Lock() diff --git a/test/testdata/errcheck_exclude.go b/test/testdata/errcheck_exclude.go index e8e323cbe649..461fd48b1566 100644 --- a/test/testdata/errcheck_exclude.go +++ b/test/testdata/errcheck_exclude.go @@ -13,6 +13,6 @@ func TestErrcheckExclude() []byte { } func TestErrcheckNoExclude() []byte { - ret, _ := ioutil.ReadAll(nil) // ERROR "Error return value of `io/ioutil.ReadAll` is not checked" + ret, _ := ioutil.ReadAll(nil) // ERROR "Error return value of `ioutil.ReadAll` is not checked" return ret } diff --git a/test/testdata/errcheck_ignore.go b/test/testdata/errcheck_ignore.go index 097d0cd58bdc..8528d78bae32 100644 --- a/test/testdata/errcheck_ignore.go +++ b/test/testdata/errcheck_ignore.go @@ -23,6 +23,6 @@ func TestErrcheckIgnoreIoutil() []byte { } func TestErrcheckNoIgnoreIoutil() []byte { - ret, _ := ioutil.ReadAll(nil) // ERROR "Error return value of `io/ioutil.ReadAll` is not checked" + ret, _ := ioutil.ReadAll(nil) // ERROR "Error return value of `ioutil.ReadAll` is not checked" return ret } From 369a76f228d415b3c989727f9eaf5cb4fba0f262 Mon Sep 17 00:00:00 2001 From: Fernandez Ludovic Date: Thu, 25 Feb 2021 12:36:57 +0100 Subject: [PATCH 7/8] update to v1.6.0 --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index fee8104bf044..d7dfac693082 100644 --- a/go.mod +++ b/go.mod @@ -34,7 +34,7 @@ require ( github.com/jgautheron/goconst v0.0.0-20201117150253-ccae5bf973f3 github.com/jingyugao/rowserrcheck v0.0.0-20210130005344-c6a0c12dd98d github.com/jirfag/go-printf-func-name v0.0.0-20191110105641-45db9963cdd3 - github.com/kisielk/errcheck v1.5.1-0.20210225024930-4174a4ae53d4 + github.com/kisielk/errcheck v1.6.0 github.com/kulti/thelper v0.4.0 github.com/kunwardeep/paralleltest v1.0.2 github.com/kyoh86/exportloopref v0.1.8 diff --git a/go.sum b/go.sum index 004a2bfe923d..4ef6a4476232 100644 --- a/go.sum +++ b/go.sum @@ -220,8 +220,8 @@ github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7 github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/errcheck v1.5.1-0.20210225024930-4174a4ae53d4 h1:nqwB0YWxIrYB4bbp2SfqfbyIDeIsKQ8QYh1oKyBsNtc= -github.com/kisielk/errcheck v1.5.1-0.20210225024930-4174a4ae53d4/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/errcheck v1.6.0 h1:YTDO4pNy7AUN/021p+JGHycQyYNIyMoenM1YDVK6RlY= +github.com/kisielk/errcheck v1.6.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.10.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= From 0122c0b0f23d4ede92b05199dc4b6c5a1f36d20f Mon Sep 17 00:00:00 2001 From: Fernandez Ludovic Date: Thu, 25 Feb 2021 12:44:56 +0100 Subject: [PATCH 8/8] drop panic --- pkg/golinters/errcheck.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkg/golinters/errcheck.go b/pkg/golinters/errcheck.go index d44e14ac5ad5..9aac7326a0ca 100644 --- a/pkg/golinters/errcheck.go +++ b/pkg/golinters/errcheck.go @@ -43,8 +43,10 @@ func NewErrcheck() *goanalysis.Linter { // copied from errcheck checker, err := getChecker(&lintCtx.Settings().Errcheck) if err != nil { - panic(err.Error()) + lintCtx.Log.Errorf("failed to get checker: %v", err) + return } + checker.Tags = lintCtx.Cfg.Run.BuildTags analyzer.Run = func(pass *analysis.Pass) (interface{}, error) {