我們使用 clang-ddy 對 Lint C++ 程式碼,致力確保存放區顯示警告。Linter 是在根層級 .clang-tidy
檔案中設定。開發人員不應在較低層級建立其他設定檔,因為這會導致樹狀結構中的不一致。
如何 Lint
fx lint
是 Fuchsia 指令碼,可在常見的指令列介面中納入語言專屬的 Linter。此工具會根據您指定的選項收集檔案清單,並比對 Linter 來分隔檔案,然後執行每個必要的 Linter。clang-tidy
用於 C 和 C++ 檔案。
如果沒有任何其他引數,fx lint
會檢查最新 Git 修訂版本中的檔案,並透過 Linter 傳遞檔案:
fx lint
如要限制 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
- 啟用 IgnoreImplicitConstructors 選項,以便遵循「Abseil Tip of the Week #112」。modernize-use-equals-delete
- 正在標記所有 TEST_F 值modernize-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 靜態分析工具可以執行深度分析來找出錯誤。詳情請參閱「靜態分析」一文。