发送到 Fuchsia 的所有更改列表都会在提交前进行一系列静态分析检查。
检查类型
语言 linter
linter 会自动针对多种语言运行,并且会在 Gerrit 的 Checks 标签页中添加注释。
提交前工具
部分提交前检查工具虽然与语言无关,但能够对更改列表的质量提供更高的可信度。
已排序
keep-sorted 是一种选择启用 linter,可强制按字母顺序保持源代码行。您可以通过将代码块封装在 keep-sorted
start
和 keep-sorted
end
注释中来启用。
例如,以下列表的元素将需要按字母顺序,由提交前检查强制执行:
a_list = [
# keep-sorted start
"bar",
"baz",
"foo",
# keep-sorted end
]
保持排序状态与语言无关,支持“#”和“//”注释。
如需了解所有选项,请参阅上游文档。
Keep-sorted 也由 fx format-code
强制执行。
IfThisThenThat
IfThisThenThat 是一项检查功能,可用于确保相互更改的文件保持同步。如果一个文件发生更改,系统会发出警告,提示应在同一更改列表中的其他文件也发生更改。理想情况下,不应执行此类检查,但当可执行代码需要与配置文件同步时,可能会出现这种检查。
IfThisThenThat 会触发 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)
-->
IfThisThenThat 支持绝对文件路径(以 /
开头的路径)和相对路径(不以 /
开头的路径)。
如果 LINT.IfChange/ThenChange
指令中的文本发生更改,指向的另一个文件也必须发生更改。各个文件应始终在联接的每个文件中包含 LINT 指令。单向指令意味着一个文件可能会失去另一个文件的同步。
如果违反了 IfThisThenThat 指令,则会在 CL 上添加注释:
检查标签页上也会显示该警告: