Wrap the components of headlines in diff layers.

This commit is contained in:
Tom Alexander 2023-08-29 22:57:08 -04:00
parent 2c5c26c55f
commit d471f7178b
Signed by: talexander
GPG Key ID: D3A179C9A53C0EDE

View File

@ -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::<Result<Vec<_>, _>>()?;
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::<Result<Vec<_>, _>>()?;
child_status.push(artificial_diff_scope("section".to_owned(), section_status)?);
Ok(DiffResult {
status: this_status,