I'm currently working on a university assignment where it is mandated that we use C-style arrays for our code. Infuriatingly, they have left the default setting for warning about C-style arrays, which means that every time I use a one I need to add a // NOLINTNEXTLINT(modernize-avoid-c-arrays)
, which is absolutely terrible in terms of readability.
I have tried silencing the errors using // NOLINTBEGIN(modernize-avoid-c-arrays)
, but since that was only introduced in clang-tidy-14
, it isn't supported by our course-mandated clang-tidy-11
.
As such, my only option for a clean way of silencing these errors is by modifying the configuration file. Unfortunately, I haven't found any information on how to silence errors of a particular type in the configuration file. In fact, I haven't found any documentation on the expected structure of the .clang-tidy
file at all, except for some example files, none of which appear to silence any errors.
How can I silence the modernize-avoid-c-arrays
error on a project-wide basis from my .clang-tidy
file?
CodePudding user response:
Disable a check
To disable a check in .clang-tidy
, add a Checks:
line, and as its
value put the name of the check, preceded by a hyphen (meaning to
disable rather than enable). For example, here is a complete
.clang-tidy
file that first enables all of the modernize-*
checks
(since they are not enabled by default), then disables
modernize-avoid-c-arrays
:
Checks: 'modernize-*,-modernize-avoid-c-arrays'
Documentation of .clang-tidy format
The .clang-tidy
format is (tersely!) specified in the
output of clang-tidy --help
:
--config-file=<string> -
Specify the path of .clang-tidy or custom config file:
e.g. --config-file=/some/path/myTidyConfigFile
This option internally works exactly the same way as
--config option after reading specified config file.
Use either --config-file or --config, not both.
However, the --config-file
option and its documentation are missing
in Clang LLVM-11, so that may be why you didn't find it. They are in
Clang LLVM-14 (I'm not sure which version introduced that option).
Nevertheless, Clang LLVM-11 responds to the presence of .clang-tidy
.
You can use the --dump-config
option to have clang-tidy
print its
current configuration in the .clang-tidy
syntax, then trim or edit as
desired.
Related:
github gist: A general clang-tidy configuration file
SO question: Clang Tidy config format
Complete example
Input source code:
// test.cpp
// Test input for clang-tidy.
void f()
{
int arr[3];
bool b = 1;
}
// EOF
Run using the above .clang-tidy
:
$ /home/scott/opt/clang llvm-11.0.1-x86_64-linux-gnu-ubuntu-16.04/bin/clang-tidy test.cpp --
1 warning generated.
/home/scott/wrk/learn/clang/clang-tidy-config/test.cpp:7:12: warning: converting integer literal to bool, use bool literal instead [modernize-use-bool-literals]
bool b = 1;
^
true
Without disabling modernize-avoid-c-arrays
, two warnings would be
printed. (And without enabling modernize-*
, nothing is printed.)