|
| 1 | +version: "2" # Версия формата конфигурационного файла (v2 — для golangci-lint 2.x) |
| 2 | + |
| 3 | +run: # Параметры запуска линтера |
| 4 | + timeout: 5m # Максимальное время выполнения анализа |
| 5 | + relative-path-mode: gomod # Пути к файлам интерпретируются относительно корня go-модуля |
| 6 | + issues-exit-code: 1 # Код выхода = 1, если найдены ошибки (полезно для CI) |
| 7 | + tests: true # Анализировать также _test.go файлы |
| 8 | + modules-download-mode: readonly # Не разрешать загрузку зависимостей во время анализа (безопасно и быстрее на CI) |
| 9 | + |
| 10 | +output: # Настройки вывода результатов линтинга |
| 11 | + formats: |
| 12 | + text: # Формат вывода в терминал |
| 13 | + print-linter-name: true # Показывать имя линтера рядом с каждым сообщением |
| 14 | + print-issued-lines: true # Показывать строку кода, где найдена проблема |
| 15 | + colors: true # Использовать цветной вывод (для лучшей читаемости) |
| 16 | + |
| 17 | +issues: # Общие настройки для обработки проблем |
| 18 | + max-issues-per-linter: 0 # Без лимита на количество ошибок от одного линтера |
| 19 | + max-same-issues: 0 # Без лимита на количество одинаковых ошибок |
| 20 | + uniq-by-line: true # Отображать максимум одну ошибку на строку (избегает спама от разных линтеров по одной строке) |
| 21 | + |
| 22 | +linters: # Список активных и отключённых линтеров |
| 23 | + default: standard # Использовать стандартный набор линтеров golangci-lint |
| 24 | + enable: # Явно включенные дополнительные линтеры |
| 25 | + - errcheck # Проверяет, что ошибки не игнорируются |
| 26 | + - staticcheck # Глубокий статический анализ (includes gosimple, stylecheck) |
| 27 | + - govet # Встроенный в Go инструмент анализа (ловит потенциальные баги) |
| 28 | + - gocritic # Набор продвинутых правил для улучшения качества кода |
| 29 | + - revive # Проверяет стиль кода, оформление, названия |
| 30 | + - unused # Находит неиспользуемые переменные, типы, функции |
| 31 | + - gosec # Проверка на уязвимости и небезопасные практики |
| 32 | + - depguard # Запрещает импорт указанных пакетов (контроль зависимостей) |
| 33 | + - bodyclose # Проверяет, что закрывается `resp.Body` у HTTP-запросов |
| 34 | + - asciicheck # Предупреждает о не-ASCII символах в коде |
| 35 | + - cyclop # Контролирует цикломатическую сложность функций |
| 36 | + - dupl # Находит дублированные фрагменты кода |
| 37 | + - ineffassign # Обнаруживает неиспользуемые присваивания |
| 38 | + - unparam # Находит неиспользуемые параметры функций |
| 39 | + - errorlint # Рекомендует использовать `errors.Is` / `errors.As` вместо прямых сравнений |
| 40 | + - errname # Проверяет имена переменных/типов ошибок (должны содержать "Err") |
| 41 | + - forbidigo # Запрещает определённые вызовы или конструкции по regex-паттернам |
| 42 | + - contextcheck # Проверяет, что `context.Context` передаётся в методы/функции |
| 43 | + - containedctx # Предупреждает, если `context.Context` сохраняется в структуре (плохо) |
| 44 | + disable: # Линтеры, которые намеренно отключены |
| 45 | + - gocyclo # Старый линтер сложности (заменён на cyclop) |
| 46 | + - lll # Проверка длины строк (часто шумная и мешает) |
| 47 | + |
| 48 | + exclusions: # Исключения из анализа |
| 49 | + generated: strict # Игнорировать сгенерированные файлы (по "// Code generated ... DO NOT EDIT.") |
| 50 | + rules: # Локальные исключения по пути/файлу/линерам |
| 51 | + - path: _test\.go # Для всех тестов: |
| 52 | + linters: |
| 53 | + - cyclop # Не проверять сложность тестов |
| 54 | + - dupl # Не проверять дублирование в тестах |
| 55 | + - gosec # Не искать уязвимости в тестах |
| 56 | + |
| 57 | + settings: # Индивидуальные настройки для конкретных линтеров |
| 58 | + |
| 59 | + gosec: |
| 60 | + # Включаем все правила, включая экспериментальные |
| 61 | + config: |
| 62 | + global: |
| 63 | + audit: true # Активировать все правила безопасности |
| 64 | + show-ignored: true # Показывать проигнорированные проблемы в комментариях |
| 65 | + severity: "medium" # Минимальная важность проблем, high/medium/low |
| 66 | + confidence: "medium" # Минимальный уровень уверенности, high/medium/low |
| 67 | + |
| 68 | + cyclop: |
| 69 | + max-complexity: 20 # Допустимая сложность функции (больше 10, но не слишком жёстко) |
| 70 | + |
| 71 | + depguard: |
| 72 | + rules: |
| 73 | + main: |
| 74 | + deny: |
| 75 | + - pkg: io/ioutil # Запрет использовать устаревший пакет |
| 76 | + desc: "Использование устаревшего пакета io/ioutil запрещено (замените вызовы на аналоги из пакетов os/io)" |
| 77 | + |
| 78 | + revive: |
| 79 | + severity: warning # Нарушения revive будут как предупреждения, а не ошибки |
| 80 | + |
| 81 | + forbidigo: |
| 82 | + exclude-godoc-examples: true # Не применять запреты к Godoc-примерам |
| 83 | + analyze-types: true # Искать запреты и в типах/константах, а не только в функциях |
| 84 | + forbid: # Список запрещённых паттернов |
| 85 | + - pattern: '^fmt\.Print.*$' # Запрет использования fmt.Print*, fmt.Println и т.д. |
| 86 | + msg: "Запрещено напрямую использовать fmt.Print* для логирования (вместо этого используйте структурированный логгер)" |
| 87 | + - pattern: '^time\.Sleep$' # Запрет использования time.Sleep |
| 88 | + msg: "Запрещено использовать time.Sleep в продакшен-коде (используй таймеры/контекст)" |
| 89 | + - pattern: '^http\.DefaultClient$' # Запрет использования небезопасного http.DefaultClient |
| 90 | + msg: "Не используй http.DefaultClient (нет таймаутов); создай *http.Client с таймаутами" |
| 91 | + |
| 92 | +formatters: # Форматтеры кода (проверка стиля) |
| 93 | + enable: |
| 94 | + - gofumpt # Строгая версия gofmt с дополнительными правилами |
| 95 | + - gci # Форматтер импортов (гибкая альтернатива goimports) |
| 96 | + settings: |
| 97 | + gofumpt: |
| 98 | + extra-rules: true # Включить дополнительные строгие правила (например, удаление лишних пустых строк) |
| 99 | + gci: |
| 100 | + sections: # Порядок группировки импортов |
| 101 | + - Standard # Стандартная библиотека |
| 102 | + - Default # Сторонние зависимости |
| 103 | + - Prefix(github.com/qyrlabs/test-backend) # Локальные импорты проекта |
| 104 | + no-inline-comments: false # Разрешить комментарии после импортов (true — запретит) |
0 commit comments