提交前检查

发送到 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。如果只有一个文件发生更改,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 显示为行注释

该警告也会显示在 Checks 标签页中:

IfThisThenThat 显示在“Checks”标签页中