- README, CLAUDE.md, docs: назначение и границы, архитектура, конвенции, план - docs/local-research.md — 36 находок по формату Health Auto Export, снятых на живых данных; документация приложения местами расходится с тем, что оно шлёт - Taskfile, .golangci.yml, самодокументируемый config.example.toml
89 lines
3.7 KiB
YAML
89 lines
3.7 KiB
YAML
# Конфиг golangci-lint (схема v2; устанавливается через `task setup`).
|
|
#
|
|
# Базовый набор v2 (`default: standard`) — errcheck, govet, ineffassign,
|
|
# staticcheck, unused. Сверх него включены линтеры, механизирующие конвенции
|
|
# из docs/conventions.md: то, что проверяет правило, не остаётся прозой.
|
|
version: "2"
|
|
|
|
linters:
|
|
enable:
|
|
- misspell
|
|
# docs/conventions.md, «Логи»: msg — константная категория, данные — в
|
|
# полях, единый стиль ключ-значение.
|
|
- sloglint
|
|
# docs/conventions.md: без fmt.Print* (логируем через slog), конфиг только
|
|
# из TOML (env не используем), время — только store.Now().
|
|
- forbidigo
|
|
# docs/conventions.md, «Ошибки»: сравнение через errors.Is/As.
|
|
- errorlint
|
|
# docs/conventions.md, «Ошибки»: ошибки — только stdlib.
|
|
- depguard
|
|
|
|
settings:
|
|
sloglint:
|
|
no-mixed-args: true # не мешать пары «ключ-значение» с slog.Attr
|
|
kv-only: true # принятый в проекте стиль вызова
|
|
static-msg: true # msg — константа, без fmt.Sprintf и интерполяции
|
|
|
|
forbidigo:
|
|
forbid:
|
|
- pattern: ^fmt\.Print.*$
|
|
msg: логируем через slog, в stdout напрямую не пишем (docs/conventions.md)
|
|
- pattern: ^os\.Getenv$
|
|
msg: конфигурация только из TOML, env для конфига не используем (docs/conventions.md)
|
|
- pattern: ^time\.Now$
|
|
msg: время генерирует store.Now() (UTC, единая точка) — docs/conventions.md
|
|
|
|
errorlint:
|
|
# Обёртка вида fmt.Errorf("%w: %v", ErrSentinel, err) осознанна: sentinel
|
|
# раскрываем для errors.Is, причину — намеренно нет.
|
|
errorf: false
|
|
asserts: true
|
|
comparison: true
|
|
|
|
depguard:
|
|
rules:
|
|
main:
|
|
deny:
|
|
- pkg: github.com/pkg/errors
|
|
desc: ошибки — только stdlib errors + fmt.Errorf (docs/conventions.md)
|
|
- pkg: github.com/cockroachdb/errors
|
|
desc: стек-трейсы избыточны, контекст несёт slog (docs/conventions.md)
|
|
|
|
exclusions:
|
|
generated: lax
|
|
presets:
|
|
- comments
|
|
- common-false-positives
|
|
- legacy
|
|
- std-error-handling
|
|
paths:
|
|
- third_party$
|
|
- builtin$
|
|
- examples$
|
|
rules:
|
|
# CLI — другая поверхность: печатает результат в stdout, это не логи.
|
|
- path: ^cmd/
|
|
linters: [forbidigo]
|
|
# Единая точка генерации id и времени — им time.Now по определению можно.
|
|
- path: ^internal/(ident|store)/
|
|
text: time.Now
|
|
linters: [forbidigo]
|
|
# Замер длительности запроса — не метка времени в БД: засекается на
|
|
# входе транспорта и никуда не сохраняется.
|
|
- path: ^internal/httpapi/
|
|
text: time.Now
|
|
linters: [forbidigo]
|
|
# В тестах время задаётся явно, чтобы не зависеть от часов машины.
|
|
- path: _test\.go$
|
|
text: time.Now
|
|
linters: [forbidigo]
|
|
|
|
formatters:
|
|
exclusions:
|
|
generated: lax
|
|
paths:
|
|
- third_party$
|
|
- builtin$
|
|
- examples$
|