前文對clang-tidy進行了簡單的介紹,本文對clang-tidy使用中的一些點進行一下總結。
1、clang-tidy及其批量運行腳本run-clang-tidy.py在Clang/LLVM的預編譯發佈包中都有,但是位於不同的目錄。其中,clang-tidy位於:發佈包主目錄/bin目錄之下;run-clang-tidy.py位於:發佈包主目錄/shared/clang/目錄之下。
例如:
以clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04發佈包爲例,clang-tidy位於:clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04/bin/clang-tidy;run-clang-tidy.py位於:clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04/share/clang/run-clang-tidy.py。
2、run-clang-tidy.py與clang-tidy的運行,都依賴於compile_commands.json。同時,這兩者都可以通過“-checks=”來設定檢查規則。或者不使用“-checks=”選項,而在項目主目錄之下添加.clang-tidy文件,在裏面編寫項目的檢查規則,這種方式更加適合對整個項目進行定製化的規則編寫。.clang-tidy文件並不是必須放在主目錄之下,只是通常放在主目錄之下方便對整個項目進行檢查。
例如:
這是clang的主目錄下的.clang-tidy:
3、run-clang-tidy.py的運行,不但依賴於clang-tidy,同時也依賴於clang-apply-replacements。clang-apply-replacements和clang-tidy在同一個目錄。
run-clang-tidy.py開頭的註釋中,寫明瞭:” Runs clang-tidy over all files in a compilation database. Requires clang-tidy and clang-apply-replacements in $PATH.“
4、因爲run-clang-tidy.py在預編譯發佈包裏和clang-tidy、clang-apply-replacements不在同一個目錄,在運行時可以通過指定run-clang-tidy.py的“-clang-tidy-binary=”和“-clang-apply-replacements-binary=”兩個選項,來確定clang-tidy、clang-apply-replacements的路徑。
例如:
項目主目錄之下存在了.clang-tidy和compile_commands.json文件,同時預編譯發佈包clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04也在主目錄之下,那麼在主目錄之下運行如下命令可以對整個項目進行檢查:
./clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04/share/clang/run-clang-tidy.py -clang-tidy-binary='./clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04/bin/clang-tidy' -clang-apply-replacements-binary='./clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04/bin/clang-apply-replacements' ./
5、clang-tidy的檢查規則編寫的時候,規則名稱前面帶有“-”的是讓該規則失效,規則名稱直接寫的是要使用該規則。
例如:
clang的主目錄之下的.clang-tidy文件中的規則:
Checks: '-*,clang-diagnostic-*,llvm-*,misc-*,-misc-unused-parameters,-misc-non-private-member-variables-in-classes,-readability-identifier-naming'
這裏的“-*”就是要使目前所有的規則失效,“clang-diagnostic-*,llvm-*,misc-*”是要讓clang-diagnostic-、llvm-、misc-開頭的規則可用,“-misc-unused-parameters,-misc-non-private-member-variables-in-classes,-readability-identifier-naming”是讓這具體的三個規則失效。
6、clang-tidy的檢查清單的官方文檔位於:Extra Clang Tools 11 documentation。其中,有些規則是可以進一步對其子規則進行設置的。
例如:
規則readability-identifier-naming,就可以進一步細分。其細分文檔位於:clang-tidy - readability-identifier-naming。
clang的.clang-tidy之中也有這個規則的一部分細分: