Сценарий 09: Проверка кода

Сценарий 09: Проверка кода

Автоматическая проверка кода для запросов на слияние (PR/MR), изменений и локальных изменений.

Быстрый старт

# Выберите сценарий проверки кода
/select 09

Источники для проверки

Запрос на слияние в GitHub

/review github 123

Merge Request в GitLab

/review gitlab 456

Локальные изменения в Git

/review git

Файл изменений

/review file path/to/changes.patch

Понимание результатов проверки

╭─────────────── Результаты проверки ───────────────────────────╮
│                                                           │
│  Оценка: 72/100         Рекомендация: ТРЕБУЮТСЯ ИЗМЕНЕНИЯ  │
│                                                           │
│  Найденные проблемы:                                      │
│                                                           │
│  🔴 КРИТИЧЕСКИЙ  Риск SQL-инъекции                         │
│     Расположение: src/api/user_query.c:45                  │
│     Причина: Ввод пользователя вставляется напрямую в запрос│
│     Исправление: Используйте параметризованные запросы     │
│                                                           │
│  🟡 СРЕДНИЙ       Цикломатическая сложность                │
│     Расположение: src/parser/gram.y:1234                   │
│     Значение: 47 (порог: 10)                               │
│     Исправление: Вынесите вспомогательные функции          │
│                                                           │
│  🟢 НИЗКИЙ        Отсутствует проверка на NULL             │
│     Расположение: src/utils/string.c:89                    │
│     Исправление: Добавьте проверку указателя на NULL       │
│                                                           │
╰───────────────────────────────────────────────────────────╯

Проверка с встроенными комментариями

/review git --format md --inline

╭─────────────── Встроенные комментарии ────────────────────╮
                                                           
  src/api/user_query.c                                     
                                                           
  Строка 45:                                               
    sprintf(query, "SELECT * FROM users WHERE id=%s", id); 
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    🔴 SQL-инъекция: Используйте snprintf с экранированием 
                                                           
  Строка 67:                                               
    char *result = malloc(len);                            
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^                            
    🟡 Память: Проверяйте возвращаемое значение malloc на NULL
                                                           
╰───────────────────────────────────────────────────────────╯

Форматы вывода

Формат Описание Применение
–format md Markdown Документация, GitHub
–format json JSON Интеграция с CI/CD
–format yaml YAML Конфигурация

Параметры проверки

# Базовая проверка
/review git

# С указанием формата
/review git --format json

# С встроенными комментариями
/review git --inline

# Комбинированный вариант
/review github 123 --format md --inline

CPG-анализ при проверке кода

Сценарий проверки кода использует CPG (граф свойств кода) для автоматического анализа:

Оценка риска изменений

Каждый изменённый метод получает оценку риска (0.0–1.0) на основе 4 факторов:

Фактор Описание
Количество вызывающих Чем больше вызывающих, тем шире влияние
Сложность сигнатуры Количество параметров
Расположение в ядре Доменные плагины и базовые сервисы
Интерфейсный слой +0.15 если метод в CLI/API/TUI/MCP/ACP

Уровни: critical (≥0.8), high (≥0.6), medium (≥0.4), low (<0.4).

Обнаружение влияния на интерфейсы

При изменении файлов в интерфейсных слоях проверка кода определяет, какие интерфейсы затронуты:

Интерфейсные слои:
  CLI         src/cli/
  REST API    src/api/routers/
  TUI         src/tui/commands/
  MCP         src/mcp/tools/, src/mcp/
  ACP         src/acp/server/, src/acp/

Реальный анализ git diff

Обработчик PRImpactHandler извлекает изменённые файлы через git diff --name-only {base_ref} HEAD для точного анализа зоны поражения. Поддерживаемые расширения: .py, .go, .ts, .js, .c, .h, .java, .kt, .cs, .php.

Транзитивный анализ вызывающих

CallerAnalysis выполняет 2-hop транзитивный поиск: находит не только прямых вызывающих изменённых методов, но и вызывающих вызывающих – для оценки полной зоны поражения.

Связанные сценарии