Удобное исправление файлов заголовков

Я занимаюсь перемещением проекта, который в настоящее время компилируется с помощью gcc, в clang и получаю несколько предупреждений о том, что gcc не сгенерировал (-Winconsistent-missing-override). clang-tidy работает для исправления этих ошибок в *.cpp файлах, но не затрагивает hpp файлы, потому что команда компиляции не была найдена в базе данных (как я и ожидал).

Я использую ninja для создания проекта и ninja -t compdb cc cxx > .build/compile_commands.json для создания базы данных компиляции. Я пробовал запустить:

clang-tidy-3.6 -p .build/      \
      $(find src/ -name *.cpp) \
      $(find src/ -name *.hpp) \
      --checks=misc-use-override --fix

исправить ошибки. Он отказывается трогать файлы заголовков, жалуясь:

Skipping .../src/header/file.hpp. Compile command not found.

person nishantjr    schedule 08.02.2016    source источник


Ответы (3)


Я заставил его работать, указав параметр --header-filter=src/. Интересно, что исправления применялись несколько раз, что приводило к следующему выводу:

void f() override override override override override;

Я решил эту проблему, запустив clang-tidy для каждого исходного файла отдельно. Также обратите внимание, что <build-path>, указанный с помощью -p, также должен содержать .clang-format конфигурацию для применения стиля.

Это моя текущая итерация команды:

find src/ -name '*.cpp' -exec \
     clang-tidy-3.6 -p . --header-filter=src/ {}
               --checks=misc-use-override --fix
person nishantjr    schedule 14.02.2016
comment
Что касается исправлений, которые в конечном итоге применялись несколько раз: вот почему есть сценарий run-clang-tidy, который сначала собирает исправления, а затем применяет их за один раз потом. См. clang-developers.42468.n3.nabble.com/ - person kfunk; 31.07.2017
comment
Понятно. Однако не очень хорошо задокументирован. Если вы напишете это как ответ или предложенное изменение, я буду более чем счастлив принять его. (Я перестал заниматься разработкой на C ++, поэтому, вероятно, не буду его тестировать) - person nishantjr; 05.08.2017
comment
Использование run-clang-tidy.py не решает эту проблему. Он по-прежнему будет обрабатывать файлы заголовков и применять исправления один раз для каждой единицы компиляции, в которую включен файл заголовка. Единственный обходной путь - запустить clang-tidy -fix для каждой единицы компиляции последовательно, как предлагает этот ответ, поэтому он никогда не видит незафиксированный файл заголовка больше чем единожды. - person Jesse; 01.10.2020

Будьте осторожны при правильном использовании "-header-filter". Перед заголовком нет двух знаков «минус»! В отличие от ответа nishantjr.

Как показано здесь: http://releases.llvm.org/3.9.0/tools/clang/tools/extra/docs/clang-tidy/index.html

Это все еще верно в clang-tidy 9.0.

person fpiat    schedule 05.03.2019
comment
Не все ли равно, если вы используете два символа минус вместо одного? Обычно не имеет значения, используете ли вы одно или два с большинством приложений. - person tjwrona1992; 18.12.2020

Ошибка в скрипте run-clang-tidy.py. Он неправильно объединяет исправления, потому что путь к файлу не нормализован до уникального пути. Попробуйте эту исправленную версию, которая использует pathlib для правильной нормализации пути в Linux, Windows и Mac ...

https://github.com/dyollb/modernize_cpp/blob/main/clang_tidy/run-clang-tidy.py

person dyoll    schedule 17.05.2021