Перейти к содержанию

🛠️ РУКОВОДСТВО ПО CLANG TOOLS - JXCT Soil Sensor System

Версия системы: 3.10.0
Последнее обновление: 29.07.2025
Статус:ВСЕ ИНСТРУМЕНТЫ НАСТРОЕНЫ И РАБОТАЮТ


📋 ОБЗОР

Данное руководство содержит детальную информацию о настройке и использовании инструментов статического анализа Clang для проекта JXCT Soil Sensor.


НАСТРОЕННЫЕ И РАБОТАЮЩИЕ ИНСТРУМЕНТЫ

clang-tidy 20.1.0

  • Статус: Полностью настроен и работает
  • Конфигурация: Оптимизированная для ESP32
  • Покрытие: 32 файла проанализировано
  • Текущие проблемы: 169 предупреждений (план устранения готов)
  • Интеграция: scripts/run_clang_tidy_analysis.py

Конфигурационный файл: .clang-tidy

Checks: >
  bugprone-*,
  readability-*,
  modernize-*,
  misc-*,
  performance-*,
  -bugprone-easily-swappable-parameters

clang-format

  • Статус: Настроен и работает отлично
  • Конфигурация: Google стиль с ESP32 адаптацией
  • Покрытие: Все файлы отформатированы
  • Интеграция: scripts/format_all.ps1

Конфигурационный файл: .clang-format

BasedOnStyle: Google
IndentWidth: 4
ColumnLimit: 120
AllowShortFunctionsOnASingleLine: Empty

w64devkit GCC 15.1.0

  • Статус: Установлен и работает
  • Использование: Native тесты (3/3 PASSED)
  • Совместимость: Полная поддержка C++17
  • PATH: Настроен через скрипты

Расположение: C:\Program Files\w64devkit\bin

cppcheck

  • Статус: Интегрирован в PlatformIO
  • Конфигурация: [env:static-analysis]
  • Покрытие: Полный проект
  • Результаты: ~50 предупреждений в нашем коде, ~298 в библиотеках

🔧 ДОСТУПНЫЕ КОМАНДЫ

Основные команды анализа:

# Полный статический анализ clang-tidy
python scripts/run_clang_tidy_analysis.py

# Расширенный анализ PlatformIO (включает cppcheck)
pio check -e static-analysis

# Форматирование кода
python scripts/format_code.py

# Форматирование всех файлов (PowerShell)
.\scripts\format_all.ps1

# Проверка native компиляции
pio test -e native

Детальные команды:

# Анализ конкретного файла
clang-tidy src/main.cpp -- -Iinclude -DESP32

# Форматирование конкретного файла
clang-format -i src/main.cpp

# Проверка формата без изменений
clang-format --dry-run src/main.cpp

# Cppcheck с детальным выводом
cppcheck --enable=all --inconclusive --xml src/

📊 СРАВНЕНИЕ С РЕКОМЕНДАЦИЯМИ

Инструмент Рекомендуется Текущий статус Приоритет Примечания
clang-tidy ✅ v15+ ✅ v20.1.0 Критичен Основной инструмент анализа
clang-format ✅ Обязателен ✅ Работает Критичен Google стиль настроен
w64devkit GCC ✅ Для native ✅ v15.1.0 Высокий Для native тестов
cppcheck ✅ Дополнительно ✅ Интегрирован Средний Дополнительные проверки
clangd LSP ✅ Для IDE ⚠️ Требует настройки Средний Улучшит разработку
scan-build 🔄 Желательно ❌ Не настроен Низкий Для анализа утечек
include-what-you-use 🔄 Желательно ❌ Не настроен Низкий Оптимизация включений

🎯 ТЕКУЩИЕ ПРОБЛЕМЫ И ПЛАН УСТРАНЕНИЯ

Clang-tidy: 169 предупреждений

Критические (19 проблем) - Приоритет 1:

  • bugprone-easily-swappable-parameters: 16 случаев
  • bugprone-narrowing-conversions: 1 случай
  • bugprone-integer-division: 2 случая

Читаемость (74 проблемы) - Приоритет 2:

  • readability-convert-member-functions-to-static: 19 случаев
  • readability-identifier-length: 8 случаев
  • readability-else-after-return: 5 случаев
  • Остальные проблемы читаемости: 42 случая

Модернизация (38 проблем) - Приоритет 3:

  • modernize-use-nodiscard: 12 случаев
  • modernize-raw-string-literal: 11 случаев
  • modernize-return-braced-init-list: 8 случаев
  • Остальные проблемы модернизации: 7 случаев

Разное (38 проблем) - Приоритет 4:

  • misc-const-correctness: 20 случаев
  • misc-use-internal-linkage: 9 случаев
  • Остальные разные проблемы: 9 случаев

План устранения (5-7 дней):

  1. День 1-2: Критические исправления (19 проблем)
  2. День 3-4: Улучшение читаемости (74 проблемы)
  3. День 5: Модернизация и финальная очистка (76 проблем)

🚀 РЕКОМЕНДАЦИИ ПО УЛУЧШЕНИЮ

Краткосрочные (1-2 недели):

  1. Настроить clangd LSP для улучшения разработки в IDE
  2. Добавить автоматические проверки в pre-commit хуки
  3. Настроить CI/CD интеграцию для автоматического анализа

Среднесрочные (1-2 месяца):

  1. Добавить scan-build для детекции утечек памяти
  2. Интегрировать include-what-you-use для оптимизации зависимостей
  3. Настроить автоматическое форматирование в IDE

Долгосрочные (3+ месяца):

  1. Добавить custom clang-tidy checks для специфических правил проекта
  2. Интегрировать с SonarQube для расширенной аналитики
  3. Настроить автоматические исправления для простых проблем

📈 МЕТРИКИ И ЦЕЛЕВЫЕ ПОКАЗАТЕЛИ

Текущие показатели:

  • clang-tidy предупреждения: 169
  • Потенциальные баги: 19
  • Проблемы читаемости: 74
  • Проблемы модернизации: 38
  • Время анализа: ~2 минуты для полного проекта

Целевые показатели:

  • clang-tidy предупреждения: 0 (цель после рефакторинга)
  • Потенциальные баги: 0 (критично)
  • Время анализа: <90 секунд (оптимизация)
  • Покрытие анализа: 100% исходного кода

Критерии качества:

  • 0 критических предупреждений - обязательно
  • 0 потенциальных багов - обязательно
  • 🎯 <10 предупреждений читаемости - желательно
  • 🎯 Современный C++17 код - желательно

🔧 НАСТРОЙКА СРЕДЫ РАЗРАБОТКИ

VS Code настройка:

{
    "clangd.arguments": [
        "--compile-commands-dir=${workspaceFolder}",
        "--header-insertion=never",
        "--clang-tidy"
    ],
    "clangd.fallbackFlags": [
        "-I${workspaceFolder}/include",
        "-I${workspaceFolder}/.pio/libdeps/esp32dev",
        "-DESP32"
    ]
}

PowerShell Profile настройка:

# Добавить в PowerShell Profile
function Run-ClangTidy {
    python scripts/run_clang_tidy_analysis.py
}

function Format-Code {
    python scripts/format_code.py
}

Set-Alias -Name ct -Value Run-ClangTidy
Set-Alias -Name fmt -Value Format-Code

🐛 РЕШЕНИЕ ТИПИЧНЫХ ПРОБЛЕМ

Проблема: clang-tidy не находит заголовки ESP32

Решение:

# Убедитесь, что compile_commands.json актуален
pio run -e esp32dev -t compiledb

# Проверьте пути в .clang-tidy
cat .clang-tidy | grep HeaderFilterRegex

Проблема: Медленный анализ

Решение:

# Анализ только измененных файлов
git diff --name-only | grep -E '\.(cpp|h)$' | xargs clang-tidy

# Параллельный анализ
python scripts/run_clang_tidy_analysis.py --parallel

Проблема: Ложные срабатывания в библиотеках

Решение:

# В .clang-tidy добавить
HeaderFilterRegex: '^(?!.*\.pio/libdeps/).*'


📞 ПОДДЕРЖКА И КОНТАКТЫ

  • Ответственный: DevOps Team JXCT
  • Документация: Данное руководство + комментарии в скриптах
  • Обновления: При изменении версий инструментов
  • Последнее обновление: 29.07.2025

🎯 ЗАКЛЮЧЕНИЕ

Инструменты Clang полностью настроены и готовы к использованию. Основная задача - устранение 169 предупреждений clang-tidy в рамках запланированного рефакторинга.

Статус: ✅ Готовы к работе
Следующий шаг: Выполнение плана рефакторинга


Руководство создано в рамках консолидации документации проекта