2026-09-19 18:20:56 +03:00
|
|
|
version: "2"
|
|
|
|
|
|
|
|
|
|
run:
|
|
|
|
|
timeout: 5m
|
|
|
|
|
tests: true
|
|
|
|
|
build-tags:
|
|
|
|
|
- sqlite_cgo
|
|
|
|
|
|
|
|
|
|
linters:
|
|
|
|
|
default: none
|
|
|
|
|
enable:
|
|
|
|
|
- asasalint
|
|
|
|
|
- bodyclose
|
|
|
|
|
- copyloopvar
|
|
|
|
|
- depguard
|
|
|
|
|
- dogsled
|
|
|
|
|
- durationcheck
|
|
|
|
|
- errcheck
|
|
|
|
|
- errorlint
|
|
|
|
|
- exhaustive
|
|
|
|
|
- forbidigo
|
|
|
|
|
- gocheckcompilerdirectives
|
|
|
|
|
- gocritic
|
|
|
|
|
- gosec
|
|
|
|
|
- govet
|
|
|
|
|
- ineffassign
|
|
|
|
|
- loggercheck
|
|
|
|
|
- misspell
|
|
|
|
|
- nilerr
|
|
|
|
|
- noctx
|
|
|
|
|
- nolintlint
|
|
|
|
|
- prealloc
|
|
|
|
|
- predeclared
|
|
|
|
|
- revive
|
|
|
|
|
- rowserrcheck
|
|
|
|
|
- sloglint
|
|
|
|
|
- sqlclosecheck
|
|
|
|
|
- staticcheck
|
|
|
|
|
- unconvert
|
|
|
|
|
- unparam
|
|
|
|
|
- unused
|
|
|
|
|
- usestdlibvars
|
|
|
|
|
- whitespace
|
|
|
|
|
settings:
|
|
|
|
|
depguard:
|
|
|
|
|
rules:
|
|
|
|
|
permissions:
|
|
|
|
|
files:
|
|
|
|
|
- "**/internal/permissions/**"
|
|
|
|
|
deny:
|
|
|
|
|
- pkg: "glchat/internal/(auth|guilds|roles|channels|messages|files|invites|voice|search|gateway|emojis|sounds|webhooks|moderation|audit|friends|dm)/"
|
|
|
|
|
desc: "permissions must stay a leaf package without domain dependencies"
|
|
|
|
|
database:
|
|
|
|
|
files:
|
|
|
|
|
- "**/internal/database/**"
|
|
|
|
|
deny:
|
|
|
|
|
- pkg: "glchat/internal/(server|gateway|auth|guilds|roles|channels|messages)/"
|
|
|
|
|
desc: "the database package must not import domain packages"
|
|
|
|
|
forbidigo:
|
|
|
|
|
forbid:
|
|
|
|
|
- pattern: 'panic\('
|
|
|
|
|
msg: "no panics in handlers or services; return errors instead"
|
|
|
|
|
- pattern: 'fmt\.Print.*'
|
|
|
|
|
msg: "use log/slog instead of fmt printing"
|
|
|
|
|
analyze-types: false
|
|
|
|
|
gocritic:
|
|
|
|
|
enabled-tags:
|
|
|
|
|
- diagnostic
|
|
|
|
|
- performance
|
|
|
|
|
disabled-checks:
|
|
|
|
|
- hugeParam
|
|
|
|
|
- rangeValCopy
|
|
|
|
|
gosec:
|
|
|
|
|
excludes:
|
|
|
|
|
- G404
|
|
|
|
|
misspell:
|
|
|
|
|
locale: US
|
|
|
|
|
revive:
|
|
|
|
|
rules:
|
|
|
|
|
- name: blank-imports
|
|
|
|
|
- name: context-as-argument
|
|
|
|
|
- name: context-keys-type
|
|
|
|
|
- name: error-return
|
|
|
|
|
- name: error-strings
|
|
|
|
|
- name: error-naming
|
|
|
|
|
- name: exported
|
|
|
|
|
disabled: true
|
|
|
|
|
- name: indent-error-flow
|
|
|
|
|
- name: var-naming
|
|
|
|
|
- name: unreachable-code
|
|
|
|
|
sloglint:
|
|
|
|
|
attr-only: true
|
|
|
|
|
context: "scope"
|
|
|
|
|
staticcheck:
|
|
|
|
|
checks:
|
|
|
|
|
- all
|
|
|
|
|
- -ST1000
|
|
|
|
|
- -ST1003
|
|
|
|
|
exclusions:
|
|
|
|
|
generated: lax
|
|
|
|
|
presets:
|
|
|
|
|
- comments
|
|
|
|
|
- std-error-handling
|
|
|
|
|
rules:
|
|
|
|
|
- path: "_test\\.go"
|
|
|
|
|
linters:
|
|
|
|
|
- gosec
|
|
|
|
|
- errcheck
|
|
|
|
|
- forbidigo
|
2026-09-19 21:29:07 +03:00
|
|
|
# В тестах пропуски результатов и вспомогательные
|
|
|
|
|
# переменные мешают читаемости сильнее, чем помогают.
|
|
|
|
|
- dogsled
|
|
|
|
|
- prealloc
|
|
|
|
|
- unparam
|
2026-09-19 21:24:17 +03:00
|
|
|
# store: идентификаторы Snowflake заведомо < MaxInt64 (преобразования
|
|
|
|
|
# документированы в idToInt/intToID), SQL собирается из константных
|
|
|
|
|
# фрагментов шаблона, а значения всегда передаются параметрами.
|
|
|
|
|
- path: "internal/store/"
|
|
|
|
|
linters:
|
|
|
|
|
- gosec
|
2026-09-19 21:37:13 +03:00
|
|
|
# CLI печатает результат команд пользователю (AGENT.md 10.7): это не логи,
|
|
|
|
|
# а контракт вывода, поэтому fmt допустим только в cmd/.
|
|
|
|
|
- path: "^cmd/"
|
|
|
|
|
linters:
|
|
|
|
|
- forbidigo
|
2026-09-19 18:20:56 +03:00
|
|
|
- path: "(^|/)internal/database/sqlc/"
|
|
|
|
|
linters:
|
|
|
|
|
- revive
|
|
|
|
|
- gocritic
|
|
|
|
|
- unused
|
|
|
|
|
- staticcheck
|
|
|
|
|
|
2026-09-19 18:25:20 +03:00
|
|
|
# gofumpt намеренно не включён в formatters golangci-lint: в v2.13 он сообщает
|
|
|
|
|
# о расхождениях, которых `golangci-lint fmt` не устраняет (проверено на v2.13.2).
|
|
|
|
|
# gofumpt применяется отдельным инструментом в целях make fmt / make go-lint.
|
2026-09-19 18:20:56 +03:00
|
|
|
formatters:
|
|
|
|
|
enable:
|
|
|
|
|
- goimports
|
|
|
|
|
settings:
|
|
|
|
|
goimports:
|
|
|
|
|
local-prefixes:
|
|
|
|
|
- glchat
|
|
|
|
|
exclusions:
|
|
|
|
|
generated: lax
|