diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 0000000..0a3335b --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,125 @@ +linters: + # Please, do not use `enable-all`: it's deprecated and will be removed soon. + # Inverted configuration with `enable-all` and `disable` is not scalable during updates of golangci-lint. + # Full list of linters - https://golangci-lint.run/usage/linters + disable-all: true + enable: + - bodyclose # https://github.com/timakin/bodyclose + - gomodguard + - errcheck # Mandatory. Do not disable. + - gocritic + - goimports + - gosec + - gosimple + - govet + - noctx + - nolintlint + - ineffassign # Mandatory. Do not disable. + - staticcheck # Mandatory. Do not disable. + - stylecheck + - typecheck + - unused + +# Other linters: +# - dogsled +# - dupl +# - exportloopref +# - exhaustive # e.g. missing cases in switch of type +# - funlen +# - gochecknoinits +# - gocognit +# - goconst +# - gocyclo +# - goerr113 +# - gofmt +# - goprintffuncname +# - lll +# - misspell +# - nakedret +# - nlreturn +# - prealloc +# - revive +# - rowserrcheck +# - stylecheck +# - unconvert +# - unparam + +linters-settings: + gocritic: + enabled-tags: + - diagnostic + - experimental + - opinionated + - performance + - style + disabled-checks: + - dupImport # https://github.com/go-critic/go-critic/issues/845 + - whyNoLint # checked by nolintlint linter + - hugeParam # TODO(vtopc): configure(80 bytes is probably not so much) and enable. + - rangeValCopy # TODO(vtopc): configure(disable for tests) and enable. + - appendAssign + - commentedOutCode + + errcheck: + # List of functions to exclude from checking, where each entry is a single function to exclude. + # See https://github.com/kisielk/errcheck#excluding-functions for details. + exclude-functions: + - (io.Closer).Close + - (io.ReadCloser).Close + + govet: + enable-all: true + disable: + - shadow + - fieldalignment + + gomodguard: + blocked: + # List of blocked modules. + # Default: [] + modules: + - github.com/golang/protobuf: + recommendations: + - google.golang.org/protobuf + reason: "see https://developers.google.com/protocol-buffers/docs/reference/go/faq#modules" + - github.com/pkg/errors: + recommendations: + - errors + - github.com/mailgun/errors + reason: "Deprecated" + + stylecheck: + # https://staticcheck.io/docs/options#checks + checks: ["all"] + +issues: + # Maximum issues count per one linter. Set to 0 to disable. Default is 50. + max-issues-per-linter: 0 + + # Maximum count of issues with the same text. Set to 0 to disable. Default is 3. + max-same-issues: 50 + + exclude: + # Some packages have deprecated fields which continue to be useful + - SA1019 + + exclude-rules: + # Exclude some rules from tests. + - path: '_test\.go$' + linters: + - gosec + - noctx + - path: '_test\.go$' + text: "unnamedResult:" + - path: '.*mxresolv.*' + linters: + - gosec + + +run: + # include test files or not, default is true + tests: true + + # Timeout for analysis, e.g. 30s, 5m. + # Default: 1m + timeout: 5m \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..f735896 --- /dev/null +++ b/Makefile @@ -0,0 +1,13 @@ +GOLANGCI_LINT = $(GOPATH)/bin/golangci-lint +GOLANGCI_LINT_VERSION = v1.57.2 + +.PHONY: lint +lint: $(GOLANGCI_LINT) + $(GOLANGCI_LINT) run + +$(GOLANGCI_LINT): + curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(GOPATH)/bin $(GOLANGCI_LINT_VERSION) + +.PHONY: test +test: + go test -p 1 ./... -short -race -timeout 1m -count=1 diff --git a/fields.go b/fields.go index f500c80..5b3f2e8 100644 --- a/fields.go +++ b/fields.go @@ -132,7 +132,7 @@ func (c *fields) Is(target error) bool { // cause of the issue. We only support this because some code // depends on github.com/pkg/errors.Cause() returning the cause // of the error. -// deprecated use error.Is() or error.As() instead +// Deprecated: use error.Is() or error.As() instead func (c *fields) Cause() error { return c.wrapped } func (c *fields) Error() string { diff --git a/go.mod b/go.mod index a2b50e3..0dd6019 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/mailgun/errors -go 1.19 +go 1.21 require ( github.com/ahmetb/go-linq v3.0.0+incompatible diff --git a/stack.go b/stack.go index 69b01ec..9d07098 100644 --- a/stack.go +++ b/stack.go @@ -36,7 +36,7 @@ func (w *stack) Is(target error) bool { // cause of the issue. We only support this because some code // depends on github.com/pkg/errors.Cause() returning the cause // of the error. -// deprecated use error.Is() or error.As() instead +// Deprecated: use error.Is() or error.As() instead func (w *stack) Cause() error { return w.error } func (w *stack) HasFields() map[string]any { diff --git a/stack_test.go b/stack_test.go index 04e094c..b07d54a 100644 --- a/stack_test.go +++ b/stack_test.go @@ -136,7 +136,7 @@ func TestFormatStack(t *testing.T) { for _, tt := range tests { t.Run(tt.Name, func(t *testing.T) { out := fmt.Sprintf(tt.format, tt.err) - //t.Log(out) + // t.Log(out) for _, line := range tt.want { assert.Contains(t, out, line) diff --git a/wrap.go b/wrap.go index d3069dd..d1d0715 100644 --- a/wrap.go +++ b/wrap.go @@ -62,7 +62,7 @@ func (e *wrappedError) Is(target error) bool { // cause of the issue. We only support this because some code // depends on github.com/pkg/errors.Cause() returning the cause // of the error. -// deprecated use error.Is() or error.As() instead +// Deprecated: use error.Is() or error.As() instead func (e *wrappedError) Cause() error { return e.wrapped } func (e *wrappedError) Error() string {