Rustfmt

Rustfmt 是 Rust 编程语言的官方代码格式化工具,用于自动标准化 Rust 源代码的风格,确保一致性和可读性。它基于 Rust 工具链,支持命令行选项和配置文件(rustfmt.toml),并可集成到 Cargo 中。本教程基于官方文档和社区资源,提供超级扩展的指导,分为50个独立教程部分,每个部分聚焦一个关键命令、选项或配置使用场景。每个教程包括:

  • 描述:选项或配置的功能说明。
  • 语法:基本命令格式。
  • 示例:实际命令和预期效果(假设有一个简单的 main.rs 文件:fn main() { println!("Hello"); })。
  • 高级提示:扩展用法或注意事项。

这些教程从基础开始,逐步深入,适合初学者到高级用户。安装 Rust 后,通过 rustup component add rustfmt 添加组件,然后在终端运行 rustfmt 即可开始实验。注意:rustfmt 通常处理 .rs 文件,支持 stdin/stdout。

教程1: 获取帮助信息 (--help)

描述:显示 rustfmt 的所有命令行选项和简要说明,帮助快速上手。
语法rustfmt --help
示例
rustfmt --help
输出:列出选项如 --check--config 等。
高级提示:结合 --versionrustfmt --help --version 检查版本。

教程2: 查看版本信息 (--version)

描述:打印当前 rustfmt 版本,便于检查兼容性。
语法rustfmt --version
示例
rustfmt --version
输出:rustfmt 1.7.0-stable (2024-09-04)(版本依安装而定)。
高级提示:用于确认与 Rust 版本匹配。

教程3: 基本格式化文件

描述:默认模式下,格式化指定文件,就地覆盖。
语法rustfmt <file.rs>
示例
rustfmt main.rs
格式化 main.rs,添加空格和换行。
高级提示:多文件:rustfmt src/*.rs

教程4: 检查模式 (--check)

描述:检查代码是否符合格式,而不修改文件。
语法rustfmt --check <file.rs>
示例
rustfmt --check main.rs
如果不一致,返回非零退出码。
高级提示:用于 CI:rustfmt --check src/**/*.rs

教程5: 输出到 stdout (--emit=stdout)

描述:将格式化结果输出到标准输出,而不覆盖文件。
语法rustfmt --emit=stdout <file.rs>
示例
rustfmt --emit=stdout main.rs
打印格式化代码。
高级提示:重定向:rustfmt --emit=stdout main.rs > formatted.rs

教程6: 输出到文件 (--emit=files)

描述:格式化并覆盖原文件(默认行为)。
语法rustfmt --emit=files <file.rs>
示例
rustfmt --emit=files main.rs
覆盖 main.rs
高级提示:安全备份:结合 --backup

教程7: 输出差异 (--emit=diff)

描述:显示格式化前后的差异。
语法rustfmt --emit=diff <file.rs>
示例
rustfmt --emit=diff main.rs
输出 diff 格式。
高级提示:用于审查:rustfmt --emit=diff --check

教程8: 指定配置文件 (--config-path)

描述:使用自定义配置文件路径。
语法rustfmt --config-path <path> <file.rs>
示例
rustfmt --config-path custom.toml main.rs
应用自定义配置。
高级提示:项目根目录默认搜索 rustfmt.toml。

教程9: 内联配置 (--config)

描述:命令行覆盖配置选项。
语法rustfmt --config <key=value> <file.rs>
示例
rustfmt --config indent_style=tab main.rs
使用 tab 缩进。
高级提示:多配置:--config key1=val1,key2=val2

教程10: 备份文件 (--backup)

描述:格式化前备份原文件。
语法rustfmt --backup <file.rs>
示例
rustfmt --backup main.rs
生成 main.rs.orig。
高级提示:结合 --emit=files 确保安全。

教程11: 跳过子目录 (--skip-children)

描述:在递归模式下跳过子目录。
语法rustfmt --skip-children <dir>
示例
rustfmt --skip-children src/
只格式化 src/ 根文件。
高级提示:用于大型项目。

教程12: 详细输出 (--verbose)

描述:启用详细日志。
语法rustfmt --verbose <file.rs>
示例
rustfmt -v main.rs
显示处理细节。
高级提示:调试配置问题。

教程13: 安静模式 (--quiet)

描述:抑制非错误输出。
语法rustfmt --quiet <file.rs>
示例
rustfmt -q main.rs
安静格式化。
高级提示:脚本中使用。

教程14: 颜色输出 (--color)

描述:控制输出颜色。
语法rustfmt --color <always|never|auto> <file.rs>
示例
rustfmt --color always main.rs
始终使用颜色。
高级提示:默认 auto。

教程15: 集成 Cargo (cargo fmt)

描述:通过 Cargo 调用 rustfmt 格式化项目。
语法cargo fmt
示例
cargo fmt
格式化整个项目。
高级提示cargo fmt -- --check 检查模式。

教程16: 配置 indent_style

描述:设置缩进风格(tab 或 space)。
语法rustfmt --config indent_style=block <file.rs>
示例
rustfmt --config indent_style=block main.rs
使用块缩进。
高级提示:选项:block/visual,默认 block。

教程17: 配置 tab_spaces

描述:设置 tab 宽度(空格数)。
语法rustfmt --config tab_spaces=4 <file.rs>
示例
rustfmt --config tab_spaces=4 main.rs
4 个空格缩进。
高级提示:结合 indent_style=space。

教程18: 配置 newline_style

描述:设置换行符风格。
语法rustfmt --config newline_style=unix <file.rs>
示例
rustfmt --config newline_style=unix main.rs
使用 LF 换行。
高级提示:选项:unix/windows/auto。

教程19: 配置 fn_single_line

描述:允许单行函数。
语法rustfmt --config fn_single_line=true <file.rs>
示例
rustfmt --config fn_single_line=true main.rs
保持简单 fn 在单行。
高级提示:默认 false。

教程20: 配置 struct_lit_single_line

描述:允许单行结构体字面量。
语法rustfmt --config struct_lit_single_line=true <file.rs>
示例
rustfmt --config struct_lit_single_line=true main.rs
单行 struct。
高级提示:用于紧凑代码。

教程21: 配置 where_single_line

描述:允许单行 where 子句。
语法rustfmt --config where_single_line=true <file.rs>
示例
rustfmt --config where_single_line=true main.rs
紧凑 where。
高级提示:默认 false。

教程22: 配置 use_small_heuristics

描述:使用小型启发式格式化。
语法rustfmt --config use_small_heuristics=default <file.rs>
示例
rustfmt --config use_small_heuristics=max main.rs
最大启发式。
高级提示:选项:off/default/max。

教程23: 配置 max_width

描述:设置最大行宽。
语法rustfmt --config max_width=100 <file.rs>
示例
rustfmt --config max_width=100 main.rs
100 字符限。
高级提示:默认 100。

教程24: 配置 chain_width

描述:设置方法链换行宽度。
语法rustfmt --config chain_width=60 <file.rs>
示例
rustfmt --config chain_width=60 main.rs
链式调用换行。
高级提示:小于 max_width。

教程25: 配置 single_line_if_else_max_width

描述:单行 if-else 最大宽度。
语法rustfmt --config single_line_if_else_max_width=50 <file.rs>
示例
rustfmt --config single_line_if_else_max_width=50 main.rs
紧凑 if。
高级提示:0 禁用。

教程26: 配置 array_width

描述:数组字面量最大宽度。
语法rustfmt --config array_width=60 <file.rs>
示例
rustfmt --config array_width=60 main.rs
数组换行。
高级提示:默认无限。

教程27: 配置 attr_fn_like_width

描述:属性函数式宏宽度。
语法rustfmt --config attr_fn_like_width=70 <file.rs>
示例
rustfmt --config attr_fn_like_width=70 main.rs
属性格式。
高级提示:用于 derive。

教程28: 配置 struct_lit_width

描述:结构体字面量宽度。
语法rustfmt --config struct_lit_width=18 <file.rs>
示例
rustfmt --config struct_lit_width=18 main.rs
struct 换行。
高级提示:默认 18。

教程29: 配置 struct_variant_width

描述:枚举变体宽度。
语法rustfmt --config struct_variant_width=35 <file.rs>
示例
rustfmt --config struct_variant_width=35 main.rs
enum 格式。
高级提示:默认 35。

教程30: 配置 enum_discrim_align_threshold

描述:枚举判别式对齐阈值。
语法rustfmt --config enum_discrim_align_threshold=30 <file.rs>
示例
rustfmt --config enum_discrim_align_threshold=30 main.rs
对齐 enum。
高级提示:0 禁用。

教程31: 配置 match_block_trailing_comma

描述:match 块尾随逗号。
语法rustfmt --config match_block_trailing_comma=true <file.rs>
示例
rustfmt --config match_block_trailing_comma=true main.rs
添加逗号。
高级提示:默认 false。

教程32: 配置 force_explicit_abi

描述:强制显式 ABI。
语法rustfmt --config force_explicit_abi=true <file.rs>
示例
rustfmt --config force_explicit_abi=true main.rs
添加 extern。
高级提示:FFI 使用。

教程33: 配置 force_multiline_blocks

描述:强制多行块。
语法rustfmt --config force_multiline_blocks=true <file.rs>
示例
rustfmt --config force_multiline_blocks=true main.rs
展开块。
高级提示:默认 false。

教程34: 配置 use_field_init_shorthand

描述:使用字段初始化简写。
语法rustfmt --config use_field_init_shorthand=true <file.rs>
示例
rustfmt --config use_field_init_shorthand=true main.rs
简写 struct。
高级提示:默认 false。

教程35: 配置 use_try_shorthand

描述:使用 try 简写。
语法rustfmt --config use_try_shorthand=true <file.rs>
示例
rustfmt --config use_try_shorthand=true main.rs
转换为 ?。
高级提示:默认 false。

教程36: 配置 imports_granularity

描述:导入粒度。
语法rustfmt --config imports_granularity=module <file.rs>
示例
rustfmt --config imports_granularity=module main.rs
按模块分组。
高级提示:选项:preserve/one/crate/module/item。

教程37: 配置 group_imports

描述:分组导入。
语法rustfmt --config group_imports=std_external_crate <file.rs>
示例
rustfmt --config group_imports=std_external_crate main.rs
分组 std 和外部。
高级提示:选项:preserve/std_external_crate/one。

教程38: 配置 reorder_imports

描述:重新排序导入。
语法rustfmt --config reorder_imports=true <file.rs>
示例
rustfmt --config reorder_imports=true main.rs
字母排序。
高级提示:默认 true。

教程39: 配置 reorder_modules

描述:重新排序模块。
语法rustfmt --config reorder_modules=true <file.rs>
示例
rustfmt --config reorder_modules=true main.rs
排序 mod。
高级提示:默认 true。

教程40: 配置 reorder_impl_items

描述:重新排序 impl 项。
语法rustfmt --config reorder_impl_items=true <file.rs>
示例
rustfmt --config reorder_impl_items=true main.rs
排序 fn/const。
高级提示:默认 false。

教程41: 配置 comment_width

描述:注释最大宽度。
语法rustfmt --config comment_width=80 <file.rs>
示例
rustfmt --config comment_width=80 main.rs
换行注释。
高级提示:默认 80。

教程42: 配置 wrap_comments

描述:换行注释。
语法rustfmt --config wrap_comments=true <file.rs>
示例
rustfmt --config wrap_comments=true main.rs
自动换行。
高级提示:默认 false。

教程43: 配置 normalize_comments

描述:标准化注释。
语法rustfmt --config normalize_comments=true <file.rs>
示例
rustfmt --config normalize_comments=true main.rs
统一 // 和 ///。
高级提示:默认 false。

教程44: 配置 normalize_doc_attributes

描述:标准化 doc 属性。
语法rustfmt --config normalize_doc_attributes=true <file.rs>
示例
rustfmt --config normalize_doc_attributes=true main.rs
转换为 ///。
高级提示:默认 false。

教程45: 配置 format_strings

描述:格式化字符串字面量。
语法rustfmt --config format_strings=true <file.rs>
示例
rustfmt --config format_strings=true main.rs
换行字符串。
高级提示:默认 false。

教程46: 配置 empty_item_single_line

描述:空项单行。
语法rustfmt --config empty_item_single_line=true <file.rs>
示例
rustfmt --config empty_item_single_line=true main.rs
紧凑空块。
高级提示:默认 true。

教程47: 配置 struct_lit_multiline_style

描述:多行 struct 风格。
语法rustfmt --config struct_lit_multiline_style=prefer_single <file.rs>
示例
rustfmt --config struct_lit_multiline_style=prefer_single main.rs
优先单行。
高级提示:选项:prefer_single/block/force_block。

教程48: 配置 fn_call_style

描述:函数调用风格。
语法rustfmt --config fn_call_style=block <file.rs>
示例
rustfmt --config fn_call_style=block main.rs
块式调用。
高级提示:选项:block/visual。

教程49: 配置 attr_fn_like_style

描述:属性函数式风格。
语法rustfmt --config attr_fn_like_style=block <file.rs>
示例
rustfmt --config attr_fn_like_style=block main.rs
块式属性。
高级提示:类似 fn_call_style。

教程50: 配置 closure_block_indent_threshold

描述:闭包块缩进阈值。
语法rustfmt --config closure_block_indent_threshold=1 <file.rs>
示例
rustfmt --config closure_block_indent_threshold=1 main.rs
缩进闭包。
高级提示:-1 禁用,默认 -1。

结语与高级扩展

这些50个教程覆盖了 rustfmt 命令行的核心和高级用法,从基本格式化到详细配置优化。通过实践这些命令,你可以维护一致的 Rust 代码风格。更多细节参考官方文档(rustfmt GitHub)。如果需要集成编辑器,如 VS Code 的 Rust 扩展。遇到问题?运行 rustfmt --help 或检查 rustfmt.toml 快速解决!