Print character offset from rust's parse perspective during compare.

This commit is contained in:
Tom Alexander 2023-08-29 14:40:58 -04:00
parent ac313d093e
commit 3e6df7ba78
Signed by: talexander
GPG Key ID: D3A179C9A53C0EDE
3 changed files with 201 additions and 72 deletions

View File

@ -48,6 +48,7 @@ use crate::parser::RadioLink;
use crate::parser::RadioTarget; use crate::parser::RadioTarget;
use crate::parser::RegularLink; use crate::parser::RegularLink;
use crate::parser::Section; use crate::parser::Section;
use crate::parser::Source;
use crate::parser::SrcBlock; use crate::parser::SrcBlock;
use crate::parser::StatisticsCookie; use crate::parser::StatisticsCookie;
use crate::parser::StrikeThrough; use crate::parser::StrikeThrough;
@ -63,11 +64,14 @@ use crate::parser::Verbatim;
use crate::parser::VerseBlock; use crate::parser::VerseBlock;
#[derive(Debug)] #[derive(Debug)]
pub struct DiffResult { pub struct DiffResult<'s> {
status: DiffStatus, status: DiffStatus,
name: String, name: String,
message: Option<String>, message: Option<String>,
children: Vec<DiffResult>, children: Vec<DiffResult<'s>>,
rust_source: &'s str,
#[allow(dead_code)]
emacs_token: &'s Token<'s>,
} }
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
@ -76,12 +80,16 @@ pub enum DiffStatus {
Bad, Bad,
} }
impl DiffResult { impl<'s> DiffResult<'s> {
pub fn print(&self) -> Result<(), Box<dyn std::error::Error>> { pub fn print(&self, original_document: &str) -> Result<(), Box<dyn std::error::Error>> {
self.print_indented(0) self.print_indented(0, original_document)
} }
fn print_indented(&self, indentation: usize) -> Result<(), Box<dyn std::error::Error>> { fn print_indented(
&self,
indentation: usize,
original_document: &str,
) -> Result<(), Box<dyn std::error::Error>> {
let status_text = { let status_text = {
match self.status { match self.status {
DiffStatus::Good => { DiffStatus::Good => {
@ -106,15 +114,17 @@ impl DiffResult {
), ),
} }
}; };
let rust_offset = self.rust_source.as_ptr() as usize - original_document.as_ptr() as usize;
println!( println!(
"{}{} {} {}", "{indentation}{status_text} {name} char({char_offset}) {message}",
" ".repeat(indentation), indentation = " ".repeat(indentation),
status_text, status_text = status_text,
self.name, name = self.name,
self.message.as_ref().map(|m| m.as_str()).unwrap_or("") char_offset = rust_offset,
message = self.message.as_ref().map(|m| m.as_str()).unwrap_or("")
); );
for child in self.children.iter() { for child in self.children.iter() {
child.print_indented(indentation + 1)?; child.print_indented(indentation + 1, original_document)?;
} }
Ok(()) Ok(())
} }
@ -176,7 +186,7 @@ fn compare_element<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s Element<'s>, rust: &'s Element<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let compare_result = match rust { let compare_result = match rust {
Element::Paragraph(obj) => compare_paragraph(source, emacs, obj), Element::Paragraph(obj) => compare_paragraph(source, emacs, obj),
Element::PlainList(obj) => compare_plain_list(source, emacs, obj), Element::PlainList(obj) => compare_plain_list(source, emacs, obj),
@ -207,6 +217,8 @@ fn compare_element<'s>(
name: "error!".to_owned(), name: "error!".to_owned(),
message: Some(e.to_string()), message: Some(e.to_string()),
children: Vec::new(), children: Vec::new(),
rust_source: rust.get_source(),
emacs_token: emacs,
}), }),
} }
} }
@ -215,7 +227,7 @@ fn compare_object<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s Object<'s>, rust: &'s Object<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let compare_result = match rust { let compare_result = match rust {
Object::Bold(obj) => compare_bold(source, emacs, obj), Object::Bold(obj) => compare_bold(source, emacs, obj),
Object::Italic(obj) => compare_italic(source, emacs, obj), Object::Italic(obj) => compare_italic(source, emacs, obj),
@ -252,6 +264,8 @@ fn compare_object<'s>(
name: "error!".to_owned(), name: "error!".to_owned(),
message: Some(e.to_string()), message: Some(e.to_string()),
children: Vec::new(), children: Vec::new(),
rust_source: rust.get_source(),
emacs_token: emacs,
}), }),
} }
} }
@ -259,7 +273,7 @@ fn compare_object<'s>(
pub fn compare_document<'s>( pub fn compare_document<'s>(
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s Document<'s>, rust: &'s Document<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let children = emacs.as_list()?; let children = emacs.as_list()?;
let mut child_status = Vec::new(); let mut child_status = Vec::new();
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
@ -303,6 +317,8 @@ pub fn compare_document<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: child_status, children: child_status,
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -310,7 +326,7 @@ fn compare_section<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s Section<'s>, rust: &'s Section<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let children = emacs.as_list()?; let children = emacs.as_list()?;
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let mut child_status = Vec::new(); let mut child_status = Vec::new();
@ -332,6 +348,8 @@ fn compare_section<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: child_status, children: child_status,
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -339,7 +357,7 @@ fn compare_heading<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s Heading<'s>, rust: &'s Heading<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let children = emacs.as_list()?; let children = emacs.as_list()?;
let mut child_status = Vec::new(); let mut child_status = Vec::new();
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
@ -427,6 +445,8 @@ fn compare_heading<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message, message,
children: child_status, children: child_status,
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -467,7 +487,7 @@ fn compare_paragraph<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s Paragraph<'s>, rust: &'s Paragraph<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let children = emacs.as_list()?; let children = emacs.as_list()?;
let mut child_status = Vec::new(); let mut child_status = Vec::new();
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
@ -489,6 +509,8 @@ fn compare_paragraph<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: child_status, children: child_status,
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -496,7 +518,7 @@ fn compare_plain_list<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s PlainList<'s>, rust: &'s PlainList<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let children = emacs.as_list()?; let children = emacs.as_list()?;
let mut child_status = Vec::new(); let mut child_status = Vec::new();
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
@ -518,6 +540,8 @@ fn compare_plain_list<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: child_status, children: child_status,
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -525,7 +549,7 @@ fn compare_plain_list_item<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s PlainListItem<'s>, rust: &'s PlainListItem<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let children = emacs.as_list()?; let children = emacs.as_list()?;
let mut child_status = Vec::new(); let mut child_status = Vec::new();
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
@ -547,6 +571,8 @@ fn compare_plain_list_item<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: child_status, children: child_status,
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -554,7 +580,7 @@ fn compare_greater_block<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s GreaterBlock<'s>, rust: &'s GreaterBlock<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let children = emacs.as_list()?; let children = emacs.as_list()?;
let mut child_status = Vec::new(); let mut child_status = Vec::new();
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
@ -580,6 +606,8 @@ fn compare_greater_block<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: child_status, children: child_status,
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -587,7 +615,7 @@ fn compare_dynamic_block<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s DynamicBlock<'s>, rust: &'s DynamicBlock<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let children = emacs.as_list()?; let children = emacs.as_list()?;
let mut child_status = Vec::new(); let mut child_status = Vec::new();
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
@ -608,6 +636,8 @@ fn compare_dynamic_block<'s>(
name: "dynamic-block".to_owned(), name: "dynamic-block".to_owned(),
message: None, message: None,
children: child_status, children: child_status,
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -615,7 +645,7 @@ fn compare_footnote_definition<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s FootnoteDefinition<'s>, rust: &'s FootnoteDefinition<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let children = emacs.as_list()?; let children = emacs.as_list()?;
let mut child_status = Vec::new(); let mut child_status = Vec::new();
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
@ -637,6 +667,8 @@ fn compare_footnote_definition<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: child_status, children: child_status,
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -644,7 +676,7 @@ fn compare_comment<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s Comment<'s>, rust: &'s Comment<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let child_status = Vec::new(); let child_status = Vec::new();
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "comment"; let emacs_name = "comment";
@ -661,6 +693,8 @@ fn compare_comment<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: child_status, children: child_status,
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -668,7 +702,7 @@ fn compare_drawer<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s Drawer<'s>, rust: &'s Drawer<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let children = emacs.as_list()?; let children = emacs.as_list()?;
let mut child_status = Vec::new(); let mut child_status = Vec::new();
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
@ -690,6 +724,8 @@ fn compare_drawer<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: child_status, children: child_status,
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -697,7 +733,7 @@ fn compare_property_drawer<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s PropertyDrawer<'s>, rust: &'s PropertyDrawer<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let children = emacs.as_list()?; let children = emacs.as_list()?;
let child_status = Vec::new(); let child_status = Vec::new();
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
@ -720,6 +756,8 @@ fn compare_property_drawer<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: child_status, children: child_status,
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -727,7 +765,7 @@ fn compare_table<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s Table<'s>, rust: &'s Table<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let children = emacs.as_list()?; let children = emacs.as_list()?;
let mut child_status = Vec::new(); let mut child_status = Vec::new();
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
@ -749,6 +787,8 @@ fn compare_table<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: child_status, children: child_status,
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -756,7 +796,7 @@ fn compare_table_row<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s TableRow<'s>, rust: &'s TableRow<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let children = emacs.as_list()?; let children = emacs.as_list()?;
let mut child_status = Vec::new(); let mut child_status = Vec::new();
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
@ -778,6 +818,8 @@ fn compare_table_row<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: child_status, children: child_status,
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -785,7 +827,7 @@ fn compare_table_cell<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s TableCell<'s>, rust: &'s TableCell<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let children = emacs.as_list()?; let children = emacs.as_list()?;
let child_status = Vec::new(); let child_status = Vec::new();
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
@ -805,6 +847,8 @@ fn compare_table_cell<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: child_status, children: child_status,
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -812,7 +856,7 @@ fn compare_verse_block<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s VerseBlock<'s>, rust: &'s VerseBlock<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let children = emacs.as_list()?; let children = emacs.as_list()?;
let child_status = Vec::new(); let child_status = Vec::new();
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
@ -832,6 +876,8 @@ fn compare_verse_block<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: child_status, children: child_status,
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -839,7 +885,7 @@ fn compare_comment_block<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s CommentBlock<'s>, rust: &'s CommentBlock<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "comment-block"; let emacs_name = "comment-block";
if assert_name(emacs, emacs_name).is_err() { if assert_name(emacs, emacs_name).is_err() {
@ -855,6 +901,8 @@ fn compare_comment_block<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: Vec::new(), children: Vec::new(),
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -862,7 +910,7 @@ fn compare_example_block<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s ExampleBlock<'s>, rust: &'s ExampleBlock<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "example-block"; let emacs_name = "example-block";
if assert_name(emacs, emacs_name).is_err() { if assert_name(emacs, emacs_name).is_err() {
@ -878,6 +926,8 @@ fn compare_example_block<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: Vec::new(), children: Vec::new(),
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -885,7 +935,7 @@ fn compare_export_block<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s ExportBlock<'s>, rust: &'s ExportBlock<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "export-block"; let emacs_name = "export-block";
if assert_name(emacs, emacs_name).is_err() { if assert_name(emacs, emacs_name).is_err() {
@ -901,6 +951,8 @@ fn compare_export_block<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: Vec::new(), children: Vec::new(),
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -908,7 +960,7 @@ fn compare_src_block<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s SrcBlock<'s>, rust: &'s SrcBlock<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "src-block"; let emacs_name = "src-block";
if assert_name(emacs, emacs_name).is_err() { if assert_name(emacs, emacs_name).is_err() {
@ -924,6 +976,8 @@ fn compare_src_block<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: Vec::new(), children: Vec::new(),
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -931,7 +985,7 @@ fn compare_clock<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s Clock<'s>, rust: &'s Clock<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "clock"; let emacs_name = "clock";
if assert_name(emacs, emacs_name).is_err() { if assert_name(emacs, emacs_name).is_err() {
@ -947,6 +1001,8 @@ fn compare_clock<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: Vec::new(), children: Vec::new(),
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -954,7 +1010,7 @@ fn compare_diary_sexp<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s DiarySexp<'s>, rust: &'s DiarySexp<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "diary-sexp"; let emacs_name = "diary-sexp";
if assert_name(emacs, emacs_name).is_err() { if assert_name(emacs, emacs_name).is_err() {
@ -970,6 +1026,8 @@ fn compare_diary_sexp<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: Vec::new(), children: Vec::new(),
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -977,7 +1035,7 @@ fn compare_planning<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s Planning<'s>, rust: &'s Planning<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "planning"; let emacs_name = "planning";
if assert_name(emacs, emacs_name).is_err() { if assert_name(emacs, emacs_name).is_err() {
@ -993,6 +1051,8 @@ fn compare_planning<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: Vec::new(), children: Vec::new(),
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -1000,7 +1060,7 @@ fn compare_fixed_width_area<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s FixedWidthArea<'s>, rust: &'s FixedWidthArea<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let child_status = Vec::new(); let child_status = Vec::new();
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "fixed-width"; let emacs_name = "fixed-width";
@ -1017,6 +1077,8 @@ fn compare_fixed_width_area<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: child_status, children: child_status,
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -1024,7 +1086,7 @@ fn compare_horizontal_rule<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s HorizontalRule<'s>, rust: &'s HorizontalRule<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let child_status = Vec::new(); let child_status = Vec::new();
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "horizontal-rule"; let emacs_name = "horizontal-rule";
@ -1041,6 +1103,8 @@ fn compare_horizontal_rule<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: child_status, children: child_status,
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -1048,7 +1112,7 @@ fn compare_keyword<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s Keyword<'s>, rust: &'s Keyword<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let child_status = Vec::new(); let child_status = Vec::new();
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "keyword"; let emacs_name = "keyword";
@ -1065,6 +1129,8 @@ fn compare_keyword<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: child_status, children: child_status,
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -1072,7 +1138,7 @@ fn compare_latex_environment<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s LatexEnvironment<'s>, rust: &'s LatexEnvironment<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let child_status = Vec::new(); let child_status = Vec::new();
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "latex-environment"; let emacs_name = "latex-environment";
@ -1089,6 +1155,8 @@ fn compare_latex_environment<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: child_status, children: child_status,
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -1096,7 +1164,7 @@ fn compare_plain_text<'s>(
_source: &'s str, _source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s PlainText<'s>, rust: &'s PlainText<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let mut message = None; let mut message = None;
let text = emacs.as_text()?; let text = emacs.as_text()?;
@ -1135,6 +1203,8 @@ fn compare_plain_text<'s>(
name: "plain-text".to_owned(), name: "plain-text".to_owned(),
message, message,
children: Vec::new(), children: Vec::new(),
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -1142,7 +1212,7 @@ fn compare_bold<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s Bold<'s>, rust: &'s Bold<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "bold"; let emacs_name = "bold";
if assert_name(emacs, emacs_name).is_err() { if assert_name(emacs, emacs_name).is_err() {
@ -1158,6 +1228,8 @@ fn compare_bold<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: Vec::new(), children: Vec::new(),
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -1165,7 +1237,7 @@ fn compare_italic<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s Italic<'s>, rust: &'s Italic<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "italic"; let emacs_name = "italic";
if assert_name(emacs, emacs_name).is_err() { if assert_name(emacs, emacs_name).is_err() {
@ -1181,6 +1253,8 @@ fn compare_italic<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: Vec::new(), children: Vec::new(),
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -1188,7 +1262,7 @@ fn compare_underline<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s Underline<'s>, rust: &'s Underline<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "underline"; let emacs_name = "underline";
if assert_name(emacs, emacs_name).is_err() { if assert_name(emacs, emacs_name).is_err() {
@ -1204,6 +1278,8 @@ fn compare_underline<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: Vec::new(), children: Vec::new(),
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -1211,7 +1287,7 @@ fn compare_verbatim<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s Verbatim<'s>, rust: &'s Verbatim<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "verbatim"; let emacs_name = "verbatim";
if assert_name(emacs, emacs_name).is_err() { if assert_name(emacs, emacs_name).is_err() {
@ -1227,6 +1303,8 @@ fn compare_verbatim<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: Vec::new(), children: Vec::new(),
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -1234,7 +1312,7 @@ fn compare_code<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s Code<'s>, rust: &'s Code<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "code"; let emacs_name = "code";
if assert_name(emacs, emacs_name).is_err() { if assert_name(emacs, emacs_name).is_err() {
@ -1250,6 +1328,8 @@ fn compare_code<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: Vec::new(), children: Vec::new(),
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -1257,7 +1337,7 @@ fn compare_strike_through<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s StrikeThrough<'s>, rust: &'s StrikeThrough<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "strike-through"; let emacs_name = "strike-through";
if assert_name(emacs, emacs_name).is_err() { if assert_name(emacs, emacs_name).is_err() {
@ -1273,6 +1353,8 @@ fn compare_strike_through<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: Vec::new(), children: Vec::new(),
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -1280,7 +1362,7 @@ fn compare_regular_link<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s RegularLink<'s>, rust: &'s RegularLink<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "link"; let emacs_name = "link";
if assert_name(emacs, emacs_name).is_err() { if assert_name(emacs, emacs_name).is_err() {
@ -1296,6 +1378,8 @@ fn compare_regular_link<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: Vec::new(), children: Vec::new(),
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -1303,7 +1387,7 @@ fn compare_radio_link<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s RadioLink<'s>, rust: &'s RadioLink<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "link"; let emacs_name = "link";
if assert_name(emacs, emacs_name).is_err() { if assert_name(emacs, emacs_name).is_err() {
@ -1319,6 +1403,8 @@ fn compare_radio_link<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: Vec::new(), children: Vec::new(),
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -1326,7 +1412,7 @@ fn compare_radio_target<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s RadioTarget<'s>, rust: &'s RadioTarget<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "radio-target"; let emacs_name = "radio-target";
if assert_name(emacs, emacs_name).is_err() { if assert_name(emacs, emacs_name).is_err() {
@ -1342,6 +1428,8 @@ fn compare_radio_target<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: Vec::new(), children: Vec::new(),
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -1349,7 +1437,7 @@ fn compare_plain_link<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s PlainLink<'s>, rust: &'s PlainLink<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "link"; let emacs_name = "link";
if assert_name(emacs, emacs_name).is_err() { if assert_name(emacs, emacs_name).is_err() {
@ -1365,6 +1453,8 @@ fn compare_plain_link<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: Vec::new(), children: Vec::new(),
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -1372,7 +1462,7 @@ fn compare_angle_link<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s AngleLink<'s>, rust: &'s AngleLink<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "link"; let emacs_name = "link";
if assert_name(emacs, emacs_name).is_err() { if assert_name(emacs, emacs_name).is_err() {
@ -1388,6 +1478,8 @@ fn compare_angle_link<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: Vec::new(), children: Vec::new(),
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -1395,7 +1487,7 @@ fn compare_org_macro<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s OrgMacro<'s>, rust: &'s OrgMacro<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "macro"; let emacs_name = "macro";
if assert_name(emacs, emacs_name).is_err() { if assert_name(emacs, emacs_name).is_err() {
@ -1411,6 +1503,8 @@ fn compare_org_macro<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: Vec::new(), children: Vec::new(),
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -1418,7 +1512,7 @@ fn compare_entity<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s Entity<'s>, rust: &'s Entity<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "entity"; let emacs_name = "entity";
if assert_name(emacs, emacs_name).is_err() { if assert_name(emacs, emacs_name).is_err() {
@ -1434,6 +1528,8 @@ fn compare_entity<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: Vec::new(), children: Vec::new(),
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -1441,7 +1537,7 @@ fn compare_latex_fragment<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s LatexFragment<'s>, rust: &'s LatexFragment<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "latex-fragment"; let emacs_name = "latex-fragment";
if assert_name(emacs, emacs_name).is_err() { if assert_name(emacs, emacs_name).is_err() {
@ -1457,6 +1553,8 @@ fn compare_latex_fragment<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: Vec::new(), children: Vec::new(),
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -1464,7 +1562,7 @@ fn compare_export_snippet<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s ExportSnippet<'s>, rust: &'s ExportSnippet<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "export-snippet"; let emacs_name = "export-snippet";
if assert_name(emacs, emacs_name).is_err() { if assert_name(emacs, emacs_name).is_err() {
@ -1480,6 +1578,8 @@ fn compare_export_snippet<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: Vec::new(), children: Vec::new(),
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -1487,7 +1587,7 @@ fn compare_footnote_reference<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s FootnoteReference<'s>, rust: &'s FootnoteReference<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "footnote-reference"; let emacs_name = "footnote-reference";
if assert_name(emacs, emacs_name).is_err() { if assert_name(emacs, emacs_name).is_err() {
@ -1503,6 +1603,8 @@ fn compare_footnote_reference<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: Vec::new(), children: Vec::new(),
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -1510,7 +1612,7 @@ fn compare_citation<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s Citation<'s>, rust: &'s Citation<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "citation"; let emacs_name = "citation";
if assert_name(emacs, emacs_name).is_err() { if assert_name(emacs, emacs_name).is_err() {
@ -1526,6 +1628,8 @@ fn compare_citation<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: Vec::new(), children: Vec::new(),
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -1533,7 +1637,7 @@ fn compare_citation_reference<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s CitationReference<'s>, rust: &'s CitationReference<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "citation-reference"; let emacs_name = "citation-reference";
if assert_name(emacs, emacs_name).is_err() { if assert_name(emacs, emacs_name).is_err() {
@ -1549,6 +1653,8 @@ fn compare_citation_reference<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: Vec::new(), children: Vec::new(),
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -1556,7 +1662,7 @@ fn compare_inline_babel_call<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s InlineBabelCall<'s>, rust: &'s InlineBabelCall<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "inline-babel-call"; let emacs_name = "inline-babel-call";
if assert_name(emacs, emacs_name).is_err() { if assert_name(emacs, emacs_name).is_err() {
@ -1572,6 +1678,8 @@ fn compare_inline_babel_call<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: Vec::new(), children: Vec::new(),
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -1579,7 +1687,7 @@ fn compare_inline_source_block<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s InlineSourceBlock<'s>, rust: &'s InlineSourceBlock<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "inline-src-block"; let emacs_name = "inline-src-block";
if assert_name(emacs, emacs_name).is_err() { if assert_name(emacs, emacs_name).is_err() {
@ -1595,6 +1703,8 @@ fn compare_inline_source_block<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: Vec::new(), children: Vec::new(),
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -1602,7 +1712,7 @@ fn compare_line_break<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s LineBreak<'s>, rust: &'s LineBreak<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "line-break"; let emacs_name = "line-break";
if assert_name(emacs, emacs_name).is_err() { if assert_name(emacs, emacs_name).is_err() {
@ -1618,6 +1728,8 @@ fn compare_line_break<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: Vec::new(), children: Vec::new(),
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -1625,7 +1737,7 @@ fn compare_target<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s Target<'s>, rust: &'s Target<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "target"; let emacs_name = "target";
if assert_name(emacs, emacs_name).is_err() { if assert_name(emacs, emacs_name).is_err() {
@ -1641,6 +1753,8 @@ fn compare_target<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: Vec::new(), children: Vec::new(),
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -1648,7 +1762,7 @@ fn compare_statistics_cookie<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s StatisticsCookie<'s>, rust: &'s StatisticsCookie<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "statistics-cookie"; let emacs_name = "statistics-cookie";
if assert_name(emacs, emacs_name).is_err() { if assert_name(emacs, emacs_name).is_err() {
@ -1664,6 +1778,8 @@ fn compare_statistics_cookie<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: Vec::new(), children: Vec::new(),
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -1671,7 +1787,7 @@ fn compare_subscript<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s Subscript<'s>, rust: &'s Subscript<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "subscript"; let emacs_name = "subscript";
if assert_name(emacs, emacs_name).is_err() { if assert_name(emacs, emacs_name).is_err() {
@ -1687,6 +1803,8 @@ fn compare_subscript<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: Vec::new(), children: Vec::new(),
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -1694,7 +1812,7 @@ fn compare_superscript<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s Superscript<'s>, rust: &'s Superscript<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "superscript"; let emacs_name = "superscript";
if assert_name(emacs, emacs_name).is_err() { if assert_name(emacs, emacs_name).is_err() {
@ -1710,6 +1828,8 @@ fn compare_superscript<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: Vec::new(), children: Vec::new(),
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }
@ -1717,7 +1837,7 @@ fn compare_timestamp<'s>(
source: &'s str, source: &'s str,
emacs: &'s Token<'s>, emacs: &'s Token<'s>,
rust: &'s Timestamp<'s>, rust: &'s Timestamp<'s>,
) -> Result<DiffResult, Box<dyn std::error::Error>> { ) -> Result<DiffResult<'s>, Box<dyn std::error::Error>> {
let mut this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let emacs_name = "timestamp"; let emacs_name = "timestamp";
if assert_name(emacs, emacs_name).is_err() { if assert_name(emacs, emacs_name).is_err() {
@ -1733,5 +1853,7 @@ fn compare_timestamp<'s>(
name: emacs_name.to_owned(), name: emacs_name.to_owned(),
message: None, message: None,
children: Vec::new(), children: Vec::new(),
rust_source: rust.get_source(),
emacs_token: emacs,
}) })
} }

View File

@ -55,20 +55,21 @@ fn read_stdin_to_string() -> Result<String, Box<dyn std::error::Error>> {
fn run_compare<P: AsRef<str>>(org_contents: P) -> Result<(), Box<dyn std::error::Error>> { fn run_compare<P: AsRef<str>>(org_contents: P) -> Result<(), Box<dyn std::error::Error>> {
let emacs_version = get_emacs_version()?; let emacs_version = get_emacs_version()?;
let org_mode_version = get_org_mode_version()?; let org_mode_version = get_org_mode_version()?;
let org_contents = org_contents.as_ref();
eprintln!("Using emacs version: {}", emacs_version.trim()); eprintln!("Using emacs version: {}", emacs_version.trim());
eprintln!("Using org-mode version: {}", org_mode_version.trim()); eprintln!("Using org-mode version: {}", org_mode_version.trim());
let (remaining, rust_parsed) = document(org_contents.as_ref()).map_err(|e| e.to_string())?; let (remaining, rust_parsed) = document(org_contents).map_err(|e| e.to_string())?;
let org_sexp = emacs_parse_org_document(org_contents.as_ref())?; let org_sexp = emacs_parse_org_document(org_contents)?;
let (_remaining, parsed_sexp) = let (_remaining, parsed_sexp) =
sexp_with_padding(org_sexp.as_str()).map_err(|e| e.to_string())?; sexp_with_padding(org_sexp.as_str()).map_err(|e| e.to_string())?;
println!("{}\n\n\n", org_contents.as_ref()); println!("{}\n\n\n", org_contents);
println!("{}", org_sexp); println!("{}", org_sexp);
println!("{:#?}", rust_parsed); println!("{:#?}", rust_parsed);
// We do the diffing after printing out both parsed forms in case the diffing panics // We do the diffing after printing out both parsed forms in case the diffing panics
let diff_result = compare_document(&parsed_sexp, &rust_parsed)?; let diff_result = compare_document(&parsed_sexp, &rust_parsed)?;
diff_result.print()?; diff_result.print(org_contents)?;
if diff_result.is_bad() { if diff_result.is_bad() {
Err("Diff results do not match.")?; Err("Diff results do not match.")?;

View File

@ -374,3 +374,9 @@ impl<'s> Source<'s> for Timestamp<'s> {
self.source self.source
} }
} }
impl<'s> Source<'s> for PlainText<'s> {
fn get_source(&'s self) -> &'s str {
self.source
}
}