我們使用 clang-tidy 來檢查 C++ 程式碼,並致力確保存放區的警告無害。
Linter 是在根層級 .clang-tidy
檔案中設定。開發人員
且不應在較低層級建立額外的設定檔,
這會導致樹狀圖中的結果不一致。
如何檢查程式碼
fx lint
是 Fuchsia 指令碼,可將特定語言專屬的 Linter 所組成
指令列介面根據您使用的選項,
會透過比對 Linter 來指定、分隔,並執行每個必要的 Linter。
clang-tidy
適用於 C 和 C++ 檔案。
未使用任何其他引數時,fx lint
會將檔案檢查
最新的 Git 修訂版本,並透過 Linter 傳遞:
fx lint
如要將程式碼檢查限制為 C++,請在前面加上雙破折號 (--),並在後面加上 要比對的檔案模式,例如:
fx lint -- '*.cc' '*.cpp'
如要透過 Linter 執行特定 GN 目標,請使用:
fx lint --target=<target>
如要檢查目前工作目錄下的所有檔案,請新增 --all
。
從頂層 fuchsia
目錄執行 fx lint --all
通常不會
可能需要數小時才能完成確定自己
將 cd
至最佳頂層目錄,以滿足您的分析需求。例如:
(cd <your/subdir>; fx lint --all -- '*.cc')
您也可以新增 --fix
,讓系統自動為部分應用程式產生修正項目 (但
而非全部)。
工具本身中會記錄其他選項和範例。最充飽
此為 fx lint
至今的說明文件 (包括範例),請執行:
fx lint --help
隱藏警告
如要隱藏任何警告,請新增 // NOLINT(<check_name>)
或
// NOLINTNEXTLINE(<check_name>)
註解傳送至違規行。這個
您可以編輯存放區中的
根層級 .clang-tidy
檔案。
支票
有許多檢查類別已啟用,且會在當中進行具體檢查 已停用,原因如下。已啟用的檢查類別清單 如下:
bugprone-*
clang-diagnostic-*
google-*
misc-*
modernize-
performance-*
readability-*
以下列出我們在特定的檢查中停用的原因:
clang-diagnostic-unused-command-line-argument
- Ninja 產生的編譯作業 資料庫內含連接器引數,這些引數最終表示未使用和觸發 每個檔案都顯示這則警告misc-noexcept*
- Fuchsia 不會使用 C++ 例外狀況misc-non-private-member-variables-in-classes
- 不允許使用類別/結構 混合使用私人與公開的會員,但所有公開成員都沒有問題。modernize-deprecated-headers
- Fuchsia 使用舊式 C 標頭modernize-use-nodiscard
- 通常用於 Fuchsia 程式碼集modernize-raw-string-literal
- 這項檢查建議轉換\xFF
我們想要保留在逸出形式中的常值。modernize-return-braced-init-list
- 傳回資料的可讀性相關問題 做為建構函式引數的混和初始化清單,最好使用 建構函式建立而成modernize-use-emplace
- 啟用 IgnoreImplicit 建構函式選項 務必遵守第 112 週的腹部提示。modernize-use-equals-delete
- 標記所有 Gtest TEST_Fmodernize-use-trailing-return-type
- Fuchsia C++ 程式碼通常會使用 定義函式的int foo()
樣式,而非auto foo() -> int
使用符合這項檢查建議的樣式readability-implicit-bool-conversion
- Fuchsia C++ 程式碼經常使用隱含 指標和數字的布林值流值readability-isolate-declaration
- Zircon 程式碼通常會使用配對宣告。readability-uppercase-literal-suffix
- Fuchsia C++ 程式碼選擇不強制規定 會比較不同的樣式
靜態分析
嚴格來說,這並不是程式碼檢查,但 Clang 靜態分析工具可以 即可找出錯誤詳情請參閱「靜態分析」一文。