diff --git a/.golangci.example.yml b/.golangci.example.yml index 237b878333fa..edf833b478bb 100644 --- a/.golangci.example.yml +++ b/.golangci.example.yml @@ -550,6 +550,18 @@ linters-settings: multi-if: false # Enforces newlines (or comments) after every multi-line if statement multi-func: false # Enforces newlines (or comments) after every multi-line function signature + wrapcheck: + # An array of strings that specify substrings of signatures to ignore. + # If this set, it will override the default set of ignored signatures. + # See https://github.com/tomarrell/wrapcheck#configuration for more information. + ignoreSigs: + - .Errorf( + - errors.New( + - errors.Unwrap( + - .Wrap( + - .Wrapf( + - .WithMessage( + wsl: # See https://github.com/bombsimon/wsl/blob/master/doc/configuration.md for # documentation of available settings. These are the defaults for diff --git a/go.mod b/go.mod index 438ef7cfff78..9341d8adab72 100644 --- a/go.mod +++ b/go.mod @@ -75,7 +75,7 @@ require ( github.com/tdakkota/asciicheck v0.0.0-20200416200610-e657995f937b github.com/tetafro/godot v1.4.6 github.com/timakin/bodyclose v0.0.0-20200424151742-cb6215831a94 - github.com/tomarrell/wrapcheck v1.2.0 + github.com/tomarrell/wrapcheck/v2 v2.1.0 github.com/tommy-muehle/go-mnd/v2 v2.3.2 github.com/ultraware/funlen v0.0.3 github.com/ultraware/whitespace v0.0.4 diff --git a/go.sum b/go.sum index 0388e241e9de..dbe69853315a 100644 --- a/go.sum +++ b/go.sum @@ -620,8 +620,8 @@ github.com/tklauser/numcpus v0.2.1/go.mod h1:9aU+wOc6WjUIZEwWMP62PL/41d65P+iks1g github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20200427203606-3cfed13b9966/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tomarrell/wrapcheck v1.2.0 h1:N1PWGT8l+6jZVTcm00kGjx9IEA8oDMSjipqY73ye5c0= -github.com/tomarrell/wrapcheck v1.2.0/go.mod h1:Bd3i1FaEKe3XmcPoHhNQ+HM0S8P6eIXoQIoGj/ndJkU= +github.com/tomarrell/wrapcheck/v2 v2.1.0 h1:LTzwrYlgBUwi9JldazhbJN84fN9nS2UNGrZIo2syqxE= +github.com/tomarrell/wrapcheck/v2 v2.1.0/go.mod h1:crK5eI4RGSUrb9duDTQ5GqcukbKZvi85vX6nbhsBAeI= github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4= github.com/tommy-muehle/go-mnd/v2 v2.3.2 h1:SLkFtxVVkoypCu6eTERr5U2IC3Kce/zOhA4IyNesPV4= github.com/tommy-muehle/go-mnd/v2 v2.3.2/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= diff --git a/pkg/config/linters_settings.go b/pkg/config/linters_settings.go index 5f6ac45083fd..99ba652d6ac2 100644 --- a/pkg/config/linters_settings.go +++ b/pkg/config/linters_settings.go @@ -130,6 +130,7 @@ type LintersSettings struct { Unused StaticCheckSettings Varcheck VarCheckSettings Whitespace WhitespaceSettings + Wrapcheck WrapcheckSettings WSL WSLSettings Custom map[string]CustomLinterSettings @@ -430,6 +431,10 @@ type WhitespaceSettings struct { MultiFunc bool `mapstructure:"multi-func"` } +type WrapcheckSettings struct { + IgnoreSigs []string `mapstructure:"ignoreSigs"` +} + type WSLSettings struct { StrictAppend bool `mapstructure:"strict-append"` AllowAssignAndCallCuddle bool `mapstructure:"allow-assign-and-call"` diff --git a/pkg/golinters/wrapcheck.go b/pkg/golinters/wrapcheck.go index e1592e50b5bf..7717d188ac67 100644 --- a/pkg/golinters/wrapcheck.go +++ b/pkg/golinters/wrapcheck.go @@ -1,19 +1,29 @@ package golinters import ( - "github.com/tomarrell/wrapcheck/wrapcheck" + "github.com/tomarrell/wrapcheck/v2/wrapcheck" "golang.org/x/tools/go/analysis" + "github.com/golangci/golangci-lint/pkg/config" "github.com/golangci/golangci-lint/pkg/golinters/goanalysis" ) const wrapcheckName = "wrapcheck" -func NewWrapcheck() *goanalysis.Linter { +func NewWrapcheck(settings *config.WrapcheckSettings) *goanalysis.Linter { + cfg := wrapcheck.NewDefaultConfig() + if settings != nil { + if len(settings.IgnoreSigs) != 0 { + cfg.IgnoreSigs = settings.IgnoreSigs + } + } + + a := wrapcheck.NewAnalyzer(cfg) + return goanalysis.NewLinter( wrapcheckName, - wrapcheck.Analyzer.Doc, - []*analysis.Analyzer{wrapcheck.Analyzer}, + a.Doc, + []*analysis.Analyzer{a}, nil, ).WithLoadMode(goanalysis.LoadModeTypesInfo) } diff --git a/pkg/lint/lintersdb/manager.go b/pkg/lint/lintersdb/manager.go index 3f1d3a074238..8b057b342b62 100644 --- a/pkg/lint/lintersdb/manager.go +++ b/pkg/lint/lintersdb/manager.go @@ -117,6 +117,7 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config { var staticcheckCfg *config.StaticCheckSettings var stylecheckCfg *config.StaticCheckSettings var unusedCfg *config.StaticCheckSettings + var wrapcheckCfg *config.WrapcheckSettings if m.cfg != nil { govetCfg = &m.cfg.LintersSettings.Govet @@ -137,6 +138,7 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config { staticcheckCfg = &m.cfg.LintersSettings.Staticcheck stylecheckCfg = &m.cfg.LintersSettings.Stylecheck unusedCfg = &m.cfg.LintersSettings.Unused + wrapcheckCfg = &m.cfg.LintersSettings.Wrapcheck } const megacheckName = "megacheck" @@ -411,7 +413,7 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config { WithSince("v1.30.0"). WithPresets(linter.PresetStyle). WithURL("https://github.com/ssgreg/nlreturn"), - linter.NewConfig(golinters.NewWrapcheck()). + linter.NewConfig(golinters.NewWrapcheck(wrapcheckCfg)). WithSince("v1.32.0"). WithPresets(linter.PresetStyle, linter.PresetError). WithLoadForGoAnalysis().