skeleton added

This commit is contained in:
2026-02-08 19:56:16 +03:00
committed by KentoNion
commit f0b04b229a
19 changed files with 2021 additions and 0 deletions

445
golangci.yml Normal file
View File

@@ -0,0 +1,445 @@
version: "2"
issues:
# Максимальное количество выпусков с одинаковым текстом.
# Можно задать 0 для отключения.
# Default: 3
max-same-issues: 50
formatters:
enable:
- goimports # Проверяет, отформатированы ли код и утверждения импорта в соответствии с командой 'goimports'.
- golines # Проверяет, отформатирован ли код, и исправляет длинные строки.
## Можно дополнительно рассмотреть для включения.
#- gci # Проверяет, отформатирован ли код и операторы импорта, с дополнительными правилами.
#- gofmt # Проверяет, отформатирован ли код в соответствии с командой 'gofmt'.
#- gofumpt # Применяет более строгий формат, чем 'gofmt', при этом сохраняя обратную совместимость.
# Все настройки можно найти здесь: https://github.com/golangci/golangci-lint/blob/HEAD/.golangci.reference.yml
settings:
goimports:
# Список префиксов, который, если установлен, проверяет пути импорта
# с указанными префиксами, группируются после сторонних (3rd-party) пакетов.
# Default: []
local-prefixes: []
golines:
# Максимальная длина строки.
# Default: 100
max-len: 120
linters:
enable:
## Включены по умолчанию.
- errcheck # Проверка непроверенных ошибок, эти непроверенные ошибки в некоторых случаях могут быть критическими ошибками.
- govet # Сообщает о подозрительных конструкциях, таких как вызов Printf, аргументы которого не совпадают со строкой формата.
- ineffassign # Обнаруживает, когда присваивания существующим переменным не используются.
- staticcheck # Это govet на стероидах, применяющий тонну проверок статического анализа.
- unused # Проверяет наличие неиспользуемых констант, переменных, функций и типов.
## Выключены по умолчанию.
- asasalint # Проверяет на передачу []any как any в вариативной функции func(...any).
- asciicheck # Проверяет, что ваш код не содержит идентификаторов, отличных от ASCII.
- bidichk # Проверяет наличие опасных последовательностей символов Юникода.
- bodyclose # Проверяет, успешно ли закрыто тело HTTP-ответа.
- canonicalheader # Проверяет, использует ли net/http.Header канонический заголовок.
- copyloopvar # Определяет места, где копируются переменные цикла (Go 1.22+).
- cyclop # Проверяет цикломатическую сложность функций и пакетов.
- depguard # Проверяет наличие импорта пакетов в списке допустимых пакетов.
- dupl # Инструмент для обнаружения клонов кода.
- durationcheck # Проверка на наличие двух длительностей, умноженных друг на друга.
- errname # Проверяет, что ошибки-сигнализаторы имеют префикс Err, а типы ошибок имеют суффикс Error.
- errorlint # Находит код, который вызовет проблемы со схемой обертывания ошибок, введенной в Go 1.13.
- exhaustive # Проверяет исчерпанность операторов перечисления.
- exptostd # Обнаруживает функции из golang.org/x/exp/, которые могут быть заменены на std-функции.
- fatcontext # Обнаружение вложенных контекстов в циклах.
- forbidigo # Запрещает идентификаторы.
- funcorder # Проверяет порядок следования функций, методов и конструкторов.
- funlen # Инструмент для обнаружения длинных функций.
- gocheckcompilerdirectives # Проверяет комментарии к директивам компилятора go (//go:).
- gochecknoglobals # Проверяет отсутствие глобальных переменных.
- gochecknoinits # Проверяет отсутствие функций init в коде Go.
- gochecksumtype # Проверяет исчерпываемость "типов сумм" в Go.
- gocognit # Вычисляет и проверяет когнитивную сложность функций.
- goconst # Находит повторяющиеся строки, которые можно заменить константой.
- gocritic # Предоставляет диагностику, которая проверяет ошибки, производительность и проблемы со стилем.
- gocyclo # Вычисляет и проверяет цикломатическую сложность функций.
- godot # Проверяет, заканчиваются ли комментарии точкой.
- gomoddirectives # Управляет использованием директив 'replace', 'retract' и 'excludes' в go.mod.
- goprintffuncname # Проверяет, что printf-подобные функции названы с f в конце.
- gosec # Проверяет исходный код на наличие проблем с безопасностью.
- iface # Проверяет неправильное использование интерфейсов, помогая разработчикам избежать загрязнения интерфейсов.
- intrange # Находит места, где циклы for могли бы использовать диапазон целых чисел.
- loggercheck # Проверяет пары ключ-значение для распространенных библиотек логгеров (kitlog,klog,logr,zap).
- makezero # Находит объявления фрагментов с ненулевой начальной длиной.
- mirror # Сообщает о неправильных зеркальных шаблонах использования байтов/строк.
- mnd # Обнаруживает магические числа.
- musttag # Принудительное использование тегов полей в (не)маршализированных структурах.
- nakedret # Находит "голые" возвраты в функциях, длина которых превышает заданную длину функции.
- nestif # Сообщает о глубоко вложенных операторах if.
- nilerr # Находит код, возвращающий nil, даже если он проверяет, что ошибка не nil.
- nilnesserr # Сообщает, что он проверяет err != nil, но возвращает другую ошибку со значением nil (на основе nilness и nilerr).
- nilnil # Проверяет, что нет одновременного возврата ошибки nil и недопустимого значения.
- noctx # Обнаруживает отправку http-запроса без context.Context.
- nolintlint # Сообщает о неправильно сформированных или недостаточных директивах nolint.
- nonamedreturns # Сообщает обо всех именованных возвратах.
- nosprintfhostport # Проверяет, не используется ли Sprintf для построения хоста с портом в URL.
- perfsprint # Проверяет, что fmt.Sprintf может быть заменен более быстрой альтернативой.
- predeclared # Находит код, который затеняет один из заранее объявленных идентификаторов Go.
- promlinter # Проверяет именование метрик Prometheus через promlint.
- protogetter # Сообщает о прямом чтении из полей сообщений proto, когда следует использовать геттеры.
- reassign # Проверяет, что переменные пакета не переназначены.
- recvcheck # Проверяет согласованность типов приемников.
- revive # Быстрый, конфигурируемый, расширяемый, гибкий и красивый линкер для Go, замена golint.
- rowserrcheck # Проверяет, успешно ли проверяется Err строк.
- sloglint # Обеспечивает согласованный стиль кода при использовании log/slog.
- spancheck # Проверяет ошибки при работе со спанами OpenTelemetry/Census.
- sqlclosecheck # Проверяет, что sql.Rows и sql.Stmt закрыты.
- testableexamples # Проверяет, являются ли примеры тестируемыми (имеют ожидаемый результат).
- testifylint # Проверяет использование github.com/stretchr/testify.
- tparallel # Обнаруживает неуместное использование метода t.Parallel() в ваших тестовых кодах Go.
- unconvert # Удаляет ненужные преобразования типов.
- unparam # Сообщает о неиспользуемых параметрах функции.
- usestdlibvars # Обнаруживает возможность использования переменных/констант из стандартной библиотеки Go.
- usetesting # Сообщает об использовании функций с заменой внутри тестового пакета.
- wastedassign # Находит ненужные операторы присваивания.
- whitespace # Определяет ведущие и завершающие пробельные символы.
## Могут быть рассмотрены для включения.
#- decorder # Проверяет порядок объявления и количество типов, констант, переменных и функций.
#- exhaustruct # [Настоятельно рекомендуется включить] Проверяет, все ли поля структуры инициализированы.
#- ginkgolinter # [Если используется ginkgo/gomega] Обеспечивает соблюдение стандартов использования ginkgo и gomega.
#- godox # Определяет FIXME, TODO и другие ключевые слова комментариев.
#- goheader # Проверяет соответствие заголовка файла шаблону.
#- inamedparam # [Отличная проверка, но слишком строгая, нужно игнорировать многие случаи по умолчанию] Сообщает об интерфейсах с неименованными параметрами методов.
#- interfacebloat # Проверяет количество методов внутри интерфейса.
#- ireturn # Принимает интерфейсы, возвращает конкретные типы.
#- prealloc # [Преждевременная оптимизация, но может быть использована в некоторых случаях] Находит объявления фрагментов, которые потенциально могут быть предварительно выделены.
#- tagalign # Проверяет, хорошо ли выровнены теги struct.
#- testpackage # Заставляет использовать отдельный пакет _test.
#- varnamelen # [Отличная проверка, но слишком много ложных срабатываний] Проверяет, что длина имени переменной соответствует ее области видимости.
#- wrapcheck # Проверяет, что ошибки, возвращаемые из внешних пакетов, обернуты.
#- zerologlint # Обнаруживает неправильное использование zerolog, когда пользователь забывает отправить zerolog.Event.
## Отключены
#- containedctx # Обнаруживает структуру, содержащую поле context.Context.
#- contextcheck # [Слишком много ложных срабатываний] Проверяет функцию на использование ненаследованного контекста.
#- dogsled # Проверяет присваивания со слишком большим количеством пустых идентификаторов (например, x, _, _, _, := f()).
#- dupword # [Бесполезно без конфига] Проверяет наличие дублирующихся слов в исходном коде.
#- err113 # [Слишком строгий] Проверяет обработку ошибок в выражениях.
#- errchkjson # [Не вижу смысла + я против опускания ошибок, как в первом примере https://github.com/breml/errchkjson] проверяет типы, передаваемые функциям кодирования json. Сообщает о неподдерживаемых типах и опционально сообщает о случаях, когда проверка на возвращаемую ошибку может быть опущена.
#- forcetypeassert # [Заменено на errcheck] Находит принудительные утверждения типа.
#- gomodguard # [Используется более мощный depguard] Разрешает и блокирует списки linter для прямых зависимостей модулей Go.
#- gosmopolitan # Сообщает об определенных антипаттернах i18n/l10n в вашей кодовой базе Go.
#- grouper # Анализирует группы выражений.
#- importas # Обеспечивает согласованный импорт псевдонимов.
#- lll # [Заменено на golines] Сообщает о длинных строках.
#- maintidx # Измеряет индекс сопровождаемости каждой функции.
#- misspell # [Бесполезный] Находит в комментариях часто неправильно написанные английские слова.
#- nlreturn # [Слишком строгий и в основном код не становится более читаемым] Проверяет наличие новой строки перед операторами return и branch для повышения ясности кода.
#- paralleltest # [Слишком много ложных срабатываний] Обнаруживает отсутствие использования метода t.Parallel() в вашем тесте Go.
#- tagliatelle # Проверяет теги struct.
#- thelper # Обнаруживает тестовые хелперы golang без вызова t.Helper() и проверяет согласованность тестовых хелперов.
#- wsl # [Слишком строгий и в основном не читаемый код] whitespace linter заставляет вас использовать пустые строки.
# Все настройки можно найти здесь: https://github.com/golangci/golangci-lint/blob/HEAD/.golangci.reference.yml
settings:
cyclop:
# Максимальная сложность кода, о которой нужно сообщить.
# Конфигурация в случае с этим линтером устанавливает максимальную допустимую сложность кода. Сложность кода обычно измеряется с помощью метрик, таких как значение Мориса Холстеда, которое учитывает количество операторов, условий и циклов в блоке кода. Единица измерения в данном случае - это значение Мориса Холстеда. Чем выше значение Мориса Холстеда, тем сложнее код. Линтер Cyclone позволяет задать пороговое значение для этой метрики. Если код превышает этот порог, линтер выдаст предупреждение.
# Default: 10
max-complexity: 30
# Максимальная средняя сложность пакета.
# Если оно больше 0,0 (плавающее), проверка включена.
# Default: 0.0
package-average: 10.0
depguard:
# Правила применения.
#
# Переменные:
# - Файловые переменные.
# Необходимо использовать восклицательный знак `!` для отрицания переменной.
# Пример: `!$test` соответствует любому файлу, который не является файлом go test.
#
# `$all` - соответствует всем файлам go.
# `$test` - соответствует всем тестовым файлам go
#
# - Переменные пакета
#
# `$gostd` - соответствует всей стандартной библиотеке go (Извлеченной из `GOROOT`)
#
# По умолчанию (применяется, если не определены пользовательские правила): Разрешить $gostd только во всех файлах.
rules:
"deprecated":
# Список шаблонов файлов, которые будут соответствовать данному списку настроек для сравнения.
# По умолчанию, если путь является относительным, то он является относительным к директории, в которой выполняется команда golangci-lint.
# Заполнитель '${base-path}' заменяется на путь относительно режима, заданного с помощью `run.relative-path-mode`.
# Заполнитель '${config-path}' заменяется на путь относительно конфигурационного файла.
# Default: $all
files:
- "$all"
# Список пакетов, которые не разрешены.
# Записи могут быть переменной (начинающейся с $), строковым префиксом или точным совпадением (если заканчивается на $).
# Default: []
deny:
- pkg: github.com/golang/protobuf
desc: Use google.golang.org/protobuf instead, see https://developers.google.com/protocol-buffers/docs/reference/go/faq#modules
- pkg: github.com/satori/go.uuid
desc: Use github.com/google/uuid instead, satori's package is not maintained
- pkg: github.com/gofrs/uuid$
desc: Use github.com/gofrs/uuid/v5 or later, it was not a go module before v5
"non-test files":
files:
- "!$test"
deny:
- pkg: math/rand$
desc: Use math/rand/v2 instead, see https://go.dev/blog/randv2
"non-main files":
files:
- "!**/main.go"
deny:
- pkg: log$
desc: Use log/slog instead, see https://go.dev/blog/slog
errcheck:
# Сообщение об отсутствии проверки ошибок в утверждениях типов: `a := b.(MyStruct)`.
# По умолчанию о таких случаях не сообщается.
# Default: false
check-type-assertions: true
exhaustive:
# Элементы программы для проверки на полноту.
# Default: [ switch ]
check:
- switch
- map
exhaustruct:
# Список регулярных выражений для исключения пакетов структур и их имен из проверок.
# Регулярные выражения должны соответствовать полному каноническому пакету/имени структуры/имени структуры.
# Default: []
exclude:
# std libs
- ^net/http.Client$
- ^net/http.Cookie$
- ^net/http.Request$
- ^net/http.Response$
- ^net/http.Server$
- ^net/http.Transport$
- ^net/url.URL$
- ^os/exec.Cmd$
- ^reflect.StructField$
# public libs
- ^github.com/Shopify/sarama.Config$
- ^github.com/Shopify/sarama.ProducerMessage$
- ^github.com/mitchellh/mapstructure.DecoderConfig$
- ^github.com/prometheus/client_golang/.+Opts$
- ^github.com/spf13/cobra.Command$
- ^github.com/spf13/cobra.CompletionOptions$
- ^github.com/stretchr/testify/mock.Mock$
- ^github.com/testcontainers/testcontainers-go.+Request$
- ^github.com/testcontainers/testcontainers-go.FromDockerfile$
- ^golang.org/x/tools/go/analysis.Analyzer$
- ^google.golang.org/protobuf/.+Options$
- ^gopkg.in/yaml.v3.Node$
funcorder:
# Проверяет, размещены ли экспортированные методы структуры перед неэкспортированными.
# Default: true
struct-method: false
funlen:
# Проверяет количество строк в функции.
# Если меньше 0, отключаем проверку.
# Default: 60
lines: 100
# Проверяет количество операторов в функции.
# Если меньше 0, отключаем проверку.
# Default: 40
statements: 50
gochecksumtype:
# Наличие регистра `default` в операторах switch удовлетворяет требованию полноты, если не перечислены все элементы.
# Default: true
default-signifies-exhaustive: false
gocognit:
# Минимальная сложность кода для отчета.
# Default: 30 (Рекомендуется 10-20)
min-complexity: 20
gocritic:
# Настройки, передаваемые gocritic.
# Ключ настроек - это имя поддерживаемой проверки gocritic.
# Список поддерживаемых программ проверки можно найти по адресу: https://go-critic.com/overview.
settings:
captLocal:
# Ограничивать ли проверку только параметрами.
# Default: true
paramsOnly: false
underef:
# Пропускать ли вызовы (*x).method(), где x — это получатель указателя.
# Default: true
skipRecvDeref: false
gomoddirectives:
# Разрешенные replaces необходимые для подключения сервиса как unit aakore.
replace-allow-list:
- git.acronis.com/ab/go-app-dir
- git.acronis.com/ab/go-service
- git.acronis.com/agents/aakore-support/go/akk
- git.acronis.com/tp/go-jwtopenssl
- git.acronis.com/tp/go-openssl
govet:
# Включить все анализаторы.
# Default: false
enable-all: true
# Отключить анализаторы по имени.
# Запустите `GL_DEBUG=govet golangci-lint run --enable=govet`, чтобы увидеть анализаторы по умолчанию, все доступные анализаторы и включенные анализаторы.
# Default: []
disable:
- fieldalignment # Слишком строго.
# Настройки для каждого анализатора.
settings:
shadow:
# Стоит ли быть строгим в отношении затенения, может быть шумно.
# Default: false
strict: true
inamedparam:
# Пропускает проверку методов интерфейса с единственным параметром.
# Default: false
skip-single-param: true
mnd:
# Список шаблонов функций, которые нужно исключить из анализа.
# Значения всегда игнорируются: `time.Date`,
# `strconv.FormatInt`, `strconv.FormatUint`, `strconv.FormatFloat`,
# `strconv.ParseInt`, `strconv.ParseUint`, `strconv.ParseFloat`.
# Default: []
ignored-functions:
- args.Error
- flag.Arg
- flag.Duration.*
- flag.Float.*
- flag.Int.*
- flag.Uint.*
- os.Chmod
- os.Mkdir.*
- os.OpenFile
- os.WriteFile
- prometheus.ExponentialBuckets.*
- prometheus.LinearBuckets
nakedret:
# Возникнет проблема, если func содержит больше строк кода, чем эта настройка, и имеет голые возвраты.
# Default: 30
max-func-lines: 0
nolintlint:
# Исключить следующие линтеры, требующие пояснения.
# Default: []
allow-no-explanation: [ funlen, gocognit, golines ]
# Необходимо включить если надо требовать пояснение ненулевой длины после каждой директивы nolint.
# Default: false
require-explanation: true
# Необходимо включить если надо, чтобы директивы nolint обязательно упоминали конкретный подавляемый линтер.
# Default: false
require-specific: true
perfsprint:
# Оптимизирует конкатенацию строк.
# Default: true
strconcat: false
reassign:
# Шаблоны для имен глобальных переменных, проверяемых на переназначение.
# Более подробно: https://github.com/curioswitch/go-reassign#usage
# Default: ["EOF", "Err.*"]
patterns:
- ".*"
rowserrcheck:
# database/sql всегда проверяется.
# Default: []
packages:
- github.com/jmoiron/sqlx
sloglint:
# Запретить использование глобальных регистраторов.
# Значения:
# - «»: отключено
# - «all»: сообщать обо всех глобальных логгерах.
# - «default»: сообщать только о стандартном логгере.
# https://github.com/go-simpler/sloglint?tab=readme-ov-file#no-global
# Default: «»
no-global: all
# Усиление использования методов, принимающих контекст.
# Значения:
# - «»: отключено.
# - «all»: сообщать обо всех вызовах без контекста.
# - «scope»: сообщать, только если контекст существует в области видимости самой внешней функции.
# Более подробно: https://github.com/go-simpler/sloglint?tab=readme-ov-file#context-only
# Default: «»
context: scope
staticcheck:
# Проверки SAxxxx в https://staticcheck.dev/docs/configuration/options/#checks
# Пример (для отключения некоторых проверок): [«all», «-SA1000», «-SA1001»]
# Default: [«all», «-ST1000», «-ST1003», «-ST1016», «-ST1020», «-ST1021», «-ST1022»]
checks:
- all
# Неверный или отсутствующий комментарий к пакету.
# Более подробно: https://staticcheck.dev/docs/checks/#ST1000
- -ST1000
# Используйте согласованные имена приемников методов.
# Более подробно: https://staticcheck.dev/docs/checks/#ST1016
- -ST1016
# Опускать встроенные поля из выражения селектора.
# Более подробно: https://staticcheck.dev/docs/checks/#QF1008
- -QF1008
usetesting:
# Включение/выключение обнаружения `os.TempDir()`.
# Default: false
os-temp-dir: true
exclusions:
# Выводите предупреждение, если правило исключения не используется.
# Default: false
warn-unused: true
# Предопределенные правила исключения.
# Default: []
presets:
- std-error-handling
- common-false-positives
# Исключение конфигураций per-path, per-linter, per-text и per-source.
rules:
- source: 'TODO'
linters: [ godot ]
- text: 'Должен иметь комментарий к пакету.'
linters: [ revive ]
- text: 'Экспортированные \S+ \S+ должны иметь комментарий( \(или комментарий к этому блоку\))? или быть неэкспортированными.'
linters: [ revive ]
- text: 'Комментарий пакета должен иметь вид «.+».'
source: '// ?(nolint|TODO)'
linters: [ revive ]
- text: 'Комментарий к экспортируемым \S+ \S+ должен иметь вид «.+».'
source: '// ?(nolint|TODO)'
linters: [ revive, staticcheck ]
- path: '_test\.go'
linters:
- bodyclose
- dupl
- errcheck
- funlen
- goconst
- gosec
- noctx
- wrapcheck
paths-except:golangci.yml
- api/openapi