#text #sorting #indent #foo-bar

indentsort

保持结构排序的任意缩进文本

1 个不稳定版本

0.1.1 2024年8月19日

#565文本处理

Download history 92/week @ 2024-08-14

92 每月下载量

MIT 许可证

17KB
270

此 crate 提供了一个函数 indentsort,该函数对使用缩进结构的任意文本执行结构保持排序。

// input                      // output
foo {                         foo {
    b,                            a: 0,
    c: {                          b,
        9,         --->           c: {
        1,                            1,    
    },                                9,
    a: 0,                         },
}                             }

一些需要注意的细节

  • 空行不会被保留。
  • 默认情况下,不解析语法。所有内容都被视为纯文本。注意以下示例的输出,其中两个块 foo{}bar{} 的分隔逗号在底部,并且两个块之间不再有逗号分隔。
  • 有一个选项可以使方括号列表保持未排序。

示例

use indentsort::{indentsort, Options};

let sorted = indentsort(Options::Default, r#"
foo {
    b,
    c,
    a,
},

bar {
    xyz: 123,
    nums: [
        3,
        2,
        1,
    ],
}"#
);

assert_eq!(sorted.join("\n"),
r#"bar {
    nums: [
        1,
        2,
        3,
    ],
    xyz: 123,
}
foo {
    a,
    b,
    c,
},"#
);

动机

indentsort 提供了一种简单愉快的方式来对嵌套的、使用缩进结构化的文本进行等价性测试,其中元素的顺序是不确定的。原始的动机示例是一个需要等价性测试的复杂 Rust 结构,其中派生 PartialEq, Eq 不是一个选项,但 Debug 可用于漂亮的打印。

通过字符串比较对复杂对象进行等价性测试在一般情况下可能是一个坏主意,因此对于生产,你可能希望正确解析你的文本而不是使用类似的东西。

无运行时依赖