From 49bc51ba898335fc95f7ec5c36853f6af40cd192 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Tue, 31 Oct 2023 22:18:28 -0400 Subject: [PATCH] Compare post-blank. --- src/compare/util.rs | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/compare/util.rs b/src/compare/util.rs index f55a9a36..903b26c8 100644 --- a/src/compare/util.rs +++ b/src/compare/util.rs @@ -47,6 +47,7 @@ pub(crate) fn compare_standard_properties< ) -> Result<(), Box> { assert_name(emacs, rust.get_elisp_fact().get_elisp_name())?; assert_bounds(original_document, emacs, rust)?; + assert_post_blank(emacs, rust)?; Ok(()) } @@ -112,13 +113,32 @@ fn assert_bounds<'b, 's, S: StandardProperties<'s> + ?Sized>( let rust_end_char_offset = rust_begin_char_offset + original_document[rust_begin..rust_end].chars().count(); // 1-based if rust_begin_char_offset != begin || rust_end_char_offset != end { - Err(format!("Rust bounds (in chars) ({rust_begin}, {rust_end}) do not match emacs bounds ({emacs_begin}, {emacs_end})", rust_begin = rust_begin_char_offset, rust_end = rust_end_char_offset, emacs_begin=begin, emacs_end=end))?; + Err(format!("Rust contents bounds (in chars) ({rust_begin}, {rust_end}) do not match emacs contents bounds ({emacs_begin}, {emacs_end})", rust_begin = rust_begin_char_offset, rust_end = rust_end_char_offset, emacs_begin=begin, emacs_end=end))?; } } Ok(()) } +/// Assert that the post blank matches between emacs and organic. +/// +/// This does **not** handle plain text because plain text is a special case. +fn assert_post_blank<'b, 's, S: StandardProperties<'s> + ?Sized>( + emacs: &'b Token<'s>, + rust: &'b S, +) -> Result<(), Box> { + let standard_properties = get_emacs_standard_properties(emacs)?; // 1-based + let rust_post_blank = rust.get_post_blank().chars().count(); + let emacs_post_blank = standard_properties + .post_blank + .ok_or("Token should have a post-blank.")?; + if rust_post_blank != emacs_post_blank { + Err(format!("Rust post-blank (in chars) {rust_post_blank} does not match emacs post-blank ({emacs_post_blank})", rust_post_blank = rust_post_blank, emacs_post_blank = emacs_post_blank))?; + } + + Ok(()) +} + struct EmacsStandardProperties { begin: Option, #[allow(dead_code)]