所有傳送至 Fuchsia 的變更清單都會預先提交一系列靜態分析檢查。
檢查類型
語言 Linter
系統會自動針對多種語言執行 Linter,並在 Gerrit 的「Checks」分頁中留下註解。
預先提交工具
有些預先提交檢查是沒有語言隔閡的工具,但可以更信賴變更清單的品質。
已排序
「保留排序」是選擇啟用的 Linter,會強制讓原始碼行依字母順序保留。只要在 keep-sorted
start
和 keep-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.go
和 main.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」分頁也會顯示警告訊息: