#rustfmt #leptos #formatting #macro #view #issue #format

nightly bin+lib leptos-pretty

查找并修复 Leptos 视图宏格式问题的工具

2 个稳定版本

1.0.1 2024年4月8日

761 / 开发工具

Apache-2.0 OR MIT

1MB
29K SLoC

leptos-pretty

这是 rustfmt 的修改版本,增加了对格式化 Leptos view! 宏的支持。

安装

重要提示:由于 rustfmt 使用编译器库,它必须使用在 rust-toolchain 中指定的确切 nightly 工具链进行安装(并运行)。使用 rustup 进行安装

rustup toolchain install nightly-2023-12-28 --profile minimal --component llvm-tools rustc-dev

然后简单地进行

cargo +nightly-2023-12-28 install leptos-pretty

运行 leptos-pretty 时,如果已安装,将自动选择所需的工具链。

如果您在安装过程中遇到任何问题,请确保打开一个 问题

用法

需要安装 rustup 和正确的工具链。否则,行为与 rustfmt 完全相同,只是将 leptos-pretty 替换为 rustfmt,并将 cargo leptos-pretty 替换为 cargo fmt

cargo leptos-pretty

致谢

本项目受到 bram209 的 leptosfmt 的启发,其中一些格式化代码来自该项目。

由 Rust 项目开发者编写的 rustfmt。

原始 rustfmt README

rustfmt linux mac windows crates.io

一个用于根据风格指南格式化Rust代码的工具。

如果您想帮忙(您应该这样做,这是一个有趣的项目!),请参阅Contributing.md和我们的行为准则

您可以在Travis CI构建中使用rustfmt。我们提供了一个最小的Travis CI配置(见此处)。

快速开始

您可以使用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发布后,大多数代码的格式化不应改变,因为Rustfmt得到改进。然而,有些事情Rustfmt无法做或做得不好(因此格式化可能会在1.0之后有显著变化)。我们希望随着时间的推移减少限制列表。

以下列出了Rustfmt不工作或不适用稳定性保证的区域(我们在这两者之间没有区分,因为将来Rustfmt可能会在当前无法工作的代码上工作)

  • 任何部分无法解析的程序(解析是编译的早期阶段,在Rust中包括宏扩展)。
  • 宏声明和使用(当前状态:一些宏声明和使用被格式化)。
  • 注释,包括任何有注释'内部'的AST节点(Rustfmt目前不尝试格式化注释,但它确实格式化有注释的代码,但这种格式化可能在将来改变)。
  • 注释中的代码块中的Rust代码。
  • 程序的任何片段(即,稳定性保证仅适用于整个程序,即使今天可以格式化程序的片段)。
  • 包含非ascii Unicode字符的代码(我们相信Rustfmt在这里大致可行,但我们没有测试覆盖或经验来100%确定)。
  • Rustfmt中的错误(像任何软件一样,Rustfmt有错误,我们不认为错误修复会破坏我们的稳定性保证)。

运行

如果您已经使用cargo install安装,只需键入rustfmt filename即可运行Rustfmt。这将运行给定的文件,如果文件包含外部模块,那么我们也会重新格式化它们。因此,要运行整个模块或crate,只需运行根文件(通常是mod.rs或lib.rs)。Rustfmt还可以从stdin读取数据。或者,您可以使用cargo fmt来格式化您的crate的所有二进制和库目标。

您可以通过运行 rustfmt --help 来获取有关可用参数的信息。运行 rustfmt 对项目进行格式化的最简单方法是使用 cargo fmtcargo fmt 适用于单个 crate 项目和 cargo 工作空间。有关使用信息,请参阅 cargo fmt --help

您可以通过设置 RUSTFMT 环境变量来指定您的 rustfmt 二进制文件的路径,以便 cargo 使用。这个特性是在 v1.4.22 中添加的,因此您必须使用此版本或更高版本才能利用此功能(cargo fmt --version)。

直接运行 rustfmt

要格式化单个文件或从 stdin 的任意代码,应使用 rustfmt 二进制文件。以下是一些示例:

  • rustfmt lib.rs main.rs 将原地格式化 "lib.rs" 和 "main.rs"。
  • rustfmt 将从 stdin 读取代码并将其格式化输出到 stdout。
    • echo "fn main() {}" | rustfmt 将输出 "fn main() {}"。

有关参数和输出选项的更多信息,请参阅 rustfmt --help

验证代码格式

当使用 --check 运行时,如果 Rustfmt 对输入不做任何格式化更改,它将退出并返回 0;如果 Rustfmt 将进行更改,则返回 1。在其他模式下,如果格式化过程中发生错误(例如解析或内部错误),Rustfmt 将退出并返回 1;如果格式化完成且没有错误,则返回 0(无论是否进行了更改)。

从您的编辑器运行 Rustfmt

在 CI 服务器上检查样式

为了保持代码库格式的一致性,当拉取请求包含未格式化的代码时,可以令 CI 构建失败。使用 --check 指示 rustfmt 如果输入格式不正确,则退出并返回错误代码。它还将打印出找到的差异。(较老的 Rustfmt 版本不支持 --check,请使用 --write-mode diff)。

一个最小的 Travis 设置可能如下所示(需要 Rust 1.31.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 --help=config,或者如果您更喜欢查看视觉样式预览,请访问GitHub页面

默认情况下,Rustfmt使用符合通过Rust风格指南和通过风格RFC过程正式化的风格。

配置选项可以是稳定的或不稳定的。稳定选项始终可以使用,而不稳定的选项仅在夜间工具链上可用,并且需要启用。有关详细信息,请参阅GitHub页面

Rust的版本

Rustfmt可以通过读取Cargo.toml文件来获取执行Cargo格式化工具cargo fmt时使用的版本。否则,需要在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
    

    选项

    标志 描述 Nightly Only
    files 覆盖输出到文件 No
    stdout 将输出写入stdout No
    coverage 显示处理了输入文件的部分 Yes
    checkstyle 以checkstyle格式输出 Yes
    json 以json格式输出diff Yes

许可证

Rustfmt 采用 MIT 许可证和 Apache 许可证(版本 2.0)的双重许可方式发布。

有关详细信息,请参阅 LICENSE-APACHELICENSE-MIT

依赖项

~11–20MB
~250K SLoC