Files
tgVideoCall/golangci.yml
2026-04-05 18:09:28 +03:00

446 lines
32 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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