diff --git a/src/compare/util.rs b/src/compare/util.rs index 5e60021..1fa9daa 100644 --- a/src/compare/util.rs +++ b/src/compare/util.rs @@ -100,20 +100,28 @@ fn assert_bounds<'b, 's, S: StandardProperties<'s> + ?Sized>( // Check contents-begin/contents-end { - let (begin, end) = ( - standard_properties - .contents_begin - .ok_or("Token should have a begin.")?, - standard_properties - .contents_end - .ok_or("Token should have an end.")?, - ); - let (rust_begin, rust_end) = get_rust_byte_offsets(original_document, rust.get_contents()); // 0-based - let rust_begin_char_offset = original_document[..rust_begin].chars().count() + 1; // 1-based - 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 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))?; + if let Some(rust_contents) = rust.get_contents() { + let (begin, end) = ( + standard_properties + .contents_begin + .ok_or("Token should have a contents-begin.")?, + standard_properties + .contents_end + .ok_or("Token should have an contents-end.")?, + ); + let (rust_begin, rust_end) = get_rust_byte_offsets(original_document, rust_contents); // 0-based + let rust_begin_char_offset = original_document[..rust_begin].chars().count() + 1; // 1-based + 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 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))?; + } + } else { + if standard_properties.contents_begin.is_some() + || standard_properties.contents_end.is_some() + { + Err(format!("Rust contents is None but emacs contents bounds are ({emacs_begin:?}, {emacs_end:?})", emacs_begin=standard_properties.contents_begin, emacs_end=standard_properties.contents_end))?; + } } }