3 个版本

使用旧的 Rust 2015

0.1.2 2018年3月16日
0.1.1 2018年3月12日
0.1.0 2018年3月11日

#315值格式化

MIT 许可证

26KB
288

pretty-trait

pretty-trait 是一个简单的基于特质的 Rust 格式化打印库。

包信息可在 crates.io 查找。

官方文档可在 docs.rs 查看。


lib.rs:

pretty-trait 是一个简单的基于特质的库,用于生成格式化调试输出。它旨在轻松渲染大型树状结构(如程序语法树),以便长项目跨多行并缩进。

此crate的核心功能是 Pretty 特质,它表示可以格式化打印的类型。此crate提供了一些内置类型,实现了 Pretty,可以组合起来实现各种格式化和布局策略。对于许多用途,您无需为您的类型实现 Pretty,而是可以将您的类型转换为由这些内置类型组成的结构。

示例

将自定义类型转换为内置 Pretty 类型

use pretty_trait::{Pretty, JoinExt, Group, Indent, Sep, delimited, Conditional, to_string, block};

enum NestList {
    Atom(i32),
    List(Vec<NestList>),
}

fn to_pretty(nest_list: &NestList) -> Box<Pretty> {
    match nest_list {
        &NestList::Atom(val) => Box::new(val.to_string()),
        &NestList::List(ref children) => {
            Box::new(Group::new(
                "["
                    .join(block(
                        delimited(&",".join(Sep(1)), children.iter().map(to_pretty))
                            .join(Conditional::OnlyBroken(",")),
                    )).join("]"),
            ))
        }
    }
}

let max_line = Some(40);
let tab_size = 4;

let small_list = NestList::List(vec![NestList::Atom(1), NestList::Atom(2), NestList::Atom(3)]);
assert_eq!(to_string(&to_pretty(&small_list), max_line, tab_size), "[1, 2, 3]");

let large_list = NestList::List(vec![
    NestList::List(vec![
        NestList::Atom(1),
        NestList::Atom(2),
        NestList::Atom(3),
        NestList::Atom(4),
        NestList::Atom(5),
    ]),
    NestList::List(vec![
        NestList::Atom(6),
        NestList::Atom(7),
        NestList::Atom(8),
        NestList::Atom(9),
        NestList::Atom(10),
    ]),
    NestList::List(vec![
        NestList::List(vec![NestList::Atom(11), NestList::Atom(12), NestList::Atom(13)]),
        NestList::List(vec![NestList::Atom(14), NestList::Atom(15), NestList::Atom(16)]),
    ]),
]);
let expected = "\
[
    [1, 2, 3, 4, 5],
    [6, 7, 8, 9, 10],
    [[11, 12, 13], [14, 15, 16]],
]";
assert_eq!(to_string(&to_pretty(&large_list), max_line, tab_size), expected);

无运行时依赖