Последнее обновление
Статический анализ кода C++
Apache Doris поддерживает статический анализ кода C++ с помощью Clangd и Clang-Tidy. Оба инструмента входят в состав LDB-toolchain; их также можно установить или собрать самостоятельно.
Сравнение инструментов
| Инструмент | Назначение | Файл конфигурации |
|---|---|---|
| Clangd | Предоставляет функции IDE: навигацию по коду, автодополнение и всплывающие подсказки | Задаётся через clangd.arguments |
| Clang-Tidy | Статический анализ и проверка качества кода (может вызываться из Clangd) | .clang-tidy в корневом каталоге Doris |
По сравнению с vscode-cpptools, Clangd обеспечивает более точную навигацию по коду и интегрирует функции диагностики и быстрого исправления Clang-Tidy.
Настройка Clang-Tidy
Правила проверок Clang-Tidy собраны в файле .clang-tidy в корневом каталоге Doris. Редактируя этот файл, можно включать и отключать отдельные проверки.
Настройка Clangd в VSCode
Порядок действий
- Установите плагин
clangd. - Перед использованием один раз скомпилируйте
be(RELEASE)иbe-ut(ASAN), чтобы создать соответствующие файлыcompile_commands.json. - Отредактируйте
settings.jsonили измените конфигурацию плагина непосредственно в разделе «Настройки».
Пример конфигурации
{
"clangd.path": "ldb_toolchain/bin/clangd",
"clangd.arguments": [
"--background-index",
"--clang-tidy",
"--compile-commands-dir=doris/be/build_Release/",
"--completion-style=detailed",
"-j=5",
"--all-scopes-completion",
"--pch-storage=memory",
"--pretty",
"--query-driver=ldb_toolchain/bin/*"
],
"clangd.trace": "output/clangd-server.log"
}
Основные параметры
| Параметр | Описание |
|---|---|
clangd.path | Путь к исполняемому файлу Clangd |
--background-index | Индексирует весь проект в фоновом режиме, чтобы ускорить поиск символов |
--clang-tidy | Включает статические проверки Clang-Tidy |
--compile-commands-dir | Указывает каталог, содержащий compile_commands.json |
--completion-style=detailed | Показывает подробную информацию при автодополнении |
-j=5 | Количество параллельных задач, которые Clangd использует для анализа файлов |
--query-driver | Путь к компилятору, используемый для поиска системных заголовочных файлов |
Часто задаваемые вопросы
Вопрос: что делать, если clangd сообщает об отсутствующем заголовочном файле или символе?
Убедитесь, что BE был скомпилирован хотя бы один раз для создания compile_commands.json и что --compile-commands-dir указывает на правильный каталог.