version: "2" # Config schema uses the golangci-lint v2 layout (settings live under # linters.settings, not top-level linters-settings) so that the # thresholds below are actually applied by golangci-lint >= v2. run: timeout: 5m modules-download-mode: readonly linters: default: all enable: # Successor to the deprecated gomodguard. Named explicitly, rather than # left to `default: all`, because it carries the module policy below. - gomodguard_v2 disable: # Genuinely incompatible with project patterns - exhaustruct # Requires all struct fields - depguard # Dependency allow/block lists - godot # Requires comments to end with periods - wrapcheck # Too verbose for internal packages - varnamelen # Short names like db, id are idiomatic Go # Deprecated: the warning is attached to the old name, so it is # silenced by disabling that name, not by enabling the successor. - wsl # Deprecated, replaced by wsl_v5 - gomodguard # Deprecated, replaced by gomodguard_v2 settings: lll: line-length: 88 funlen: lines: 80 statements: 50 cyclop: max-complexity: 15 dupl: threshold: 100 # Only decisions already recorded in the Go package defaults are # listed here. Entries match the module path exactly (the default # match-type), so a differently-versioned module path is unaffected. gomodguard_v2: blocked: - module: github.com/rs/zerolog recommendations: - log/slog reason: "Structured logging is stdlib log/slog." - module: github.com/go-redis/redis recommendations: - github.com/redis/go-redis/v9 reason: "Pre-fork module; use the maintained go-redis v9." - module: github.com/sergi/go-diff recommendations: - github.com/aymanbagabas/go-udiff reason: "No unified diff output; use go-udiff." - module: github.com/hexops/gotextdiff recommendations: - github.com/aymanbagabas/go-udiff reason: "Unmaintained fork; use go-udiff." issues: max-issues-per-linter: 0 max-same-issues: 0