Reputation: 81
I have a macro which instantiates a global variable. And thus clang-tidy will correctly issue an "Initialization of ... with static storage duration may throw an exception which cannot be caught".
Can I disable this warning on a per-macro basis? Preferable inline where the macro is defined.
That is, let's say I have:
// header.h
#define UGLY_MACRO(X) SomeClass X(#X)
// source.cpp
UGLY_MACRO(SomeName); // clang-tidy complains here
And I want clang-tidy to stop complaining about this.
I want to be as specific as possible. I only want to turn of this warning for this macro. I do not want to turn of the warning globally, then someone might add more of this kind of macros into the code unnoticed. Also, I don’t want to add something (like a //NOLNT(...)) at every place where the macro is used, that would be too much of a hassle.
Or am I approaching this from the wrong direction? I have worked with pc-lint before, where this is possible.
Upvotes: 8
Views: 7032
Reputation: 2663
As far as I know this is not possible. The check in question (cert-err58-cpp) doesn't have configurable options which means it can't be disabled on a per-macro basis, only globally.
Save for modifying the check's source the only option you have here is // NOLINT(cert-err58-cpp)
and // NOLINTNEXTLINE(cert-err58-cpp)
. The latter is a little easier to use for text search and replace as you only need to catch a newline followed by the macro name.
Upvotes: 2
Reputation: 2531
I have the same problem. I have found two ways to do this, none of which are perfect, sadly.
Option 1 by using the --line-filter
command-line argument for clang-tidy
:
clang-tidy --line-filter='["name":"header.h"]' source.cpp
Notes:
--filter-regex
, this works even for macro expansion.header.h
you want to disable the warnings for (see the help text for --line-filter
)Option 2 by wrapping the macro:
#define UGLY_MACRO_NOLINT(...) UGLY_MACRO(__VA_ARGS__) //NOLINT(...)
Notes:
UGLY_MACRO
is multi-lineUpvotes: 6