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