Перейти к содержимому
Последнее обновление

Статический анализ кода 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​

Порядок действий​

  1. Установите плагин clangd.
  2. Перед использованием один раз скомпилируйте be(RELEASE) и be-ut(ASAN), чтобы создать соответствующие файлы compile_commands.json.
  3. Отредактируйте 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 указывает на правильный каталог.