clang-tidy дубликаты ошибок при вызове CMake - PullRequest
2 голосов
/ 24 апреля 2019

У меня проблема с clang-tidy.По сути, он анализирует каждый из моих файлов проекта, но для заголовков, включенных в более чем один .cpp файл, он печатает избыточные ошибки.

Проблема в том, что Visual Studio Code имеет вкладку PROBLEMS, который выбирает каждый из них, поэтому для файла definitions.hpp, который включен в 3 отдельных файла .cpp, я получаю что-то вроде этого:

enter image description here

Вывод на консоль:

[build] [3/4  25% :: 14.699] Building CXX object CMakeFiles\solver.dir\src\definitions.cpp.obj
[build] [...]\build\..\src/definitions.hpp:1:9: warning: header guard does not follow preferred style [llvm-header-guard]
[build] #ifndef DEFINITIONS_HPP
[build]         ^~~~~~~~~~~~~~~
[...]
[build] [3/4  50% :: 16.138] Building CXX object CMakeFiles\solver.dir\src\genetic_algorithm.cpp.obj
[build] [...]\build\..\src/definitions.hpp:1:9: warning: header guard does not follow preferred style [llvm-header-guard]
[build] #ifndef DEFINITIONS_HPP
[build]         ^~~~~~~~~~~~~~~
[...]
[build] [3/4  75% :: 17.362] Building CXX object CMakeFiles\solver.dir\src\main.cpp.obj
[build] [...]\build\..\src/definitions.hpp:1:9: warning: header guard does not follow preferred style [llvm-header-guard]
[build] #ifndef DEFINITIONS_HPP
[build]         ^~~~~~~~~~~~~~~

Итак, есть ли способ предотвратить что-то подобное?Я имею в виду, что мой список ошибок удваивается в три разамой .clang-tidy файл:

---
Checks:          '*'
HeaderFilterRegex: '.*'
AnalyzeTemporaryDtors: false
FormatStyle:     none
...

1 Ответ

1 голос
/ 24 апреля 2019

Вероятно, это проблема того, как Visual Studio Code реализует свою поддержку clang-tidy.

Сам Clang-tidy предоставляет run-clang-tidy.py файл сценария, который запускает clang-подключить все файлы в базе данных компиляции.Он также предотвращает многократное применение исправлений в одних и тех же местах кода.

Возможны следующие варианты:

  • Исправить код, чтобы предупреждения не выдавались
  • Использовать //NOLINT или //NOLINTNEXTLINE для подавления этих предупреждений

РЕДАКТИРОВАТЬ: После обсуждения это выглядит для меня как проблема того, как cmag-tidy вызывается cmake - он запускается отдельно для каждой цели и clang-Tidy не может знать, что сообщала об ошибке раньше.Вы должны использовать только CMake для генерации compile_commands.json, а затем запустить clang-tidy через run-clang-tidy.py .

Эта статья , кажется, подтверждает мое подозрениео clang-tidy интеграции с CMake.

...