变得铿锵有力地修复头文件

nis*_*tjr 11 c++ automated-refactoring llvm-clang clang++ clang-tidy

我正在将当前使用gcc编译的项目移动到clang,并且有一堆gcc没有生成的警告(-Winconsistent-missing-override).clang-tidy用于修复*.cpp文件中的这些错误,但它不会触及hpp文件,因为在数据库中找不到编译命令(正如我所料).

我正在使用ninja构建项目并ninja -t compdb cc cxx > .build/compile_commands.json生成编译数据库.我试过跑:

clang-tidy-3.6 -p .build/      \
      $(find src/ -name *.cpp) \
      $(find src/ -name *.hpp) \
      --checks=misc-use-override --fix
Run Code Online (Sandbox Code Playgroud)

修复错误.它拒绝触摸头文件抱怨:

Skipping .../src/header/file.hpp. Compile command not found.
Run Code Online (Sandbox Code Playgroud)

nis*_*tjr 10

我通过指定--header-filter=src/选项让它工作.有趣的是,修复程序最终被多次应用,导致输出如下:

void f() override override override override override;
Run Code Online (Sandbox Code Playgroud)

我通过分别运行clang-tidy每个源文件解决了这个问题.另请注意,<build-path>指定的with -p还必须包含.clang-format要应用的样式的配置.

这是我当前的命令迭代:

find src/ -name '*.cpp' -exec \
     clang-tidy-3.6 -p . --header-filter=src/ {}
               --checks=misc-use-override --fix
Run Code Online (Sandbox Code Playgroud)

  • 关于"修复最终被多次应用":这就是为什么有一个run-clang-tidy脚本,它首先收集修复,然后在一次性*之后应用它们*.见http://clang-developers.42468.n3.nabble.com/Clang-tidy-applying-fixes-multiple-times-on-same-file-tp4048842p4049156.html (4认同)