深入研究Clang(十四) clang-tidy的使用

前文對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之中也有這個規則的一部分細分:

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章