Lint

我們使用 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_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 靜態分析工具可以 即可找出錯誤詳情請參閱「靜態分析」一文。