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

时间:2016-02-08 03:15:17

标签: c++ clang++ llvm-clang automated-refactoring 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

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

Skipping .../src/header/file.hpp. Compile command not found.

3 个答案:

答案 0 :(得分:10)

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

void f() override override override override override;

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

这是我当前的命令迭代:

find src/ -name '*.cpp' -exec \
     clang-tidy-3.6 -p . --header-filter=src/ {}
               --checks=misc-use-override --fix

答案 1 :(得分:0)

正确使用“ -header-filter”时要小心。在“标题”之前没有两个“减号”字符!与nishantjr的回复不同。

如此处所示:http://releases.llvm.org/3.9.0/tools/clang/tools/extra/docs/clang-tidy/index.html

在clang-tidy 9.0中仍然如此。

答案 2 :(得分:-1)

run-clang-tidy.py 脚本中有一个错误。它没有正确合并修复程序,因为文件路径未规范化为唯一路径。 试试这个补丁版本,它使用 pathlib 在 linux、windows 和 macos 上正确地规范化路径...

https://github.com/dyollb/modernize_cpp/blob/main/clang_tidy/run-clang-tidy.py