feat: make golangci harder

This commit is contained in:
zarazaex69
2026-05-10 23:00:06 +03:00
parent 5fea618bba
commit 50157fd50c

View File

@@ -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: []