From d471f7178b4829f01ff0615a11bdde621cf1767c Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Tue, 29 Aug 2023 22:57:08 -0400 Subject: [PATCH] Wrap the components of headlines in diff layers. --- src/compare/diff.rs | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/compare/diff.rs b/src/compare/diff.rs index 17631d3..6e1386d 100644 --- a/src/compare/diff.rs +++ b/src/compare/diff.rs @@ -524,23 +524,31 @@ fn compare_heading<'s>( // Compare title let title = get_property(emacs, ":title")?.ok_or("Missing :title attribute.")?; - for (emacs_child, rust_child) in title.as_list()?.iter().zip(rust.title.iter()) { - child_status.push(compare_object(source, emacs_child, rust_child)?); - } + let title_status = title + .as_list()? + .iter() + .zip(rust.title.iter()) + .map(|(emacs_child, rust_child)| compare_object(source, emacs_child, rust_child)) + .collect::, _>>()?; + child_status.push(artificial_diff_scope("title".to_owned(), title_status)?); // TODO: Compare todo-type, priority, :footnote-section-p, :archivedp, :commentedp // Compare section - for (emacs_child, rust_child) in children.iter().skip(2).zip(rust.children.iter()) { - match rust_child { + let section_status = children + .iter() + .skip(2) + .zip(rust.children.iter()) + .map(|(emacs_child, rust_child)| match rust_child { DocumentElement::Heading(rust_heading) => { - child_status.push(compare_heading(source, emacs_child, rust_heading)?); + compare_heading(source, emacs_child, rust_heading) } DocumentElement::Section(rust_section) => { - child_status.push(compare_section(source, emacs_child, rust_section)?); + compare_section(source, emacs_child, rust_section) } - }; - } + }) + .collect::, _>>()?; + child_status.push(artificial_diff_scope("section".to_owned(), section_status)?); Ok(DiffResult { status: this_status,