Clang-Tidy `NOLINT` для нескольких строк?

Я работаю над проектом C ++, в котором есть несколько больших автоматически сгенерированных участков кода, и я не хочу, чтобы на него распространялись. Есть ли что-то похожее на комментарий //NOLINT, которое можно применить к нескольким строкам? Как следующее:

// BEGINNOLINT
bad-code;
// ENDNOLINT

Все, что я смог найти в Интернете, - это предложение о том, чтобы это было реализовано. Есть ли способ избежать написания // NOLINT в конце каждой строки?


person user3002473    schedule 14.03.2019    source источник


Ответы (2)


К сожалению, прямого способа сделать это нет, clang-tidy поддерживает только //NOLINT и //NOLINTNEXTLINE.

Я не знаю, насколько вы контролируете эту генерацию кода ... вы можете сгенерировать его в одной строке, что может вам очень помочь, поскольку C ++ не заботится о пробелах.

Грубое, но эффективное решение - использовать инструмент для работы с текстом, например sed:

$ sed -i -re '/^\/\/BEGIN_NOLINT/,/^\/\/END_NOLINT/{s/$/\/\/NOLINT/}' *.cpp

Это добавило бы //NOLINT в конце каждой строки между комментариями //BEGIN_NOLINT и //END_NOLINT (которые, вероятно, могут быть созданы).

Вы также можете запустить clang-tidy с параметром

-line-filter='[{"name":"test.cpp","lines":[[1,10],[12,100]]}]'

Строка 11 в этом примере будет пропущена. Однако это сложно поддерживать, поскольку вам нужно обновлять фильтр каждый раз, когда вы добавляете / удаляете строки в файле. Может быть, было бы неплохо сгенерировать код в отдельные файлы, если это возможно.

person pablo285    schedule 20.03.2019

Я уверен, что когда я применяю //NOLINTNEXTLINE на MACRO, весь MARCO пропускается. Поэтому попробуйте реализовать //NOLINTNEXTLINE в своем классе или функции

person Alexandr Zinchenko    schedule 25.05.2021