Rust 有一套标准化的风格,并在 rustfmt
工具中实现了这套风格。标准化的风格有助于 Rust 开发者在许多不同的项目中感到舒适和熟悉,而 rustfmt
提供的工具支持使其易于维护并纳入持续集成中。rustfmt
还提供了许多选项来自定义风格,但风格指南定义了默认设置,大多数项目都使用这些默认设置。
标准 Rust 风格是 Rust 风格团队在 2016 年至 2018 年间开发和讨论的结果。在发布风格指南后,Rust 风格团队按照计划结束了其活跃工作。
然而,随着 Rust 语言的发展,我们需要定期改进风格指南,例如支持新的语言结构。这包括微小的语言变化,以及备受期待的新特性,如 let
链式表达式 (RFC 2497) 和 let
-else
(RFC 3137)。默认情况下,像这样的新结构会被 rustfmt 忽略而不进行格式化,随后需要添加格式化规则。近年来,这项工作有一部分落在了 rustfmt 团队身上,但 rustfmt 团队宁愿实施由其他团队做出的风格决定,而不是自己做出这些决定。
此外,rustfmt 保持向后兼容性保证:使用 rustfmt 正确格式化的代码在未来的 rustfmt 版本中不会被格式化成不同的样子。这避免了频繁变动,也避免了人们在 CI 中使用 rustfmt 检查风格时导致 CI 失败。然而,这也阻碍了 Rust 风格的发展,使其无法考虑社区的期望并随时间推移改进格式化。rustfmt 提供了各种配置选项来改变其默认格式化,其中许多选项代表了社区中许多人希望默认启用的改变。
例如,许多人更喜欢将他们的 use
语句按三块格式化:标准库导入、外部 crate 导入,然后是同一项目内模块的导入。rustfmt
通过选项 group_imports = StdExternalCrate
支持这一点,但如果将其设为默认值,则会导致现有项目中的 CI 失败。我们需要一种兼容地演进默认 Rust 风格的方式,这在精神上类似于我们用于 Rust 版本 (edition) 的机制:允许现有风格继续工作,并允许人们选择采用新风格。
为了解决这两个问题,RFC 3309 重新成立了 Rust 风格团队,其有三个目标:
- 对新的 Rust 结构确定其风格
- 演进现有的 Rust 风格
- 定义演进 Rust 风格的机制,同时考虑向后兼容性
我们不打算进行任何惊天动地的风格改变;Rust 的外观和感觉将基本保持不变。默认 Rust 风格的演进将主要包含人们已经广泛启用或如果稳定的话会启用的现有 rustfmt
选项。
我们预计风格团队的初步工作将集中于清理积压的缺乏格式化指导的新语言结构。之后,我们将着手定义和实现演进默认 Rust 风格的机制,然后开始引入风格改进。