Getting clang-tidy to fix header files
Solution 1
I got it working by specifying the --header-filter=src/
option.
Interestingly fixes ended up being applied several times causing output like this:
void f() override override override override override;
I worked around this by running clang-tidy
on each source file separately. Also note the <build-path>
specified with -p
must also contain the .clang-format
configuration for styling to be applied.
This is my current iteration of the command:
find src/ -name '*.cpp' -exec \
clang-tidy-3.6 -p . --header-filter=src/ {}
--checks=misc-use-override --fix
Solution 2
Be careful when using "-header-filter" correctly. There is no two "minus" characters before "header" ! Unlike in nishantjr reply.
As shown here : http://releases.llvm.org/3.9.0/tools/clang/tools/extra/docs/clang-tidy/index.html
This is still true in clang-tidy 9.0.
nishantjr
Updated on June 15, 2022Comments
-
nishantjr almost 2 years
I'm in the process of moving a project currently compiling with gcc to clang, and have a bunch of warnings that gcc didn't generate (
-Winconsistent-missing-override
).clang-tidy
works for fixing these errors in the*.cpp
files, however it doesn't touch thehpp
files because a compile command wasn't found in the database (as I would expect).I'm using
ninja
to build the project andninja -t compdb cc cxx > .build/compile_commands.json
to generate the compilation database. I've tried running:clang-tidy-3.6 -p .build/ \ $(find src/ -name *.cpp) \ $(find src/ -name *.hpp) \ --checks=misc-use-override --fix
to fix the errors. It refuses to touch header files complaining:
Skipping .../src/header/file.hpp. Compile command not found.
-
kfunk almost 7 yearsWith regards to the "fixes ended up being applied several times": That's why there's a run-clang-tidy script which first collects the fixes and then applies them in one-go afterwards. See clang-developers.42468.n3.nabble.com/…
-
nishantjr almost 7 yearsI see. Not very well documented though. If you write that up as an answer or a suggested edit, I'll be more than happy to accept it. (I've stopped doing much c++ development, so I probably won't test it though)
-
Jesse over 3 yearsUsing run-clang-tidy.py does not solve this problem. It will still process header files and apply fixes once for each compilation unit the header file is included in. The only workaround is to run clang-tidy -fix on each compilation unit sequentially as this answer suggests, so it never sees an unfixed header file more than once.
-
tjwrona1992 over 3 yearsDoes it really care if you use two "minus" characters instead of one? Usually it doesn't matter whether you use one or two with most applications.