Встроенный способ отключить проверки clang-tidy

Я пытаюсь настроить clang-tidy для проекта. Я хотел бы иметь возможность получать чистый вывод и поощрять использование режима -fix там, где это возможно. Однако есть отдельные случаи, когда необходимо исключение.

Насколько можно использовать

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wreserved-id-macro"
// Code that is being specially exempted
#pragma clang diagnostic pop

для эквивалентного случая, когда кто-то хочет локально отключить предупреждение компилятора, можно ли сделать что-то подобное из clang-tidy?

я пытался

#pragma clang diagnostic push
#pragma clang diagnostic ignored "readability-identifier-naming"
// Code that is being specially exempted
#pragma clang diagnostic pop

а также с заменой clang на clang-tidy. К сожалению, при использовании clang в качестве цели прагмы и компиляции с обычным clang я получаю предупреждение компиляции

warning: pragma diagnostic expected option name (e.g. "-Wundef") [-Wunknown-pragmas]

и

warning: unknown pragma ignored [clang-diagnostic-unknown-pragmas]

при компиляции, если я использую clang-tidy вместо clang. Также не влияет на то, что clang-tidy выводит при наведении на источник.

Это с clang и clang-tidy 3.8 в x86_64 Linux.


person Rich L    schedule 21.06.2016    source источник


Ответы (1)


Просто добавьте комментарий, содержащий строку NOLINT, в любом месте строки, которую clang-tidy игнорирует. Например:

badcode;  // NOLINT

// NOLINTNEXTLINE
badcode;

badcode; // NOLINT(cert-err-58-cpp)

См. Документацию здесь.

person Niall Douglas    schedule 30.10.2016
comment
И действительно, похоже, что отказ от конкретных проверок (вставив их в круглые скобки) после // NOLINT теперь является функцией, которая была добавлена ​​где-то в декабре 2017 года. - person Rich L; 04.09.2018
comment
Чтобы предоставить пример хорошей подсказки @ RichL: badcode; // NOLINT(cert-err58-cpp). Это отключит только предупреждение cert-err58-cpp и только для этой единственной строки (например, cert-err111-cpp все еще может быть выдан). Убедитесь, что между NOLINT и (. - person Semjon Mössinger; 22.10.2018