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 值格式化
111,634 个月下载量
用于 121 个 crates (30 直接)
59KB
1.5K SLoC
rust-format
一个具有统一接口的 Rust 源代码格式化 crate,支持字符串、文件和 TokenStream 输入。它目前支持 rustfmt 和 prettyplease。
它可选地支持特殊空白/注释标记的后处理替换,以在分别插入空白行和注释的 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);
}
许可证
本项目可选择以下任一许可证进行授权:
- Apache License,版本 2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证(LICENSE-MIT 或 https://opensource.org/licenses/MIT)
依赖项
~0–415KB
~10K SLoC