kdl-rs icon indicating copy to clipboard operation
kdl-rs copied to clipboard

`doc.to_string().parse()` is not idempotent

Open CAD97 opened this issue 2 years ago • 0 comments

fn build_abc() -> KdlDocument {
    let mut c = KdlNode::new("c");
    c.ensure_children();
    let mut b = KdlNode::new("b");
    b.ensure_children().nodes_mut().push(c);
    let mut a = KdlNode::new("a");
    a.ensure_children().nodes_mut().push(b);
    let mut doc = KdlDocument::new();
    doc.nodes_mut().push(a);
    doc.fmt();
    doc
}

#[test]
fn parse_vs_build() -> miette::Result<()> {
    let mut built = build_abc();
    let mut parsed: KdlDocument = built.to_string().parse()?;

    built.fmt();
    parsed.fmt();

    assert_eq!(built, parsed);

    Ok(())
}

This test fails.

diff
Diff < left / right > :
 KdlDocument {
<    leading: None,
>    leading: Some(
>        "",
>    ),
     nodes: [
         KdlNode {
<            leading: None,
>            leading: Some(
>                "",
>            ),
             ty: None,
             name: KdlIdentifier {
                 value: "a",
                 repr: None,
             },
             entries: [],
             before_children: None,
             children: Some(
                 KdlDocument {
<                    leading: None,
>                    leading: Some(
>                        "\n",
>                    ),
                     nodes: [
                         KdlNode {
<                            leading: None,
>                            leading: Some(
>                                "    ",
>                            ),
                             ty: None,
                             name: KdlIdentifier {
                                 value: "b",
                                 repr: None,
                             },
                             entries: [],
                             before_children: None,
                             children: Some(
                                 KdlDocument {
<                                    leading: None,
>                                    leading: Some(
>                                        "\n",
>                                    ),
                                     nodes: [
                                         KdlNode {
<                                            leading: None,
>                                            leading: Some(
>                                                "        ",
>                                            ),
                                             ty: None,
                                             name: KdlIdentifier {
                                                 value: "c",
                                                 repr: None,
                                             },
                                             entries: [],
                                             before_children: None,
                                             children: Some(
                                                 KdlDocument {
<                                                    leading: None,
>                                                    leading: Some(
>                                                        "\n",
>                                                    ),
                                                     nodes: [],
<                                                    trailing: None,
>                                                    trailing: Some(
>                                                        "\n        ",
>                                                    ),
                                                 },
                                             ),
<                                            trailing: None,
>                                            trailing: Some(
>                                                "\n",
>                                            ),
                                         },
                                     ],
<                                    trailing: None,
>                                    trailing: Some(
>                                        "    ",
>                                    ),
                                 },
                             ),
<                            trailing: None,
>                            trailing: Some(
>                                "\n",
>                            ),
                         },
                     ],
<                    trailing: None,
>                    trailing: Some(
>                        "",
>                    ),
                 },
             ),
<            trailing: None,
>            trailing: Some(
>                "\n",
>            ),
         },
     ],
<    trailing: None,
>    trailing: Some(
>        "",
>    ),
 }

CAD97 avatar Aug 15 '22 00:08 CAD97