預先提交檢查

凡是傳送到 Fuchsia 的變更清單,都會經過一系列的靜態分析檢查 預先提交。

檢查類型

語言 Linter

系統會自動為不同語言提供 Linter,並留下評論 Gerrit 的「Checks」分頁。

預先提交工具

有些預先提交的檢查工具為不用語言差異的檢查工具 變更清單品質的可信度更高。

不排序

「保持排序」是一種選擇啟用的 Linter,會強制將原始碼程式碼保存在 依字母順序排列只需將程式碼區塊包裝 keep-sorted startkeep-sorted end 則註解。

舉例來說,下列清單的元素必須位於 由預先提交的檢查所強制執行的字母順序:

a_list = [
    # keep-sorted start
    "bar",
    "baz",
    "foo",
    # keep-sorted end
]

保持排序功能適用於無語言隔閡,且支援「#」和「//」留言。

請參閱上游說明文件

經過排序也會由 fx format-code 強制執行。

IfThisThenThat

若這就是檢查,可用來確保與此工具共同變更的檔案 讓另一個應用程式保持同步當檔案變更時,系統會發出警告,表示 同一變更清單中的其他檔案也應該變更。理想情況下 產生這類程式碼時,可能會在需要 與設定檔保持同步

如果這會導致 warning,也不會封鎖變更清單提交作業。

範例

不同於其他獨立作業的預先提交檢查,IFTTT 檢查需要 手動實作。如要設定新的 IFTTT 檢查,請在 對以下位置的註解:// LINT.IfChange// LINT.ThenChange(<other_file_path>): 每個應一起更新的檔案

在以下範例中,我們為 test.gomain.rs。如果只有一個檔案變更,Gerrit 中會顯示警告。

test.go

import fmt

// LINT.IfChange

fmt.Println("When this block changes, so must main.rs")

// LINT.ThenChange(main.rs)

main.rs

// LINT.IfChange

println!("When this block changes, so must test.go");

// LINT.ThenChange(test.go)

請注意,如果是 Markdown 檔案,結構必須納入註解中, Markdown 會忽略語法。

<!--

// LINT.IfChange

-->

Block to be changed.

<!--

// LINT.ThenChange(test.go)

-->

如果 ThisNowThat 支援絕對檔案路徑 (以 / 開頭的檔案),且 相對路徑 (開頭不是 /)。

如果 LINT.IfChange/ThenChange 指令中的文字經過變更,系統也會一併變更 都必須對應至指向的其他檔案檔案必須一律具有 LINT 指令。單向指令 可能會失去另一個檔案的同步處理作業。

若違反 IfThisAfterThat 指令,會在 CL 留下註解:

如果這會變成一行註解

「Checks」分頁也會顯示警告:

如果這會顯示在「Checks」分頁中