提交前检查

发送到 Fuchsia 的所有更改列表都会在提交前进行一系列静态分析检查。

检查类型

语言 linter

linter 会自动针对多种语言运行,并且会在 Gerrit 的 Checks 标签页中添加注释。

提交前工具

部分提交前检查工具虽然与语言无关,但能够对更改列表的质量提供更高的可信度。

已排序

keep-sorted 是一种选择启用 linter,可强制按字母顺序保持源代码行。您可以通过将代码块封装在 keep-sorted startkeep-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.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)

-->

IfThisThenThat 支持绝对文件路径(以 / 开头的路径)和相对路径(不以 / 开头的路径)。

如果 LINT.IfChange/ThenChange 指令中的文本发生更改,指向的另一个文件也必须发生更改。各个文件应始终在联接的每个文件中包含 LINT 指令。单向指令意味着一个文件可能会失去另一个文件的同步。

如果违反了 IfThisThenThat 指令,则会在 CL 上添加注释:

IfThisThenThat 显示为行注释

检查标签页上也会显示该警告:

IfThisThenThat 显示在“Checks”标签页中