#formatter #rustfmt #quote #format-string #format-file #file-input #prettyplease

rust-format

一个具有统一接口的 Rust 源代码格式化 crate,支持字符串、文件和 TokenStream 输入

8 个版本

0.3.4 2022 年 4 月 11 日
0.3.3 2022 年 4 月 10 日
0.2.1 2022 年 4 月 6 日
0.1.0 2022 年 4 月 4 日

#24 in 值格式化

Download history 16314/week @ 2024-04-20 20464/week @ 2024-04-27 22166/week @ 2024-05-04 27467/week @ 2024-05-11 43606/week @ 2024-05-18 36205/week @ 2024-05-25 41928/week @ 2024-06-01 42057/week @ 2024-06-08 41099/week @ 2024-06-15 44177/week @ 2024-06-22 35069/week @ 2024-06-29 27774/week @ 2024-07-06 26834/week @ 2024-07-13 27140/week @ 2024-07-20 25990/week @ 2024-07-27 27273/week @ 2024-08-03

111,634 个月下载量
用于 121 个 crates (30 直接)

MIT/Apache

59KB
1.5K SLoC

rust-format

Crate Docs

一个具有统一接口的 Rust 源代码格式化 crate,支持字符串、文件和 TokenStream 输入。它目前支持 rustfmtprettyplease

它可选地支持特殊空白/注释标记的后处理替换,以在分别插入空白行和注释的 TokenStream 生成的源代码中(如 quote-doctest 在生成的 doctests 中插入空白/注释时所使用)。它还支持将文档块 (#[doc =""]) 转换为文档注释 (///)。

注意:这主要是为了支持 rustfmt,因为 prettyplease 自动将文档块转换为文档注释(但 rustfmt 需要 nightly 版本和配置选项)。

使用方法

[dependencies]
rust-format = "0.3"

可选功能

  • post_process - 启用对特殊 "标记宏" 进行后处理转换以生成空白行/注释的支持。此外,它还支持将文档块 (#[doc]) 转换为文档注释 (///)
  • pretty_please - 启用 prettyplease 格式化支持
  • token_stream - 启用从 TokenStream 输入的格式化

示例

使用默认选项的简单示例 RustFmt

use rust_format::{Formatter, RustFmt};

fn main() {
    let source = r#"fn main() { println!("Hello World!"); }"#;

    let actual = RustFmt::default().format_str(source).unwrap();
    let expected = r#"fn main() {
    println!("Hello World!");
}
"#;

    assert_eq!(expected, actual);
}

使用自定义配置

use rust_format::{Config, Edition, Formatter, RustFmt};

fn main() {
    let source = r#"use std::marker; use std::io; mod test; mod impls;"#;
  
    let mut config = Config::new_str()
        .edition(Edition::Rust2018)
        .option("reorder_imports", "false")
        .option("reorder_modules", "false");
    let rustfmt = RustFmt::from_config(config);
  
    let actual = rustfmt.format_str(source).unwrap();
    let expected = r#"use std::marker;
use std::io;
mod test;
mod impls;
"#;
  
    assert_eq!(expected, actual);
}

RustFmt 与后处理

use quote::quote;
use rust_format::{Config, Formatter, PostProcess, RustFmt};

fn main() {
    let source = quote! {
        #[doc = " This is main"] 
        fn main() { 
            _blank_!();
            _comment_!("\nThis prints hello world\n\n"); 
            println!("Hello World!"); 
        }
    };

    let mut config = Config::new_str()
        .post_proc(PostProcess::ReplaceMarkersAndDocBlocks);
    let actual = RustFmt::from_config(config).format_tokens(source).unwrap();
    let expected = r#"/// This is main
fn main() {

    //
    // This prints hello world
    //
    println!("Hello World!");
}
"#;

    assert_eq!(expected, actual);
}

许可证

本项目可选择以下任一许可证进行授权:

依赖项

~0–415KB
~10K SLoC