一个最小的 `syn` 语法树美化器
一个最小的 syn 语法树美化器。
这是一个格式化器,用于将 syn 语法树转换为 String
格式化的源代码。与 rustfmt 不同,此库的目的是
适用于任意生成的代码。
Rustfmt 优先考虑高质量的输出,这种输出足够完美,您可以舒适地花费大量时间观看其输出 - 但这意味着需要一些重量级的算法,而且它倾向于放弃难以格式化的代码(例如 [rustfmt#3697],还有数十个类似的问题)。对于人类生成的代码来说,这并不一定是个大问题,因为当代码高度嵌套时,人类自然会倾向于重构为更容易格式化的代码。但是对于生成的代码,如果格式化器放弃,则代码将完全不可读。
此库使用最简单的算法和数据结构来实现,可以提供与 rustfmt 格式化输出的质量相差 95% 的输出。通过在实际代码中进行测试,我发现大约 97-98% 的输出行在 rustfmt 的格式化和此 crate 中是相同的。其余部分的行分割决策略略有不同,但仍然明确遵循主流的现代 Rust 格式。
这个 crate 所做的权衡非常适合生成的代码,你不会花费你的整个职业生涯来仔细阅读这些代码。例如,bindgen 的输出,或者 cargo-expand 的输出。在这种情况下,重要的是整个代码能够被格式化,而不需要格式化器放弃,而不是要求它是完美的。
[rustfmt#3697]: https://github.com/rust-lang/rustfmt/issues/3697
暂无开放 Issues,或尚未同步最近议题。