diff --git a/.golangci.yml b/.golangci.yml index ce17c5200..25c3d7fa0 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -32,12 +32,14 @@ linters: - goprintffuncname # checks that printf-like functions are named with f at the end - gosec # inspects source code for security problems - govet # reports suspicious constructs (Printf alignment, shadow, etc.) + - iface # detects interface pollution — duplicate interface declarations - ineffassign # detects assignments to existing variables that are not used + - iotamixing # flags const blocks that mix iota with non-iota declarations - makezero # finds slice declarations with non-zero initial length followed by append - mirror # catches wrong mirror patterns in bytes/strings usage - misspell # finds commonly misspelled English words - - musttag # checks structs passed to marshal/unmarshal have proper tags - modernize # modernizes code to use newer Go idioms (go fix analyzers) + - musttag # checks structs passed to marshal/unmarshal have proper tags - nakedret # finds naked returns in functions - nilerr # catches code that returns nil even after checking err != nil - nilnesserr # catches returning a different nil error variable after err != nil check @@ -58,9 +60,23 @@ linters: - whitespace # detects leading and trailing whitespace in functions settings: + depguard: + rules: + main: + deny: + - pkg: log$ + desc: Use log/slog instead, see https://go.dev/blog/slog + - pkg: math/rand$ + desc: Use math/rand/v2 instead, see https://go.dev/blog/randv2 + embeddedstructfieldcheck: forbid-mutex: true + errcheck: + check-type-assertions: true # replaces forcetypeassert + exclude-functions: + - (*github.com/nats-io/nats.go.Subscription).Unsubscribe # cleanup-only, errors not actionable + forbidigo: analyze-types: true forbid: @@ -71,19 +87,13 @@ linters: pkg: '^github\.com/nats-io/nats\.go$' msg: legacy nats KV types/sentinels are superseded; use github.com/nats-io/nats.go/jetstream. - depguard: - rules: - main: - deny: - - pkg: log$ - desc: Use log/slog instead, see https://go.dev/blog/slog - - pkg: math/rand$ - desc: Use math/rand/v2 instead, see https://go.dev/blog/randv2 - - errcheck: - check-type-assertions: true # replaces forcetypeassert - exclude-functions: - - (*github.com/nats-io/nats.go.Subscription).Unsubscribe # cleanup-only, errors not actionable + gosec: + excludes: + - G104 # unchecked errors — errcheck is stricter + - G116 # bidi chars — bidichk is more thorough + - G117 # use of net/http serve functions (we handle TLS separately) + - G703 # path traversal taint analysis — false positives on config file loading + - G705 # XSS taint analysis — false positives on internal error responses govet: enable-all: true @@ -92,6 +102,28 @@ linters: - shadow # too noisy to retrofit — all 50 findings are err re-declarations - unusedwrite # false positives on struct field assignments before marshal/send + modernize: + disable: + - newexpr # don't replace aws.String() with new() — AWS SDK idiom + - stringsbuilder # don't replace small string concatenations with strings.Builder + + nakedret: + max-func-lines: 0 + + nolintlint: + require-explanation: true + require-specific: true + + perfsprint: + concat-loop: false + err-error: false # don't flag err.Error() + errorf: false # don't convert fmt.Errorf to errors.New + strconcat: false + + reassign: + patterns: + - ".*" + staticcheck: checks: - all @@ -106,36 +138,6 @@ linters: - -SA4006 # value overwritten — ineffassign + wastedassign cover this better - -SA9005 # marshaling structs with no exported fields — intended {} for empty API-response types - gosec: - excludes: - - G104 # unchecked errors — errcheck is stricter - - G116 # bidi chars — bidichk is more thorough - - G117 # use of net/http serve functions (we handle TLS separately) - - G703 # path traversal taint analysis — false positives on config file loading - - G705 # XSS taint analysis — false positives on internal error responses - - modernize: - disable: - - newexpr # don't replace aws.String() with new() — AWS SDK idiom - - stringsbuilder # don't replace small string concatenations with strings.Builder - - perfsprint: - concat-loop: false - err-error: false # don't flag err.Error() - errorf: false # don't convert fmt.Errorf to errors.New - strconcat: false - - nakedret: - max-func-lines: 0 - - nolintlint: - require-explanation: true - require-specific: true - - reassign: - patterns: - - ".*" - testifylint: disable: - encoded-compare # misidentifies non-JSON strings when identifiers contain "JSON"