首页/开发/代码质量与评审速查/rustfmt:Rust 代码格式化
规范与静态检查65 条

rustfmt:Rust 代码格式化

rustfmt 按官方风格重排 Rust 代码:通过 rustfmt.toml 调整少数稳定选项,多模块项目用 skip_children 或按文件就地忽略,cargo fmt 负责批量应用。

rustfmt 是什么

rustfmt 按官方风格重排 Rust 代码,用来终结格式争议:换行位置、缩进、参数折行都不再需要人工讨论。它通过 rustfmt.toml 调整少量稳定选项,多模块项目可以用配置忽略子目录或按文件就地跳过,cargo fmt 负责批量应用。它只处理排版,代码质量类问题交给 Clippy。

基本信息

配置文件rustfmt.toml(放在仓库根目录,随代码评审)
常用稳定项max_width、edition、use_small_heuristics
应用方式cargo fmt --all 批量重排
CI 检查cargo fmt --all -- --check,只检查不修改
忽略方式配置项忽略目录,或按文件跳过格式化

典型使用场景

  • 团队统一排版风格,评审只讨论逻辑不讨论换行
  • CI 拦截未格式化的代码,避免风格随时间漂移
  • 多人协作的模块在提交前批量重排,减少合并冲突
  • 生成代码目录通过配置排除,不参与格式化
  • 新人编辑器设置与团队不一致时,用命令兜底重排

配置与命令

配置与命令
# rustfmt.toml:只使用稳定选项,团队统一后写进仓库
max_width = 100
edition = "2021"
use_small_heuristics = "Default"

# 命令行
# cargo fmt --all                批量重排整个工作区
# cargo fmt --all -- --check     CI 只检查,不通过即失败
# rustfmt --edition 2021 src/main.rs   单独格式化一个文件

常用配置项

配置项作用建议
max_width单行最大宽度,默认 100团队统一后写进仓库
edition解析代码使用的 Rust 版本与项目工具链版本保持一致
use_small_heuristics小幅结构的折行策略统一取值,避免逐文件差异
skip_children子目录不加载自己的配置多模块仓库避免配置打架
ignore排除指定目录或文件生成代码、第三方代码可排除
CI 里固定用 cargo fmt --all -- --check:只检查不修改,未格式化的代码直接失败;本地则用不带 --check 的命令自动重排,改完再提交。
团队工具链版本不一致时格式化结果会有差异,diff 里出现大量与本次需求无关的改动;用工具链版本文件把 rustfmt 版本固定下来,能消除这类噪声。
不稳定选项(需要 nightly 工具链的配置项)会让结果随版本变化,跨机器甚至跨时间都可能不一致;确有需要时在配置文件里注明原因,并接受它随时可能调整。

易错点

  • 团队工具链版本不一致:格式反复波动,diff 出现无关改动
  • 启用不稳定选项:nightly 与稳定版行为不同,跨机器结果不一致
  • 把大规模格式化混在功能提交里:评审看不清真实改动,回滚也困难
  • 只在本地手动运行:CI 没有检查,未格式化的代码照样合入

数据来源与参考

  • rustfmt 官方文档(rust-lang.github.io/rustfmt)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌