3 个版本

0.2.2 2022年8月12日
0.2.1 2022年8月11日
0.2.0 2022年8月11日

#292 in 值格式化

MIT 许可证

14KB
222

notugly

一个简单且通用的美化打印库,高度基于 A prettier printer

如何使用

为了为类型定义美化打印,使用各种实用函数实现 Format 特性

  • nil 用于空元素
  • text 创建一个字符串到文档中
  • nest 缩进文档
  • cat 连接两个文档
  • groupgroup_with 将扁平布局作为替代方案添加。
  • foldspreadstackfill 以各种方式折叠文档列表

为了更容易定义结构,定义了一些运算符

  • x&y== cat(x,y)
  • x+y==x& text(" ") &y
  • x/y==x& line() &y
  • x*y==x& group(line) &y

请参阅 examples/ 目录中的完整功能示例。

示例:S-表达式

use notugly::*;

enum SExpr {
    Number(i32),
    Call(String, Vec<SExpr>),
}

impl Format for SExpr {
    fn format(&self) -> Document {
        match self {
            SExpr::Number(n) => text(format!("{n}")),
            SExpr::Call(name, v) => group_with(
                "",
                group(text("(") & text(name) & nest(2, line() & stack(v))) / text(")"),
            ),
        }
    }
}
fn main() {
    let big_eq = sexpr!(add (mul 2 6) (div (mul 4 (mul 3 2 1)) (add 1 (sub 3 (add 1 1)))));

    println!("{}", big_eq.pretty(40));
}

无运行时依赖