【问题标题】:Getting clang-tidy to fix header files让 clang-tidy 修复头文件
【发布时间】:2016-05-17 15:45:35
【问题描述】:

我正在将当前使用 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.

【问题讨论】:

    标签: c++ clang++ llvm-clang automated-refactoring clang-tidy


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      在 clang-tidy 9.0 中仍然如此。

      【讨论】:

      • 是否真的在乎你是否使用两个“减号”字符而不是一个?通常,在大多数应用程序中使用一个还是两个并不重要。
      【解决方案3】:

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

      void f() override override override override override;
      

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

      这是我当前的命令迭代:

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

      【讨论】:

      • 关于“修复被多次应用”:这就是为什么有一个 run-clang-tidy 脚本首先收集修复然后一次性应用它们之后。见clang-developers.42468.n3.nabble.com/…
      • 我明白了。虽然没有很好的记录。如果您将其写为答案或建议的编辑,我将非常乐意接受。 (我已经停止做很多 c++ 开发,所以我可能不会测试它)
      • 使用 run-clang-tidy.py 并不能解决这个问题。它仍将处理头文件并为包含头文件的每个编译单元应用一次修复。唯一的解决方法是按此答案建议的顺序在每个编译单元上运行 clang-tidy -fix ,因此它永远不会看到未修复的头文件不止一次。
      猜你喜欢
      • 2020-02-16
      • 2017-01-20
      • 2018-03-20
      • 2018-12-21
      • 2021-09-04
      • 2021-06-19
      • 2019-10-01
      • 1970-01-01
      • 2018-10-25
      相关资源
      最近更新 更多