預先提交檢查

所有傳送至 Fuchsia 的變更清單都會預先提交一系列靜態分析檢查。

檢查類型

語言 Linter

系統會自動針對多種語言執行 Linter,並在 Gerrit 的「Checks」分頁中留下註解。

預先提交工具

有些預先提交檢查是沒有語言隔閡的工具,但可以更信賴變更清單的品質。

已排序

「保留排序」是選擇啟用的 Linter,會強制讓原始碼行依字母順序保留。只要在 keep-sorted startkeep-sorted end 註解中納入程式碼區塊,即可啟用這項功能。

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

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

「Keep 排序」為各種語言通用,並支援「#」和「//」註解。

如需所有選項,請參閱上游說明文件

fx format-code 也會強制執行「維持排序」狀態。

IfThisItIt!

這就是可用來確保與另一個檔案共同變更的檔案保持同步的檢查。如果其中一個檔案變更,系統會發出警告,說明同個變更清單中的其他檔案應也變更。在理想情況下,不需要進行這類檢查,但可能會在需要與設定檔同步可執行的程式碼時出現。

如果這樣做會留下 warnings,且不會封鎖變更清單提交程序。

範例

與其他會獨立運作的預先提交檢查不同,IFTTT 檢查需要手動實作。如要設定新的 IFTTT 檢查,請在每個要一起更新的檔案中插入特殊註解 // LINT.IfChange// LINT.ThenChange(<other_file_path>)

在以下範例中,系統已針對 test.gomain.rs 實作 IFTTT 檢查。如果只有其中一個檔案變更,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)

-->

IfThisItIt 支援絕對檔案路徑 (開頭為 / 的路徑) 和相對路徑 (開頭不是 /)。

如果 LINT.IfChange/ThenChange 指令中的文字有所變動,因此也必須指向另一個檔案。檔案在彙整的每個檔案中都應具備 LINT 指令。單向指令可能表示其中一個檔案會失去彼此的同步處理。

如果違反 IfThisIt That 指令就違反於 CL,則系統會在 CL 留下註解:

如果這隨後顯示為線條註解

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

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