Почему clang-tidy сканирует другие файлы заголовков?

Я использую clang-tidy для заголовочного файла header.h. Однако, как и некоторые предупреждения, выводятся системные заголовки:

.../include/c++/8/bits/std_abs.h:46:8: error: expected identifier or '(' [clang-diagnostic-error]
extern "C++"
../include/c++/8/cctype:62:1: error: unknown type name 'namespace' [clang-diagnostic-error]
namespace std
../include/c++/8/cctype:62:14: error: expected ';' after top level declarator [clang-diagnostic-error]
namespace std
..
etc

Проблема: я не хочу видеть предупреждения ни для чего, кроме сканируемого исходного файла, ни для исходного файла, ни для файла заголовка.

Я пробовал применить исправление здесь (Как правильно использовать фильтр заголовков для clang-tidy в Cmake?) с использованием --header-filter, но это не сработало. Я добавил путь к файлу заголовка, который сканировал в регулярном выражении, но все еще видел предупреждения системного заголовка.


person helloworld95    schedule 26.04.2021    source источник
comment
По моему опыту, clang-diagnostic-error не может быть отфильтрован самим clang, поскольку он исходит из бэкэнда clang.   -  person R2RT    schedule 27.04.2021
comment
@ R2RT Спасибо за ответ. Итак, вы подразумеваете, что это может быть проблема с пакетом правил, а не с файлом заголовков? Если эти clang-диагностические ошибки не могут быть отфильтрованы, то сканирование определенных файлов, на мой взгляд, будет практически бесполезным.   -  person helloworld95    schedule 27.04.2021
comment
Дело в том, что в вашем журнале есть ошибка компиляции. Это означает, что сканирование не выполняется вообще, потому что clang-tidy работает с AST, который не может быть сгенерирован из недопустимого кода. Таким образом, фильтрация такой ошибки только скрывает проблему включения файла, подверженного ошибкам. Кажется, вы включаете файл заголовка MSVC в режиме совместимости без mscv. Попробуйте решения от clang- developers.42468.n3.nabble.com/   -  person R2RT    schedule 27.04.2021


Ответы (1)


Чтобы clang-tidy работал, ваш код должен быть компилирован clang серверной частью для генерации AST. Очевидно, это не так, поскольку clang-diagnostic-error в основном является ошибкой компиляции.

Проблема в том, что вы включаете заголовки, которые не могут быть скомпилированы с помощью clang, нет способа отфильтровать это.

person pablo285    schedule 11.05.2021