94 个版本 (35 个稳定版)
1.4.21 | 2020 年 9 月 6 日 |
---|---|
1.4.19 | 2020 年 7 月 21 日 |
1.4.18 | 2020 年 6 月 13 日 |
1.4.13 | 2020 年 3 月 31 日 |
0.2.1 | 2017 年 7 月 25 日 |
在 开发工具 中排名 #672
每月下载量 190
在 12 个crate(10 个直接)中使用
1MB
25K SLoC
rustfmt
一个用于根据风格指南格式化 Rust 代码的工具。
如果您想帮忙(您应该这么做,这是一个有趣的项目!),请参阅 Contributing.md 和我们的 Code of Conduct。
您可以在 Travis CI 构建中使用 rustfmt。我们提供了一个最小的 Travis CI 配置(见 此处),并使用另一个仓库验证其状态。该仓库构建的状态由上面的“travis example”徽章报告。
快速入门
您可以使用 Rust 1.24 及以上版本运行 rustfmt
。
在稳定工具链上
安装
rustup component add rustfmt
在当前工作目录中的 cargo 项目上运行
cargo fmt
在夜间工具链上
要获取最新和最好的 rustfmt
,需要夜间工具链。
安装
rustup component add rustfmt --toolchain nightly
在当前工作目录中的 cargo 项目上运行
cargo +nightly fmt
局限性
Rustfmt 尝试尽可能多地处理 Rust 代码,有时,代码甚至不需要编译!随着我们接近 1.0 版本的发布,我们也在努力限制不稳定区域的数量;特别是,在 1.0 之后,随着 Rustfmt 的改进,大多数代码的格式应该不会改变。然而,有些事情 Rustfmt 做不到或者做得不好(因此格式可能会在 1.0 之后有显著变化)。我们希望随着时间的推移减少限制列表。
以下列表列举了 Rustfmt 不工作或稳定性保证不适用(我们在这两者之间没有区别,因为在未来 Rustfmt 可能会在当前无法工作的代码上工作)的区域。
- 程序中任何部分无法解析的程序(解析是编译的早期阶段,在 Rust 中包括宏展开)。
- 宏声明和用法(当前状态:一些宏声明和用法已经进行了格式化)。
- 注释,包括任何带有注释 '内部' 的 AST 节点(Rustfmt 目前不尝试格式化注释,它格式化带有注释的代码,但这种格式化可能在将来改变)。
- 注释中的代码块中的 Rust 代码。
- 程序的任何片段(即,稳定性保证仅适用于整个程序,即使今天程序片段可以格式化)。
- 包含非 ASCII Unicode 字符的代码(我们相信 Rustfmt 在这里大多可以工作,但我们没有足够的测试覆盖率或经验来确保 100% 确定)。
- Rustfmt 的错误(像任何软件一样,Rustfmt 有错误,我们不认为错误修复会破坏我们的稳定性保证)。
安装
rustup component add rustfmt
从源代码安装
要从源代码安装(需要 nightly),首先检出您想要安装的标签或分支,然后执行
cargo install --path .
这将 rustfmt
安装在您的 ~/.cargo/bin
。请确保将 ~/.cargo/bin
目录添加到您的 PATH 变量中。
运行
如果您使用过 cargo install
,则可以通过简单地键入 rustfmt filename
来运行 Rustfmt。这将在给定的文件上运行 rustfmt,如果该文件包含行外模块,则我们也将重新格式化它们。因此,要在一个整个模块或crate上运行,只需在根文件(通常是 mod.rs 或 lib.rs)上运行即可。Rustfmt 还可以从 stdin 读取数据。或者,您可以使用 cargo fmt
来格式化您的 crate 的所有二进制和库目标。
您可以通过运行 rustfmt --help
获取有关可用参数的信息。
当使用 --check
运行时,如果 Rustfmt 不会对输入进行任何格式化更改,则 Rustfmt 将以 0
退出,如果 Rustfmt 将进行更改,则以 1
退出。在其他模式下,如果格式化过程中出现某些错误(例如解析或内部错误),Rustfmt 将以 1
退出,如果格式化完成后没有错误(无论是否进行了更改),则以 0
退出。
从您的编辑器运行 Rustfmt
- Vim
- Emacs
- Sublime Text 3
- Atom
- 使用 vscode-rust,vsc-rustfmt 或 rls_vscode 通过 RLS 在 Visual Studio Code 中运行。
- IntelliJ 或 CLion
在 CI 服务器上检查样式
为了保持代码库格式的一致性,当拉取请求中包含未格式化的代码时,使 CI 构建失败可能很有帮助。使用--check
指令告诉 rustfmt 如果输入未正确格式化,则退出并返回错误代码。它还会打印出找到的差异。(较旧版本的 Rustfmt 不支持--check
,请使用--write-mode diff
)。
一个基本的 Travis 配置可能如下所示(需要 Rust 1.24.0 或更高版本)
language: rust
before_script:
- rustup component add rustfmt
script:
- cargo build
- cargo test
- cargo fmt --all -- --check
有关更多信息,请参阅这篇博客文章。
如何构建和测试
使用cargo build
进行构建。
使用cargo test
运行所有测试。
在构建后运行 rustfmt,使用cargo run --bin rustfmt -- filename
。请参阅上述关于运行 rustfmt 的说明。
配置 Rustfmt
Rustfmt 被设计为非常可配置。您可以创建一个名为 rustfmt.toml
或 .rustfmt.toml
的 TOML 文件,将其放置在项目或任何其他父目录中,然后它将应用该文件中的选项。有关可用选项,请参阅rustfmt -h
,或如果您更喜欢查看视觉样式预览,请访问GitHub 页面。
默认情况下,Rustfmt 使用符合通过Rust 风格指南正式化的风格,该指南通过
风格 RFC 流程
制定。
配置选项要么是稳定的,要么是不稳定的。稳定选项始终可以使用,而不稳定的选项仅在夜间工具链上可用,并且需要选择。有关详细信息,请参阅GitHub 页面。
Rust 的版本
Rustfmt 能够通过读取执行通过 Cargo 的格式化工具 cargo fmt
时的 Cargo.toml
文件来识别使用的版本。否则,需要在 rustfmt.toml
中指定版本,例如使用 edition = "2018"
。
提示
-
对于您不希望 rustfmt 修改的内容,请使用
#[rustfmt::skip]
-
要防止 rustfmt 格式化宏或属性,请使用
#[rustfmt::skip::macros(target_macro_name)]
或#[rustfmt::skip::attributes(target_attribute_name)]
示例
#![rustfmt::skip::attributes(custom_attribute)] #[custom_attribute(formatting , here , should , be , Skipped)] #[rustfmt::skip::macros(html)] fn main() { let macro_result1 = html! { <div> Hello</div> }.to_string();
-
在运行rustfmt时,将名为
rustfmt.toml
或.rustfmt.toml
的文件放置在目标文件目录或其父目录中,以覆盖rustfmt的默认设置。您可以使用rustfmt --print-config default rustfmt.toml
生成包含默认配置的文件,并根据需要自定义。 -
编译成功后,可以在目标目录中找到
rustfmt
可执行文件。 -
如果您在编译Rustfmt(或尝试安装时遇到编译错误)时遇到问题,请确保您已安装最新版本的Rust。
-
您可以使用--emit标志更改rustfmt输出更改的方式
示例
cargo fmt -- --emit files
选项
标志 描述 夜间版本 文件 覆盖输出到文件 否 stdout 将输出写入stdout 否 覆盖率 显示输入文件处理了多少 是 checkstyle 以checkstyle格式输出 是 json 以json格式输出差异 是
许可证
Rustfmt根据MIT许可证和Apache许可证(版本2.0)的条款分发。
有关详细信息,请参阅LICENSE-APACHE和LICENSE-MIT。
依赖关系
~18–31MB
~498K SLoC