From 4d882563945d64e443d0928458cf4ed549a1ef21 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Mon, 9 Oct 2023 19:40:13 -0400 Subject: [PATCH] Compare statistics cookies properties. --- src/compare/diff.rs | 31 ++++++++++++++++++++++++++----- src/parser/statistics_cookie.rs | 19 ++++++++++++++++--- src/types/object.rs | 1 + 3 files changed, 43 insertions(+), 8 deletions(-) diff --git a/src/compare/diff.rs b/src/compare/diff.rs index 8802988..733ce7f 100644 --- a/src/compare/diff.rs +++ b/src/compare/diff.rs @@ -3781,20 +3781,41 @@ fn compare_target<'b, 's>( } fn compare_statistics_cookie<'b, 's>( - _source: &'s str, + source: &'s str, emacs: &'b Token<'s>, rust: &'b StatisticsCookie<'s>, ) -> Result, Box> { - let this_status = DiffStatus::Good; - let message = None; + let mut this_status = DiffStatus::Good; + let mut child_status = Vec::new(); + let mut message = None; - // TODO: Compare :value + assert_no_children(emacs, &mut this_status, &mut message)?; + + for diff in compare_properties!( + source, + emacs, + rust, + ( + EmacsField::Required(":value"), + |r| Some(r.value), + compare_property_quoted_string + ) + ) { + match diff { + ComparePropertiesResult::NoChange => {} + ComparePropertiesResult::SelfChange(new_status, new_message) => { + this_status = new_status; + message = new_message + } + ComparePropertiesResult::DiffEntry(diff_entry) => child_status.push(diff_entry), + } + } Ok(DiffResult { status: this_status, name: rust.get_elisp_name(), message, - children: Vec::new(), + children: child_status, rust_source: rust.get_source(), emacs_token: emacs, } diff --git a/src/parser/statistics_cookie.rs b/src/parser/statistics_cookie.rs index ba578b1..af919d1 100644 --- a/src/parser/statistics_cookie.rs +++ b/src/parser/statistics_cookie.rs @@ -12,7 +12,10 @@ use crate::context::RefContext; use crate::error::Res; use crate::types::StatisticsCookie; -#[cfg_attr(feature = "tracing", tracing::instrument(ret, level = "debug", skip(context)))] +#[cfg_attr( + feature = "tracing", + tracing::instrument(ret, level = "debug", skip(context)) +)] pub(crate) fn statistics_cookie<'b, 'g, 'r, 's>( context: RefContext<'b, 'g, 'r, 's>, input: OrgSource<'s>, @@ -23,7 +26,10 @@ pub(crate) fn statistics_cookie<'b, 'g, 'r, 's>( ))(input) } -#[cfg_attr(feature = "tracing", tracing::instrument(ret, level = "debug", skip(context)))] +#[cfg_attr( + feature = "tracing", + tracing::instrument(ret, level = "debug", skip(context)) +)] fn percent_statistics_cookie<'b, 'g, 'r, 's>( context: RefContext<'b, 'g, 'r, 's>, input: OrgSource<'s>, @@ -33,6 +39,7 @@ fn percent_statistics_cookie<'b, 'g, 'r, 's>( opt(nom::character::complete::u64), tag("%]"), )))(input)?; + let value = get_consumed(input, remaining); let (remaining, _trailing_whitespace) = maybe_consume_object_trailing_whitespace_if_not_exiting(context, remaining)?; let source = get_consumed(input, remaining); @@ -40,11 +47,15 @@ fn percent_statistics_cookie<'b, 'g, 'r, 's>( remaining, StatisticsCookie { source: source.into(), + value: value.into(), }, )) } -#[cfg_attr(feature = "tracing", tracing::instrument(ret, level = "debug", skip(context)))] +#[cfg_attr( + feature = "tracing", + tracing::instrument(ret, level = "debug", skip(context)) +)] fn fraction_statistics_cookie<'b, 'g, 'r, 's>( context: RefContext<'b, 'g, 'r, 's>, input: OrgSource<'s>, @@ -56,6 +67,7 @@ fn fraction_statistics_cookie<'b, 'g, 'r, 's>( opt(nom::character::complete::u64), tag("]"), )))(input)?; + let value = get_consumed(input, remaining); let (remaining, _trailing_whitespace) = maybe_consume_object_trailing_whitespace_if_not_exiting(context, remaining)?; let source = get_consumed(input, remaining); @@ -63,6 +75,7 @@ fn fraction_statistics_cookie<'b, 'g, 'r, 's>( remaining, StatisticsCookie { source: source.into(), + value: value.into(), }, )) } diff --git a/src/types/object.rs b/src/types/object.rs index 5230eef..2ce3f50 100644 --- a/src/types/object.rs +++ b/src/types/object.rs @@ -246,6 +246,7 @@ pub struct Target<'s> { #[derive(Debug, PartialEq)] pub struct StatisticsCookie<'s> { pub source: &'s str, + pub value: &'s str, } #[derive(Debug, PartialEq)]