From 418c5c1ce8e281bca252b213e22ac9fd45ce57aa Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Mon, 2 Oct 2023 12:53:23 -0400 Subject: [PATCH] Implement the traits for all ast node types. --- src/compare/diff.rs | 356 +++++++++++++++++++------------------- src/compare/elisp_fact.rs | 110 ++++++------ src/compare/util.rs | 26 +-- src/iter/ast_node.rs | 110 ++++++------ 4 files changed, 303 insertions(+), 299 deletions(-) diff --git a/src/compare/diff.rs b/src/compare/diff.rs index 0861c32..91a4054 100644 --- a/src/compare/diff.rs +++ b/src/compare/diff.rs @@ -306,61 +306,61 @@ fn compare_ast_node<'b, 's>( rust: AstNode<'b, 's>, ) -> Result, Box> { let compare_result: Result, Box> = match rust { - AstNode::Document(_) => todo!(), - AstNode::Heading(_) => todo!(), - AstNode::Section(_) => todo!(), - AstNode::Paragraph(_) => todo!(), - AstNode::PlainList(_) => todo!(), - AstNode::PlainListItem(_) => todo!(), - AstNode::GreaterBlock(_) => todo!(), - AstNode::DynamicBlock(_) => todo!(), - AstNode::FootnoteDefinition(_) => todo!(), - AstNode::Comment(_) => todo!(), - AstNode::Drawer(_) => todo!(), - AstNode::PropertyDrawer(_) => todo!(), - AstNode::NodeProperty(_) => todo!(), - AstNode::Table(_) => todo!(), - AstNode::TableRow(_) => todo!(), - AstNode::VerseBlock(_) => todo!(), - AstNode::CommentBlock(_) => todo!(), - AstNode::ExampleBlock(_) => todo!(), - AstNode::ExportBlock(_) => todo!(), - AstNode::SrcBlock(_) => todo!(), - AstNode::Clock(_) => todo!(), - AstNode::DiarySexp(_) => todo!(), - AstNode::Planning(_) => todo!(), - AstNode::FixedWidthArea(_) => todo!(), - AstNode::HorizontalRule(_) => todo!(), - AstNode::Keyword(_) => todo!(), - AstNode::BabelCall(_) => todo!(), - AstNode::LatexEnvironment(_) => todo!(), - AstNode::Bold(_) => todo!(), - AstNode::Italic(_) => todo!(), - AstNode::Underline(_) => todo!(), - AstNode::StrikeThrough(_) => todo!(), - AstNode::Code(_) => todo!(), - AstNode::Verbatim(_) => todo!(), - AstNode::PlainText(_) => todo!(), - AstNode::RegularLink(_) => todo!(), - AstNode::RadioLink(_) => todo!(), - AstNode::RadioTarget(_) => todo!(), - AstNode::PlainLink(_) => todo!(), - AstNode::AngleLink(_) => todo!(), - AstNode::OrgMacro(_) => todo!(), - AstNode::Entity(_) => todo!(), - AstNode::LatexFragment(_) => todo!(), - AstNode::ExportSnippet(_) => todo!(), - AstNode::FootnoteReference(_) => todo!(), - AstNode::Citation(_) => todo!(), - AstNode::CitationReference(_) => todo!(), - AstNode::InlineBabelCall(_) => todo!(), - AstNode::InlineSourceBlock(_) => todo!(), - AstNode::LineBreak(_) => todo!(), - AstNode::Target(_) => todo!(), - AstNode::StatisticsCookie(_) => todo!(), - AstNode::Subscript(_) => todo!(), - AstNode::Superscript(_) => todo!(), - AstNode::TableCell(_) => todo!(), + AstNode::Document(node) => compare_document(emacs, node), + AstNode::Heading(node) => compare_heading(source, emacs, node), + AstNode::Section(node) => compare_section(source, emacs, node), + AstNode::Paragraph(node) => compare_paragraph(source, emacs, node), + AstNode::PlainList(node) => compare_plain_list(source, emacs, node), + AstNode::PlainListItem(node) => compare_plain_list_item(source, emacs, node), + AstNode::GreaterBlock(node) => compare_greater_block(source, emacs, node), + AstNode::DynamicBlock(node) => compare_dynamic_block(source, emacs, node), + AstNode::FootnoteDefinition(node) => compare_footnote_definition(source, emacs, node), + AstNode::Comment(node) => compare_comment(source, emacs, node), + AstNode::Drawer(node) => compare_drawer(source, emacs, node), + AstNode::PropertyDrawer(node) => compare_property_drawer(source, emacs, node), + AstNode::NodeProperty(node) => compare_node_property(source, emacs, node), + AstNode::Table(node) => compare_table(source, emacs, node), + AstNode::TableRow(node) => compare_table_row(source, emacs, node), + AstNode::VerseBlock(node) => compare_verse_block(source, emacs, node), + AstNode::CommentBlock(node) => compare_comment_block(source, emacs, node), + AstNode::ExampleBlock(node) => compare_example_block(source, emacs, node), + AstNode::ExportBlock(node) => compare_export_block(source, emacs, node), + AstNode::SrcBlock(node) => compare_src_block(source, emacs, node), + AstNode::Clock(node) => compare_clock(source, emacs, node), + AstNode::DiarySexp(node) => compare_diary_sexp(source, emacs, node), + AstNode::Planning(node) => compare_planning(source, emacs, node), + AstNode::FixedWidthArea(node) => compare_fixed_width_area(source, emacs, node), + AstNode::HorizontalRule(node) => compare_horizontal_rule(source, emacs, node), + AstNode::Keyword(node) => compare_keyword(source, emacs, node), + AstNode::BabelCall(node) => compare_babel_call(source, emacs, node), + AstNode::LatexEnvironment(node) => compare_latex_environment(source, emacs, node), + AstNode::Bold(node) => compare_bold(source, emacs, node), + AstNode::Italic(node) => compare_italic(source, emacs, node), + AstNode::Underline(node) => compare_underline(source, emacs, node), + AstNode::StrikeThrough(node) => compare_strike_through(source, emacs, node), + AstNode::Code(node) => compare_code(source, emacs, node), + AstNode::Verbatim(node) => compare_verbatim(source, emacs, node), + AstNode::PlainText(node) => compare_plain_text(source, emacs, node), + AstNode::RegularLink(node) => compare_regular_link(source, emacs, node), + AstNode::RadioLink(node) => compare_radio_link(source, emacs, node), + AstNode::RadioTarget(node) => compare_radio_target(source, emacs, node), + AstNode::PlainLink(node) => compare_plain_link(source, emacs, node), + AstNode::AngleLink(node) => compare_angle_link(source, emacs, node), + AstNode::OrgMacro(node) => compare_org_macro(source, emacs, node), + AstNode::Entity(node) => compare_entity(source, emacs, node), + AstNode::LatexFragment(node) => compare_latex_fragment(source, emacs, node), + AstNode::ExportSnippet(node) => compare_export_snippet(source, emacs, node), + AstNode::FootnoteReference(node) => compare_footnote_reference(source, emacs, node), + AstNode::Citation(node) => compare_citation(source, emacs, node), + AstNode::CitationReference(node) => compare_citation_reference(source, emacs, node), + AstNode::InlineBabelCall(node) => compare_inline_babel_call(source, emacs, node), + AstNode::InlineSourceBlock(node) => compare_inline_source_block(source, emacs, node), + AstNode::LineBreak(node) => compare_line_break(source, emacs, node), + AstNode::Target(node) => compare_target(source, emacs, node), + AstNode::StatisticsCookie(node) => compare_statistics_cookie(source, emacs, node), + AstNode::Subscript(node) => compare_subscript(source, emacs, node), + AstNode::Superscript(node) => compare_superscript(source, emacs, node), + AstNode::TableCell(node) => compare_table_cell(source, emacs, node), AstNode::Timestamp(node) => compare_timestamp(source, emacs, node), }; @@ -381,12 +381,16 @@ fn compare_ast_node<'b, 's>( } }; - match compare_standard_properties(source, emacs, &rust) { - Err(err) => { - compare_result.status = DiffStatus::Bad; - compare_result.message = Some(err.to_string()) + // PlainText is a special case because upstream Org-Mode uses relative values for the bounds in plaintext rather than absolute so the below checks do not account for that. + if let AstNode::PlainText(_) = rust { + } else { + match compare_standard_properties(source, emacs, &rust) { + Err(err) => { + compare_result.status = DiffStatus::Bad; + compare_result.message = Some(err.to_string()) + } + Ok(_) => {} } - Ok(_) => {} } Ok(compare_result.into()) @@ -394,8 +398,8 @@ fn compare_ast_node<'b, 's>( fn compare_element<'b, 's>( source: &'s str, - emacs: &'s Token<'s>, - rust: &'s Element<'s>, + emacs: &'b Token<'s>, + rust: &'b Element<'s>, ) -> Result, Box> { let compare_result = match rust { Element::Paragraph(obj) => compare_paragraph(source, emacs, obj), @@ -452,8 +456,8 @@ fn compare_element<'b, 's>( fn compare_object<'b, 's>( source: &'s str, - emacs: &'s Token<'s>, - rust: &'s Object<'s>, + emacs: &'b Token<'s>, + rust: &'b Object<'s>, ) -> Result, Box> { let compare_result = match rust { Object::Bold(obj) => compare_bold(source, emacs, obj), @@ -517,8 +521,8 @@ fn compare_object<'b, 's>( } pub fn compare_document<'b, 's>( - emacs: &'s Token<'s>, - rust: &'s Document<'s>, + emacs: &'b Token<'s>, + rust: &'b Document<'s>, ) -> Result, Box> { let children = emacs.as_list()?; let mut child_status = Vec::new(); @@ -627,8 +631,8 @@ pub fn compare_document<'b, 's>( fn compare_section<'b, 's>( source: &'s str, - emacs: &'s Token<'s>, - rust: &'s Section<'s>, + emacs: &'b Token<'s>, + rust: &'b Section<'s>, ) -> Result, Box> { let children = emacs.as_list()?; let mut this_status = DiffStatus::Good; @@ -660,8 +664,8 @@ fn compare_section<'b, 's>( fn compare_heading<'b, 's>( source: &'s str, - emacs: &'s Token<'s>, - rust: &'s Heading<'s>, + emacs: &'b Token<'s>, + rust: &'b Heading<'s>, ) -> Result, Box> { let children = emacs.as_list()?; let mut child_status = Vec::new(); @@ -861,8 +865,8 @@ fn compare_heading<'b, 's>( .into()) } -fn get_tags_from_heading<'s>( - emacs: &'s Token<'s>, +fn get_tags_from_heading<'b, 's>( + emacs: &'b Token<'s>, ) -> Result, Box> { let tags = match get_property(emacs, ":tags")? { Some(prop) => prop, @@ -889,8 +893,8 @@ fn get_tags_from_heading<'s>( fn compare_paragraph<'b, 's>( source: &'s str, - emacs: &'s Token<'s>, - rust: &'s Paragraph<'s>, + emacs: &'b Token<'s>, + rust: &'b Paragraph<'s>, ) -> Result, Box> { let children = emacs.as_list()?; let mut child_status = Vec::new(); @@ -914,8 +918,8 @@ fn compare_paragraph<'b, 's>( fn compare_plain_list<'b, 's>( source: &'s str, - emacs: &'s Token<'s>, - rust: &'s PlainList<'s>, + emacs: &'b Token<'s>, + rust: &'b PlainList<'s>, ) -> Result, Box> { let children = emacs.as_list()?; let mut child_status = Vec::new(); @@ -956,8 +960,8 @@ fn compare_plain_list<'b, 's>( fn compare_plain_list_item<'b, 's>( source: &'s str, - emacs: &'s Token<'s>, - rust: &'s PlainListItem<'s>, + emacs: &'b Token<'s>, + rust: &'b PlainListItem<'s>, ) -> Result, Box> { let children = emacs.as_list()?; let mut child_status = Vec::new(); @@ -1081,8 +1085,8 @@ fn compare_plain_list_item<'b, 's>( fn compare_greater_block<'b, 's>( source: &'s str, - emacs: &'s Token<'s>, - rust: &'s GreaterBlock<'s>, + emacs: &'b Token<'s>, + rust: &'b GreaterBlock<'s>, ) -> Result, Box> { let children = emacs.as_list()?; let mut child_status = Vec::new(); @@ -1108,8 +1112,8 @@ fn compare_greater_block<'b, 's>( fn compare_dynamic_block<'b, 's>( source: &'s str, - emacs: &'s Token<'s>, - rust: &'s DynamicBlock<'s>, + emacs: &'b Token<'s>, + rust: &'b DynamicBlock<'s>, ) -> Result, Box> { let children = emacs.as_list()?; let mut child_status = Vec::new(); @@ -1134,8 +1138,8 @@ fn compare_dynamic_block<'b, 's>( fn compare_footnote_definition<'b, 's>( source: &'s str, - emacs: &'s Token<'s>, - rust: &'s FootnoteDefinition<'s>, + emacs: &'b Token<'s>, + rust: &'b FootnoteDefinition<'s>, ) -> Result, Box> { let children = emacs.as_list()?; let mut child_status = Vec::new(); @@ -1160,8 +1164,8 @@ fn compare_footnote_definition<'b, 's>( fn compare_comment<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s Comment<'s>, + emacs: &'b Token<'s>, + rust: &'b Comment<'s>, ) -> Result, Box> { let child_status = Vec::new(); let this_status = DiffStatus::Good; @@ -1181,8 +1185,8 @@ fn compare_comment<'b, 's>( fn compare_drawer<'b, 's>( source: &'s str, - emacs: &'s Token<'s>, - rust: &'s Drawer<'s>, + emacs: &'b Token<'s>, + rust: &'b Drawer<'s>, ) -> Result, Box> { let children = emacs.as_list()?; let mut child_status = Vec::new(); @@ -1207,8 +1211,8 @@ fn compare_drawer<'b, 's>( fn compare_property_drawer<'b, 's>( source: &'s str, - emacs: &'s Token<'s>, - rust: &'s PropertyDrawer<'s>, + emacs: &'b Token<'s>, + rust: &'b PropertyDrawer<'s>, ) -> Result, Box> { let children = emacs.as_list()?; let mut child_status = Vec::new(); @@ -1232,8 +1236,8 @@ fn compare_property_drawer<'b, 's>( fn compare_node_property<'b, 's>( source: &'s str, - emacs: &'s Token<'s>, - rust: &'s NodeProperty<'s>, + emacs: &'b Token<'s>, + rust: &'b NodeProperty<'s>, ) -> Result, Box> { let child_status = Vec::new(); let mut this_status = DiffStatus::Good; @@ -1262,8 +1266,8 @@ fn compare_node_property<'b, 's>( fn compare_table<'b, 's>( source: &'s str, - emacs: &'s Token<'s>, - rust: &'s Table<'s>, + emacs: &'b Token<'s>, + rust: &'b Table<'s>, ) -> Result, Box> { let children = emacs.as_list()?; let mut child_status = Vec::new(); @@ -1327,8 +1331,8 @@ fn compare_table<'b, 's>( fn compare_table_row<'b, 's>( source: &'s str, - emacs: &'s Token<'s>, - rust: &'s TableRow<'s>, + emacs: &'b Token<'s>, + rust: &'b TableRow<'s>, ) -> Result, Box> { let children = emacs.as_list()?; let mut child_status = Vec::new(); @@ -1364,8 +1368,8 @@ fn compare_table_row<'b, 's>( fn compare_table_cell<'b, 's>( source: &'s str, - emacs: &'s Token<'s>, - rust: &'s TableCell<'s>, + emacs: &'b Token<'s>, + rust: &'b TableCell<'s>, ) -> Result, Box> { let children = emacs.as_list()?; let child_status = Vec::new(); @@ -1395,8 +1399,8 @@ fn compare_table_cell<'b, 's>( fn compare_verse_block<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s VerseBlock<'s>, + emacs: &'b Token<'s>, + rust: &'b VerseBlock<'s>, ) -> Result, Box> { let children = emacs.as_list()?; let child_status = Vec::new(); @@ -1418,8 +1422,8 @@ fn compare_verse_block<'b, 's>( fn compare_comment_block<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s CommentBlock<'s>, + emacs: &'b Token<'s>, + rust: &'b CommentBlock<'s>, ) -> Result, Box> { let this_status = DiffStatus::Good; let message = None; @@ -1439,8 +1443,8 @@ fn compare_comment_block<'b, 's>( fn compare_example_block<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s ExampleBlock<'s>, + emacs: &'b Token<'s>, + rust: &'b ExampleBlock<'s>, ) -> Result, Box> { let this_status = DiffStatus::Good; let message = None; @@ -1460,8 +1464,8 @@ fn compare_example_block<'b, 's>( fn compare_export_block<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s ExportBlock<'s>, + emacs: &'b Token<'s>, + rust: &'b ExportBlock<'s>, ) -> Result, Box> { let this_status = DiffStatus::Good; let message = None; @@ -1481,8 +1485,8 @@ fn compare_export_block<'b, 's>( fn compare_src_block<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s SrcBlock<'s>, + emacs: &'b Token<'s>, + rust: &'b SrcBlock<'s>, ) -> Result, Box> { let this_status = DiffStatus::Good; let message = None; @@ -1502,8 +1506,8 @@ fn compare_src_block<'b, 's>( fn compare_clock<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s Clock<'s>, + emacs: &'b Token<'s>, + rust: &'b Clock<'s>, ) -> Result, Box> { let this_status = DiffStatus::Good; let message = None; @@ -1523,8 +1527,8 @@ fn compare_clock<'b, 's>( fn compare_diary_sexp<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s DiarySexp<'s>, + emacs: &'b Token<'s>, + rust: &'b DiarySexp<'s>, ) -> Result, Box> { let this_status = DiffStatus::Good; let message = None; @@ -1544,8 +1548,8 @@ fn compare_diary_sexp<'b, 's>( fn compare_planning<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s Planning<'s>, + emacs: &'b Token<'s>, + rust: &'b Planning<'s>, ) -> Result, Box> { let this_status = DiffStatus::Good; let message = None; @@ -1565,8 +1569,8 @@ fn compare_planning<'b, 's>( fn compare_fixed_width_area<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s FixedWidthArea<'s>, + emacs: &'b Token<'s>, + rust: &'b FixedWidthArea<'s>, ) -> Result, Box> { let child_status = Vec::new(); let this_status = DiffStatus::Good; @@ -1587,8 +1591,8 @@ fn compare_fixed_width_area<'b, 's>( fn compare_horizontal_rule<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s HorizontalRule<'s>, + emacs: &'b Token<'s>, + rust: &'b HorizontalRule<'s>, ) -> Result, Box> { let child_status = Vec::new(); let this_status = DiffStatus::Good; @@ -1607,8 +1611,8 @@ fn compare_horizontal_rule<'b, 's>( fn compare_keyword<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s Keyword<'s>, + emacs: &'b Token<'s>, + rust: &'b Keyword<'s>, ) -> Result, Box> { let child_status = Vec::new(); let mut this_status = DiffStatus::Good; @@ -1652,8 +1656,8 @@ fn compare_keyword<'b, 's>( fn compare_babel_call<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s BabelCall<'s>, + emacs: &'b Token<'s>, + rust: &'b BabelCall<'s>, ) -> Result, Box> { let child_status = Vec::new(); let mut this_status = DiffStatus::Good; @@ -1686,8 +1690,8 @@ fn compare_babel_call<'b, 's>( fn compare_latex_environment<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s LatexEnvironment<'s>, + emacs: &'b Token<'s>, + rust: &'b LatexEnvironment<'s>, ) -> Result, Box> { let child_status = Vec::new(); let this_status = DiffStatus::Good; @@ -1708,8 +1712,8 @@ fn compare_latex_environment<'b, 's>( fn compare_plain_text<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s PlainText<'s>, + emacs: &'b Token<'s>, + rust: &'b PlainText<'s>, ) -> Result, Box> { let mut this_status = DiffStatus::Good; let mut message = None; @@ -1758,8 +1762,8 @@ fn compare_plain_text<'b, 's>( fn compare_bold<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s Bold<'s>, + emacs: &'b Token<'s>, + rust: &'b Bold<'s>, ) -> Result, Box> { let this_status = DiffStatus::Good; let message = None; @@ -1777,8 +1781,8 @@ fn compare_bold<'b, 's>( fn compare_italic<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s Italic<'s>, + emacs: &'b Token<'s>, + rust: &'b Italic<'s>, ) -> Result, Box> { let this_status = DiffStatus::Good; let message = None; @@ -1796,8 +1800,8 @@ fn compare_italic<'b, 's>( fn compare_underline<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s Underline<'s>, + emacs: &'b Token<'s>, + rust: &'b Underline<'s>, ) -> Result, Box> { let this_status = DiffStatus::Good; let message = None; @@ -1815,8 +1819,8 @@ fn compare_underline<'b, 's>( fn compare_verbatim<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s Verbatim<'s>, + emacs: &'b Token<'s>, + rust: &'b Verbatim<'s>, ) -> Result, Box> { let this_status = DiffStatus::Good; let message = None; @@ -1836,8 +1840,8 @@ fn compare_verbatim<'b, 's>( fn compare_code<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s Code<'s>, + emacs: &'b Token<'s>, + rust: &'b Code<'s>, ) -> Result, Box> { let this_status = DiffStatus::Good; let message = None; @@ -1857,8 +1861,8 @@ fn compare_code<'b, 's>( fn compare_strike_through<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s StrikeThrough<'s>, + emacs: &'b Token<'s>, + rust: &'b StrikeThrough<'s>, ) -> Result, Box> { let this_status = DiffStatus::Good; let message = None; @@ -1876,8 +1880,8 @@ fn compare_strike_through<'b, 's>( fn compare_regular_link<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s RegularLink<'s>, + emacs: &'b Token<'s>, + rust: &'b RegularLink<'s>, ) -> Result, Box> { let this_status = DiffStatus::Good; let message = None; @@ -1897,8 +1901,8 @@ fn compare_regular_link<'b, 's>( fn compare_radio_link<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s RadioLink<'s>, + emacs: &'b Token<'s>, + rust: &'b RadioLink<'s>, ) -> Result, Box> { let this_status = DiffStatus::Good; let message = None; @@ -1918,8 +1922,8 @@ fn compare_radio_link<'b, 's>( fn compare_radio_target<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s RadioTarget<'s>, + emacs: &'b Token<'s>, + rust: &'b RadioTarget<'s>, ) -> Result, Box> { let this_status = DiffStatus::Good; let message = None; @@ -1939,8 +1943,8 @@ fn compare_radio_target<'b, 's>( fn compare_plain_link<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s PlainLink<'s>, + emacs: &'b Token<'s>, + rust: &'b PlainLink<'s>, ) -> Result, Box> { let this_status = DiffStatus::Good; let message = None; @@ -1960,8 +1964,8 @@ fn compare_plain_link<'b, 's>( fn compare_angle_link<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s AngleLink<'s>, + emacs: &'b Token<'s>, + rust: &'b AngleLink<'s>, ) -> Result, Box> { let this_status = DiffStatus::Good; let message = None; @@ -1981,8 +1985,8 @@ fn compare_angle_link<'b, 's>( fn compare_org_macro<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s OrgMacro<'s>, + emacs: &'b Token<'s>, + rust: &'b OrgMacro<'s>, ) -> Result, Box> { let this_status = DiffStatus::Good; let message = None; @@ -2002,8 +2006,8 @@ fn compare_org_macro<'b, 's>( fn compare_entity<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s Entity<'s>, + emacs: &'b Token<'s>, + rust: &'b Entity<'s>, ) -> Result, Box> { let this_status = DiffStatus::Good; let message = None; @@ -2023,8 +2027,8 @@ fn compare_entity<'b, 's>( fn compare_latex_fragment<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s LatexFragment<'s>, + emacs: &'b Token<'s>, + rust: &'b LatexFragment<'s>, ) -> Result, Box> { let this_status = DiffStatus::Good; let message = None; @@ -2044,8 +2048,8 @@ fn compare_latex_fragment<'b, 's>( fn compare_export_snippet<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s ExportSnippet<'s>, + emacs: &'b Token<'s>, + rust: &'b ExportSnippet<'s>, ) -> Result, Box> { let this_status = DiffStatus::Good; let message = None; @@ -2065,8 +2069,8 @@ fn compare_export_snippet<'b, 's>( fn compare_footnote_reference<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s FootnoteReference<'s>, + emacs: &'b Token<'s>, + rust: &'b FootnoteReference<'s>, ) -> Result, Box> { let this_status = DiffStatus::Good; let message = None; @@ -2086,8 +2090,8 @@ fn compare_footnote_reference<'b, 's>( fn compare_citation<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s Citation<'s>, + emacs: &'b Token<'s>, + rust: &'b Citation<'s>, ) -> Result, Box> { let this_status = DiffStatus::Good; let message = None; @@ -2107,8 +2111,8 @@ fn compare_citation<'b, 's>( fn compare_citation_reference<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s CitationReference<'s>, + emacs: &'b Token<'s>, + rust: &'b CitationReference<'s>, ) -> Result, Box> { let this_status = DiffStatus::Good; let message = None; @@ -2128,8 +2132,8 @@ fn compare_citation_reference<'b, 's>( fn compare_inline_babel_call<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s InlineBabelCall<'s>, + emacs: &'b Token<'s>, + rust: &'b InlineBabelCall<'s>, ) -> Result, Box> { let this_status = DiffStatus::Good; let message = None; @@ -2149,8 +2153,8 @@ fn compare_inline_babel_call<'b, 's>( fn compare_inline_source_block<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s InlineSourceBlock<'s>, + emacs: &'b Token<'s>, + rust: &'b InlineSourceBlock<'s>, ) -> Result, Box> { let this_status = DiffStatus::Good; let message = None; @@ -2170,8 +2174,8 @@ fn compare_inline_source_block<'b, 's>( fn compare_line_break<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s LineBreak<'s>, + emacs: &'b Token<'s>, + rust: &'b LineBreak<'s>, ) -> Result, Box> { let this_status = DiffStatus::Good; let message = None; @@ -2189,8 +2193,8 @@ fn compare_line_break<'b, 's>( fn compare_target<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s Target<'s>, + emacs: &'b Token<'s>, + rust: &'b Target<'s>, ) -> Result, Box> { let this_status = DiffStatus::Good; let message = None; @@ -2210,8 +2214,8 @@ fn compare_target<'b, 's>( fn compare_statistics_cookie<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s StatisticsCookie<'s>, + emacs: &'b Token<'s>, + rust: &'b StatisticsCookie<'s>, ) -> Result, Box> { let this_status = DiffStatus::Good; let message = None; @@ -2231,8 +2235,8 @@ fn compare_statistics_cookie<'b, 's>( fn compare_subscript<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s Subscript<'s>, + emacs: &'b Token<'s>, + rust: &'b Subscript<'s>, ) -> Result, Box> { let this_status = DiffStatus::Good; let message = None; @@ -2252,8 +2256,8 @@ fn compare_subscript<'b, 's>( fn compare_superscript<'b, 's>( _source: &'s str, - emacs: &'s Token<'s>, - rust: &'s Superscript<'s>, + emacs: &'b Token<'s>, + rust: &'b Superscript<'s>, ) -> Result, Box> { let this_status = DiffStatus::Good; let message = None; diff --git a/src/compare/elisp_fact.rs b/src/compare/elisp_fact.rs index abe20ef..a1c1fc8 100644 --- a/src/compare/elisp_fact.rs +++ b/src/compare/elisp_fact.rs @@ -77,61 +77,61 @@ impl<'s, I: ElispFact<'s>> GetElispFact<'s> for I { impl<'r, 's> GetElispFact<'s> for AstNode<'r, 's> { fn get_elisp_fact<'b>(&'b self) -> &'b dyn ElispFact<'s> { match self { - AstNode::Document(_) => todo!(), - AstNode::Heading(_) => todo!(), - AstNode::Section(_) => todo!(), - AstNode::Paragraph(_) => todo!(), - AstNode::PlainList(_) => todo!(), - AstNode::PlainListItem(_) => todo!(), - AstNode::GreaterBlock(_) => todo!(), - AstNode::DynamicBlock(_) => todo!(), - AstNode::FootnoteDefinition(_) => todo!(), - AstNode::Comment(_) => todo!(), - AstNode::Drawer(_) => todo!(), - AstNode::PropertyDrawer(_) => todo!(), - AstNode::NodeProperty(_) => todo!(), - AstNode::Table(_) => todo!(), - AstNode::TableRow(_) => todo!(), - AstNode::VerseBlock(_) => todo!(), - AstNode::CommentBlock(_) => todo!(), - AstNode::ExampleBlock(_) => todo!(), - AstNode::ExportBlock(_) => todo!(), - AstNode::SrcBlock(_) => todo!(), - AstNode::Clock(_) => todo!(), - AstNode::DiarySexp(_) => todo!(), - AstNode::Planning(_) => todo!(), - AstNode::FixedWidthArea(_) => todo!(), - AstNode::HorizontalRule(_) => todo!(), - AstNode::Keyword(_) => todo!(), - AstNode::BabelCall(_) => todo!(), - AstNode::LatexEnvironment(_) => todo!(), - AstNode::Bold(_) => todo!(), - AstNode::Italic(_) => todo!(), - AstNode::Underline(_) => todo!(), - AstNode::StrikeThrough(_) => todo!(), - AstNode::Code(_) => todo!(), - AstNode::Verbatim(_) => todo!(), - AstNode::PlainText(_) => todo!(), - AstNode::RegularLink(_) => todo!(), - AstNode::RadioLink(_) => todo!(), - AstNode::RadioTarget(_) => todo!(), - AstNode::PlainLink(_) => todo!(), - AstNode::AngleLink(_) => todo!(), - AstNode::OrgMacro(_) => todo!(), - AstNode::Entity(_) => todo!(), - AstNode::LatexFragment(_) => todo!(), - AstNode::ExportSnippet(_) => todo!(), - AstNode::FootnoteReference(_) => todo!(), - AstNode::Citation(_) => todo!(), - AstNode::CitationReference(_) => todo!(), - AstNode::InlineBabelCall(_) => todo!(), - AstNode::InlineSourceBlock(_) => todo!(), - AstNode::LineBreak(_) => todo!(), - AstNode::Target(_) => todo!(), - AstNode::StatisticsCookie(_) => todo!(), - AstNode::Subscript(_) => todo!(), - AstNode::Superscript(_) => todo!(), - AstNode::TableCell(_) => todo!(), + AstNode::Document(inner) => *inner, + AstNode::Heading(inner) => *inner, + AstNode::Section(inner) => *inner, + AstNode::Paragraph(inner) => *inner, + AstNode::PlainList(inner) => *inner, + AstNode::PlainListItem(inner) => *inner, + AstNode::GreaterBlock(inner) => *inner, + AstNode::DynamicBlock(inner) => *inner, + AstNode::FootnoteDefinition(inner) => *inner, + AstNode::Comment(inner) => *inner, + AstNode::Drawer(inner) => *inner, + AstNode::PropertyDrawer(inner) => *inner, + AstNode::NodeProperty(inner) => *inner, + AstNode::Table(inner) => *inner, + AstNode::TableRow(inner) => *inner, + AstNode::VerseBlock(inner) => *inner, + AstNode::CommentBlock(inner) => *inner, + AstNode::ExampleBlock(inner) => *inner, + AstNode::ExportBlock(inner) => *inner, + AstNode::SrcBlock(inner) => *inner, + AstNode::Clock(inner) => *inner, + AstNode::DiarySexp(inner) => *inner, + AstNode::Planning(inner) => *inner, + AstNode::FixedWidthArea(inner) => *inner, + AstNode::HorizontalRule(inner) => *inner, + AstNode::Keyword(inner) => *inner, + AstNode::BabelCall(inner) => *inner, + AstNode::LatexEnvironment(inner) => *inner, + AstNode::Bold(inner) => *inner, + AstNode::Italic(inner) => *inner, + AstNode::Underline(inner) => *inner, + AstNode::StrikeThrough(inner) => *inner, + AstNode::Code(inner) => *inner, + AstNode::Verbatim(inner) => *inner, + AstNode::PlainText(inner) => *inner, + AstNode::RegularLink(inner) => *inner, + AstNode::RadioLink(inner) => *inner, + AstNode::RadioTarget(inner) => *inner, + AstNode::PlainLink(inner) => *inner, + AstNode::AngleLink(inner) => *inner, + AstNode::OrgMacro(inner) => *inner, + AstNode::Entity(inner) => *inner, + AstNode::LatexFragment(inner) => *inner, + AstNode::ExportSnippet(inner) => *inner, + AstNode::FootnoteReference(inner) => *inner, + AstNode::Citation(inner) => *inner, + AstNode::CitationReference(inner) => *inner, + AstNode::InlineBabelCall(inner) => *inner, + AstNode::InlineSourceBlock(inner) => *inner, + AstNode::LineBreak(inner) => *inner, + AstNode::Target(inner) => *inner, + AstNode::StatisticsCookie(inner) => *inner, + AstNode::Subscript(inner) => *inner, + AstNode::Superscript(inner) => *inner, + AstNode::TableCell(inner) => *inner, AstNode::Timestamp(inner) => *inner, } } diff --git a/src/compare/util.rs b/src/compare/util.rs index b57a92f..9c001f2 100644 --- a/src/compare/util.rs +++ b/src/compare/util.rs @@ -41,8 +41,8 @@ pub(crate) fn compare_standard_properties< Ok(()) } -pub(crate) fn assert_name<'s, S: AsRef>( - emacs: &'s Token<'s>, +pub(crate) fn assert_name<'b, 's, S: AsRef>( + emacs: &'b Token<'s>, name: S, ) -> Result<(), Box> { let name = name.as_ref(); @@ -100,8 +100,8 @@ struct EmacsStandardProperties { post_blank: Option, } -fn get_emacs_standard_properties<'s>( - emacs: &'s Token<'s>, +fn get_emacs_standard_properties<'b, 's>( + emacs: &'b Token<'s>, ) -> Result> { let children = emacs.as_list()?; let attributes_child = children @@ -173,10 +173,10 @@ fn maybe_token_to_usize( /// Returns Ok(None) if value is nil. /// /// Returns error if the attribute is not specified on the token at all. -pub(crate) fn get_property<'s, 'x>( - emacs: &'s Token<'s>, +pub(crate) fn get_property<'b, 's, 'x>( + emacs: &'b Token<'s>, key: &'x str, -) -> Result>, Box> { +) -> Result>, Box> { let children = emacs.as_list()?; let attributes_child = children .iter() @@ -196,8 +196,8 @@ pub(crate) fn get_property<'s, 'x>( /// Get a named property containing an unquoted atom from the emacs token. /// /// Returns None if key is not found. -pub(crate) fn get_property_unquoted_atom<'s, 'x>( - emacs: &'s Token<'s>, +pub(crate) fn get_property_unquoted_atom<'b, 's, 'x>( + emacs: &'b Token<'s>, key: &'x str, ) -> Result, Box> { Ok(get_property(emacs, key)? @@ -208,8 +208,8 @@ pub(crate) fn get_property_unquoted_atom<'s, 'x>( /// Get a named property containing an quoted string from the emacs token. /// /// Returns None if key is not found. -pub(crate) fn get_property_quoted_string<'s, 'x>( - emacs: &'s Token<'s>, +pub(crate) fn get_property_quoted_string<'b, 's, 'x>( + emacs: &'b Token<'s>, key: &'x str, ) -> Result, Box> { Ok(get_property(emacs, key)? @@ -224,8 +224,8 @@ pub(crate) fn get_property_quoted_string<'s, 'x>( /// This uses the elisp convention of nil == false, non-nil == true. /// /// Returns false if key is not found. -pub(crate) fn get_property_boolean<'s, 'x>( - emacs: &'s Token<'s>, +pub(crate) fn get_property_boolean<'b, 's, 'x>( + emacs: &'b Token<'s>, key: &'x str, ) -> Result> { Ok(get_property(emacs, key)? diff --git a/src/iter/ast_node.rs b/src/iter/ast_node.rs index 2de5742..e925f74 100644 --- a/src/iter/ast_node.rs +++ b/src/iter/ast_node.rs @@ -254,61 +254,61 @@ to_ast_node!(&'r Timestamp<'s>, AstNode::Timestamp); impl<'r, 's> GetStandardProperties<'s> for AstNode<'r, 's> { fn get_standard_properties<'b>(&'b self) -> &'b dyn crate::types::StandardProperties<'s> { match self { - AstNode::Document(_) => todo!(), - AstNode::Heading(_) => todo!(), - AstNode::Section(_) => todo!(), - AstNode::Paragraph(_) => todo!(), - AstNode::PlainList(_) => todo!(), - AstNode::PlainListItem(_) => todo!(), - AstNode::GreaterBlock(_) => todo!(), - AstNode::DynamicBlock(_) => todo!(), - AstNode::FootnoteDefinition(_) => todo!(), - AstNode::Comment(_) => todo!(), - AstNode::Drawer(_) => todo!(), - AstNode::PropertyDrawer(_) => todo!(), - AstNode::NodeProperty(_) => todo!(), - AstNode::Table(_) => todo!(), - AstNode::TableRow(_) => todo!(), - AstNode::VerseBlock(_) => todo!(), - AstNode::CommentBlock(_) => todo!(), - AstNode::ExampleBlock(_) => todo!(), - AstNode::ExportBlock(_) => todo!(), - AstNode::SrcBlock(_) => todo!(), - AstNode::Clock(_) => todo!(), - AstNode::DiarySexp(_) => todo!(), - AstNode::Planning(_) => todo!(), - AstNode::FixedWidthArea(_) => todo!(), - AstNode::HorizontalRule(_) => todo!(), - AstNode::Keyword(_) => todo!(), - AstNode::BabelCall(_) => todo!(), - AstNode::LatexEnvironment(_) => todo!(), - AstNode::Bold(_) => todo!(), - AstNode::Italic(_) => todo!(), - AstNode::Underline(_) => todo!(), - AstNode::StrikeThrough(_) => todo!(), - AstNode::Code(_) => todo!(), - AstNode::Verbatim(_) => todo!(), - AstNode::PlainText(_) => todo!(), - AstNode::RegularLink(_) => todo!(), - AstNode::RadioLink(_) => todo!(), - AstNode::RadioTarget(_) => todo!(), - AstNode::PlainLink(_) => todo!(), - AstNode::AngleLink(_) => todo!(), - AstNode::OrgMacro(_) => todo!(), - AstNode::Entity(_) => todo!(), - AstNode::LatexFragment(_) => todo!(), - AstNode::ExportSnippet(_) => todo!(), - AstNode::FootnoteReference(_) => todo!(), - AstNode::Citation(_) => todo!(), - AstNode::CitationReference(_) => todo!(), - AstNode::InlineBabelCall(_) => todo!(), - AstNode::InlineSourceBlock(_) => todo!(), - AstNode::LineBreak(_) => todo!(), - AstNode::Target(_) => todo!(), - AstNode::StatisticsCookie(_) => todo!(), - AstNode::Subscript(_) => todo!(), - AstNode::Superscript(_) => todo!(), - AstNode::TableCell(_) => todo!(), + AstNode::Document(inner) => *inner, + AstNode::Heading(inner) => *inner, + AstNode::Section(inner) => *inner, + AstNode::Paragraph(inner) => *inner, + AstNode::PlainList(inner) => *inner, + AstNode::PlainListItem(inner) => *inner, + AstNode::GreaterBlock(inner) => *inner, + AstNode::DynamicBlock(inner) => *inner, + AstNode::FootnoteDefinition(inner) => *inner, + AstNode::Comment(inner) => *inner, + AstNode::Drawer(inner) => *inner, + AstNode::PropertyDrawer(inner) => *inner, + AstNode::NodeProperty(inner) => *inner, + AstNode::Table(inner) => *inner, + AstNode::TableRow(inner) => *inner, + AstNode::VerseBlock(inner) => *inner, + AstNode::CommentBlock(inner) => *inner, + AstNode::ExampleBlock(inner) => *inner, + AstNode::ExportBlock(inner) => *inner, + AstNode::SrcBlock(inner) => *inner, + AstNode::Clock(inner) => *inner, + AstNode::DiarySexp(inner) => *inner, + AstNode::Planning(inner) => *inner, + AstNode::FixedWidthArea(inner) => *inner, + AstNode::HorizontalRule(inner) => *inner, + AstNode::Keyword(inner) => *inner, + AstNode::BabelCall(inner) => *inner, + AstNode::LatexEnvironment(inner) => *inner, + AstNode::Bold(inner) => *inner, + AstNode::Italic(inner) => *inner, + AstNode::Underline(inner) => *inner, + AstNode::StrikeThrough(inner) => *inner, + AstNode::Code(inner) => *inner, + AstNode::Verbatim(inner) => *inner, + AstNode::PlainText(inner) => *inner, + AstNode::RegularLink(inner) => *inner, + AstNode::RadioLink(inner) => *inner, + AstNode::RadioTarget(inner) => *inner, + AstNode::PlainLink(inner) => *inner, + AstNode::AngleLink(inner) => *inner, + AstNode::OrgMacro(inner) => *inner, + AstNode::Entity(inner) => *inner, + AstNode::LatexFragment(inner) => *inner, + AstNode::ExportSnippet(inner) => *inner, + AstNode::FootnoteReference(inner) => *inner, + AstNode::Citation(inner) => *inner, + AstNode::CitationReference(inner) => *inner, + AstNode::InlineBabelCall(inner) => *inner, + AstNode::InlineSourceBlock(inner) => *inner, + AstNode::LineBreak(inner) => *inner, + AstNode::Target(inner) => *inner, + AstNode::StatisticsCookie(inner) => *inner, + AstNode::Subscript(inner) => *inner, + AstNode::Superscript(inner) => *inner, + AstNode::TableCell(inner) => *inner, AstNode::Timestamp(inner) => *inner, } }