diff --git a/.golangci.yml b/.golangci.yml index 82b7e41..b744a8d 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,273 +1,432 @@ version: "2" run: - timeout: 5m + timeout: 10s tests: true build-tags: - race + modules-download-mode: readonly + allow-parallel-runners: false + allow-serial-runners: false + go: "1.23" + concurrency: 0 + relative-path-mode: gomod + issues-exit-code: 1 + +output: + formats: + text: + path: stdout + print-linter-name: true + print-issued-lines: true + colors: true + sort-order: + - linter + - severity + - file + show-stats: true linters: - enable: - - errcheck - - govet - - staticcheck - - unused - - ineffassign - - asasalint - - asciicheck - - bidichk - - bodyclose - - canonicalheader - - containedctx - - contextcheck - - copyloopvar - - cyclop - - decorder - - dogsled - - dupl - - dupword - - durationcheck - - err113 - - errchkjson - - errname - - errorlint - - exhaustive - - fatcontext - - forbidigo - - forcetypeassert - - gocheckcompilerdirectives - - gochecknoglobals - - gochecknoinits - - gochecksumtype - - gocognit - - goconst - - gocritic - - gocyclo - - godot - - godox - - goprintffuncname - - gosec - - grouper - - iface - - inamedparam - - interfacebloat - - intrange - # - ireturn - - lll - - loggercheck - - maintidx - - makezero - - mirror - - misspell - - musttag - - nakedret - - nestif - - nilerr - - nilnesserr - - nilnil - - noctx - - nolintlint - - nonamedreturns - - nosprintfhostport - - perfsprint - - prealloc - - predeclared - - promlinter - - reassign - - recvcheck - - revive - - rowserrcheck - - sloglint - - spancheck - - sqlclosecheck - - tagalign - - tagliatelle - - testableexamples - - testifylint - - thelper - - tparallel - - unconvert - - unparam - - usestdlibvars - - wastedassign - - whitespace - - wrapcheck - - zerologlint + default: all + disable: [] + settings: + errcheck: + check-type-assertions: true + check-blank: true + disable-default-exclusions: true + exclude-functions: [] -linters-settings: - errcheck: - check-blank: true - check-type-assertions: true - exclude-functions: - - (io.Closer).Close + govet: + enable-all: true + settings: + shadow: + strict: true - govet: - enable-all: true - settings: - shadow: - strict: true + gosec: + severity: low + confidence: low + config: + global: + audit: enabled + nosec: disabled + show-ignored: true - gosec: - severity: medium - confidence: medium - excludes: - - G104 - - G114 + gocritic: + enable-all: true + disabled-checks: + - hugeParam + - rangeValCopy - gocritic: - enabled-tags: - - diagnostic - - style - - performance - - experimental - - opinionated - - revive: - severity: warning - enable-all-rules: false - rules: - - name: atomic - - name: blank-imports - - name: bool-literal-in-expr - - name: call-to-gc - - name: constant-logical-expr - - name: context-as-argument - - name: context-keys-type - - name: datarace - - name: defer - - name: dot-imports - - name: duplicated-imports - - name: early-return - - name: empty-block - - name: empty-lines - - name: error-naming - - name: error-return - - name: error-strings - - name: errorf - - name: exported - - name: identical-branches - - name: if-return - - name: increment-decrement - - name: indent-error-flow - - name: modifies-parameter - - name: modifies-value-receiver - - name: range - - name: range-val-address - - name: range-val-in-closure - - name: receiver-naming - - name: redefines-builtin-id - - name: string-of-int - - name: struct-tag - - name: superfluous-else - - name: time-equal - - name: time-naming - - name: unconditional-recursion - - name: unexported-naming - - name: unexported-return - - name: unhandled-error - - name: unnecessary-stmt - - name: unreachable-code - - name: unused-parameter - - name: unused-receiver - - name: use-any - - name: useless-break - - name: var-declaration - - name: var-naming - - name: waitgroup-by-value - - stylecheck: - checks: ["all"] - - staticcheck: - checks: ["all"] - - unparam: - check-exported: true - - nakedret: - max-func-lines: 0 - - cyclop: - max-complexity: 10 - - gocyclo: - min-complexity: 10 - - gocognit: - min-complexity: 15 - - nestif: - min-complexity: 4 - - lll: - line-length: 120 - - maintidx: - under: 20 - - funlen: - lines: 80 - statements: 50 - - gochecknoglobals: - check-no-globals: true - - goconst: - min-len: 3 - min-occurrences: 3 - - dupl: - threshold: 100 - - forbidigo: - forbid: - - ^print.*$ - - ^fmt\.Print.*$ - - tagliatelle: - case: + revive: + severity: error + enable-all-rules: true rules: - json: snake - yaml: snake - xml: camel - bson: camel - avro: snake - mapstructure: kebab + - name: line-length-limit + arguments: [80] + - name: function-length + arguments: [1, 1] + - name: function-result-limit + arguments: [1] + - name: argument-limit + arguments: [1] + - name: cognitive-complexity + arguments: [1] + - name: cyclomatic + arguments: [1] + - name: max-public-structs + arguments: [1] + - name: file-header + disabled: true + - name: banned-characters + disabled: true + - name: add-constant + arguments: + - maxLitCount: "3" + allowStrs: '""' + allowInts: "0,1,2" + allowFloats: "0.0,1.0" + - name: unhandled-error + arguments: ["fmt.Print.*", "fmt.Fprint.*"] - varnamelen: - min-name-length: 2 - ignore-names: - - err - - i - - j - - k - - v - - id - - ok - - db - - tx - - wg - - mu + staticcheck: + checks: + [ + "all", + "-ST1000", + "-ST1003", + "-ST1016", + "-ST1020", + "-ST1021", + "-ST1022", + ] - ireturn: - allow: - - anon - - error - - empty - - stdlib - - Provider - - provider.Provider + unparam: + check-exported: true - wrapcheck: - ignoreSigs: - - .Errorf( - - errors.New( - - errors.Unwrap( - - .Wrap( - - .Wrapf( - - .WithMessage( + nakedret: + max-func-lines: 0 + + cyclop: + max-complexity: 1 + package-average: 1.0 + + gocyclo: + min-complexity: 1 + + gocognit: + min-complexity: 1 + + nestif: + min-complexity: 1 + + lll: + line-length: 80 + tab-width: 1 + + maintidx: + under: 100 + + funlen: + lines: 1 + statements: 1 + ignore-comments: false + + goconst: + min-len: 1 + min-occurrences: 1 + match-constant: true + numbers: true + min: 1 + max: 1 + ignore-calls: false + + dupl: + threshold: 10 + + forbidigo: + analyze-types: true + exclude-godoc-examples: false + forbid: + - pattern: ^print(ln)?$ + msg: "use a proper logger" + - pattern: ^fmt\..*$ + msg: "fmt is forbidden, use a structured logger" + - pattern: ^log\..*$ + msg: "stdlib log is forbidden, use slog" + - pattern: ^panic$ + msg: "do not panic, return an error" + - pattern: ^recover$ + msg: "recover is forbidden, code must not panic" + - pattern: ^os\.Exit$ + msg: "os.Exit is forbidden, return an error from main" + - pattern: ^time\.Sleep$ + msg: "time.Sleep is forbidden, use context with deadline or timers" + - pattern: ^go\s + msg: "raw goroutines are forbidden, use a managed pool" + - pattern: ^init$ + msg: "init functions are forbidden, use explicit initialization" + - pattern: ^println$ + msg: "println is forbidden" + - pattern: ^make\(chan\s + msg: "unbuffered channels are forbidden, specify a buffer size" + + tagliatelle: + case: + use-field-name: true + rules: + json: snake + yaml: snake + xml: camel + bson: camel + avro: snake + mapstructure: kebab + env: upperSnake + envconfig: upperSnake + + varnamelen: + min-name-length: 4 + check-receiver: true + check-return: true + check-type-param: true + ignore-type-assert-ok: false + ignore-map-index-ok: false + ignore-chan-recv-ok: false + ignore-names: + - err + ignore-decls: + - i int + - n int + - w io.Writer + - r io.Reader + - t testing.T + - b testing.B + - f *os.File + - ok bool + + ireturn: + allow: + - anon + - error + - empty + - stdlib + + wrapcheck: + ignore-sigs: [] + ignore-package-globs: [] + + exhaustive: + check: + - switch + - map + default-signifies-exhaustive: false + explicit-exhaustive-switch: true + explicit-exhaustive-map: true + default-case-required: true + + exhaustruct: + include: [] + exclude: [] + + nlreturn: + block-size: 1 + + wsl_v5: + allow-first-in-block: false + allow-whole-block: false + branch-max-lines: 1 + + mnd: + checks: + - argument + - case + - condition + - operation + - return + - assign + + interfacebloat: + max: 1 + + nolintlint: + allow-unused: false + require-explanation: true + require-specific: true + + misspell: + locale: US + + grouper: + const-require-single-const: false + const-require-grouping: true + import-require-single-import: false + import-require-grouping: true + type-require-single-type: false + type-require-grouping: true + var-require-single-var: false + var-require-grouping: true + + decorder: + dec-order: + - type + - const + - var + - func + disable-dec-order-check: false + disable-init-func-first-check: false + disable-dec-num-check: false + disable-type-dec-num-check: false + disable-const-dec-num-check: false + disable-var-dec-num-check: false + + paralleltest: + ignore-missing: false + ignore-missing-subtests: false + + testpackage: + skip-regexp: "" + allow-packages: [] + + perfsprint: + integer-format: true + int-conversion: true + error-format: true + err-error: true + errorf: true + string-format: true + sprintf1: true + strconcat: true + bool-format: true + hex-format: true + + prealloc: + simple: true + range-loops: true + for-loops: true + + nonamedreturns: + report-error-in-defer: true + + sloglint: + no-mixed-args: true + kv-only: false + attr-only: true + no-global: "all" + context: "all" + static-msg: true + no-raw-keys: true + key-naming-case: snake + args-on-sep-lines: true + + inamedparam: + skip-single-param: false + + godot: + scope: all + period: true + capital: true + + godox: + keywords: + - TODO + - FIXME + - BUG + - HACK + - XXX + - OPTIMIZE + + embeddedstructfieldcheck: + forbid-mutex: true + + funcorder: + constructor: true + struct-method: true + + importas: + no-unaliased: true + no-extra-aliases: true + + depguard: + rules: + main: + list-mode: strict + files: + - "$all" + deny: + - pkg: "math/rand$" + desc: "use math/rand/v2 or crypto/rand" + - pkg: "io/ioutil" + desc: "deprecated, use io and os" + - pkg: "fmt" + desc: "fmt is forbidden, use slog" + - pkg: "log$" + desc: "stdlib log is forbidden, use slog" + - pkg: "reflect" + desc: "reflect is forbidden, write explicit code" + - pkg: "unsafe" + desc: "unsafe is forbidden" + - pkg: "github.com/pkg/errors" + desc: "use stdlib errors with fmt.Errorf %w" + allow: + - $gostd + + tagalign: + align: true + sort: true + strict: true + + iface: + enable: + - identical + - unused + - opaque + + recvcheck: + disable-builtin: false + + testifylint: + enable-all: true + + dogsled: + max-blank-identifiers: 0 + + dupword: + keywords: [] + + gomoddirectives: + replace-local: false + retract-allow-no-explanation: false + exclude-forbidden: true + + spancheck: + checks: + - end + - record-error + - set-status + + usetesting: + context-background: true + context-todo: true + os-chdir: true + os-mkdir-temp: true + os-setenv: true + os-temp-dir: true + os-create-temp: true + + exclusions: + generated: strict + warn-unused: true + presets: [] + rules: [] + paths: [] + paths-except: [] issues: - max-issues-per-linter: 0 - max-same-issues: 0 - exclude-use-default: false + max-issues-per-linter: 1 + max-same-issues: 1 + uniq-by-line: false + new: false + fix: false + +severity: + default: error + rules: []