預先提交檢查

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

檢查類型

語言檢查工具

系統會自動為各種語言執行 Lint,並在 Gerrit 的「檢查」分頁中留下註解。

預先提交工具

部分預先提交檢查工具與語言無關,但可提高對變更清單品質的信心。

keep-sorted

keep-sorted 是選擇加入的 Lint 工具,可確保原始碼行維持字母順序。如要啟用這項功能,請將程式碼區塊包裝在 keep-sorted startkeep-sorted end 註解中。

舉例來說,下列清單的元素必須依字母順序排列,且預先提交檢查會強制執行這項規定:

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

keep-sorted 與語言無關,並支援「#」和「//」註解。

如要瞭解所有選項,請參閱上游文件

fx format-code 也會強制執行 keep-sorted。

IfThisThenThat

IfThisThenThat 是一項檢查,可確保相互共同變更的檔案保持同步。如果其中一個檔案發生變更,系統會發出警告,指出其他檔案也應在同一個變更清單中變更。理想情況下,這類檢查應該是不必要的,但當可執行程式碼需要與設定檔同步時,可能會出現這種情況。

IfThisThenThat 會留下警告,因此不會封鎖變更清單提交作業。

範例

與其他獨立運作的預先提交檢查不同,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)

-->

「If This Then That」支援絕對檔案路徑 (以 / 開頭) 和相對路徑 (不以 / 開頭)。

如果 LINT.IfChange/ThenChange 指令中的文字有所變更,所指向的其他檔案也必須一併變更。檔案一律應在每個加入的檔案中包含 LINT 指令。單向指令表示一個檔案可能會與另一個檔案失去同步。

如果違反 IfThisThenThat 指令,系統會在 CL 中留下註解:

IfThisThenThat 顯示為行註解

「檢查」分頁也會顯示警告:

「檢查」分頁中顯示 IfThisThenThat

停用

如要針對特定變更停用 IfThisThenThat 檢查,請在提交訊息中加入 NO_IFTTT=<reason>