Implement a new compare_properties implementation of the heading comparison.

This commit is contained in:
Tom Alexander
2023-10-09 21:27:18 -04:00
parent 166e59b922
commit 65615c64d2
2 changed files with 120 additions and 0 deletions

View File

@@ -12,6 +12,7 @@ use super::compare_field::compare_property_list_of_ast_nodes;
use super::compare_field::compare_property_list_of_quoted_string;
use super::compare_field::compare_property_numeric;
use super::compare_field::compare_property_quoted_string;
use super::compare_field::compare_property_single_ast_node;
use super::compare_field::compare_property_unquoted_atom;
use super::elisp_fact::ElispFact;
use super::elisp_fact::GetElispFact;
@@ -621,6 +622,86 @@ fn new_compare_heading<'b, 's>(
EmacsField::Required(":level"),
|r| Some(r.level),
compare_property_numeric
),
(
EmacsField::Required(":tags"),
|r| if r.tags.is_empty() {
None
} else {
Some(r.tags.iter())
},
compare_property_list_of_quoted_string
),
(
EmacsField::Required(":todo-keyword"),
|r| r.todo_keyword.as_ref().map(|(_, text)| text),
compare_property_quoted_string
),
(
EmacsField::Required(":todo-type"),
|r| r
.todo_keyword
.as_ref()
.map(|(todo_type, _)| todo_type)
.map(|todo_type| match todo_type {
TodoKeywordType::Todo => "todo",
TodoKeywordType::Done => "done",
}),
compare_property_unquoted_atom
),
(
EmacsField::Required(":title"),
|r| if r.title.is_empty() {
None
} else {
Some(r.title.iter())
},
compare_property_list_of_ast_nodes
),
(
EmacsField::Required(":priority"),
|r| r.priority_cookie,
compare_property_numeric
),
(
EmacsField::Required(":archivedp"),
|r| r.is_archived,
compare_property_boolean
),
(
EmacsField::Required(":commentedp"),
|r| r.is_comment,
compare_property_boolean
),
(
EmacsField::Required(":raw-value"),
|r| Some(r.get_raw_value()),
compare_property_quoted_string
),
(
EmacsField::Required(":footnote-section-p"),
|r| r.is_footnote_section,
compare_property_boolean
),
(
EmacsField::Required(":scheduled"),
|r| r.scheduled.as_ref(),
compare_property_single_ast_node
),
(
EmacsField::Required(":deadline"),
|r| r.deadline.as_ref(),
compare_property_single_ast_node
),
(
EmacsField::Required(":closed"),
|r| r.closed.as_ref(),
compare_property_single_ast_node
),
(
EmacsField::Required(":pre-blank"),
compare_identity,
compare_noop
)
) {
match diff {