diff --git a/src/compare/diff.rs b/src/compare/diff.rs index 6883c3b8..085a804d 100644 --- a/src/compare/diff.rs +++ b/src/compare/diff.rs @@ -1496,10 +1496,18 @@ fn compare_verse_block<'b, 's>( ) -> Result, Box> { let children = emacs.as_list()?; let child_status = Vec::new(); - let this_status = DiffStatus::Good; - let message = None; + let mut this_status = DiffStatus::Good; + let mut message = None; - // TODO: Compare :name + // Compare name + let name = get_property_quoted_string(emacs, ":name")?; + if name.as_ref().map(String::as_str) != rust.name { + this_status = DiffStatus::Bad; + message = Some(format!( + "Name mismatch (emacs != rust) {:?} != {:?}", + name, rust.name + )); + } for (_emacs_child, _rust_child) in children.iter().skip(2).zip(rust.children.iter()) {} @@ -1522,7 +1530,15 @@ fn compare_comment_block<'b, 's>( let mut this_status = DiffStatus::Good; let mut message = None; - // TODO: Compare :name + // Compare name + let name = get_property_quoted_string(emacs, ":name")?; + if name.as_ref().map(String::as_str) != rust.name { + this_status = DiffStatus::Bad; + message = Some(format!( + "Name mismatch (emacs != rust) {:?} != {:?}", + name, rust.name + )); + } // Compare value let contents = get_property_quoted_string(emacs, ":value")?.unwrap_or(String::new()); @@ -1553,7 +1569,15 @@ fn compare_example_block<'b, 's>( let mut this_status = DiffStatus::Good; let mut message = None; - // TODO: Compare :name + // Compare name + let name = get_property_quoted_string(emacs, ":name")?; + if name.as_ref().map(String::as_str) != rust.name { + this_status = DiffStatus::Bad; + message = Some(format!( + "Name mismatch (emacs != rust) {:?} != {:?}", + name, rust.name + )); + } // Compare value let contents = get_property_quoted_string(emacs, ":value")?.unwrap_or(String::new()); @@ -1716,10 +1740,20 @@ fn compare_export_block<'b, 's>( emacs: &'b Token<'s>, rust: &'b ExportBlock<'s>, ) -> Result, Box> { - let this_status = DiffStatus::Good; - let message = None; + let mut this_status = DiffStatus::Good; + let mut message = None; - // TODO: Compare :type :value :name + // TODO: Compare :type :value + + // Compare name + let name = get_property_quoted_string(emacs, ":name")?; + if name.as_ref().map(String::as_str) != rust.name { + this_status = DiffStatus::Bad; + message = Some(format!( + "Name mismatch (emacs != rust) {:?} != {:?}", + name, rust.name + )); + } Ok(DiffResult { status: this_status, @@ -1740,7 +1774,15 @@ fn compare_src_block<'b, 's>( let mut this_status = DiffStatus::Good; let mut message = None; - // TODO: Compare :name + // Compare name + let name = get_property_quoted_string(emacs, ":name")?; + if name.as_ref().map(String::as_str) != rust.name { + this_status = DiffStatus::Bad; + message = Some(format!( + "Name mismatch (emacs != rust) {:?} != {:?}", + name, rust.name + )); + } // Compare language let language = get_property_quoted_string(emacs, ":language")?; diff --git a/src/parser/lesser_block.rs b/src/parser/lesser_block.rs index 0aa14878..050dbc93 100644 --- a/src/parser/lesser_block.rs +++ b/src/parser/lesser_block.rs @@ -50,7 +50,7 @@ pub(crate) fn verse_block<'b, 'g, 'r, 's>( context: RefContext<'b, 'g, 'r, 's>, input: OrgSource<'s>, ) -> Res, VerseBlock<'s>> { - let (remaining, name) = lesser_block_begin("verse")(context, input)?; + let (remaining, _) = lesser_block_begin("verse")(context, input)?; let (remaining, parameters) = opt(tuple((space1, data)))(remaining)?; let (remaining, _nl) = recognize(tuple((space0, line_ending)))(remaining)?; let lesser_block_end_specialized = lesser_block_end("verse"); @@ -105,7 +105,7 @@ pub(crate) fn comment_block<'b, 'g, 'r, 's>( context: RefContext<'b, 'g, 'r, 's>, input: OrgSource<'s>, ) -> Res, CommentBlock<'s>> { - let (remaining, _name) = lesser_block_begin("comment")(context, input)?; + let (remaining, _) = lesser_block_begin("comment")(context, input)?; let (remaining, _parameters) = opt(tuple((space1, data)))(remaining)?; let (remaining, _nl) = recognize(tuple((space0, line_ending)))(remaining)?; let lesser_block_end_specialized = lesser_block_end("comment"); @@ -140,7 +140,7 @@ pub(crate) fn example_block<'b, 'g, 'r, 's>( context: RefContext<'b, 'g, 'r, 's>, input: OrgSource<'s>, ) -> Res, ExampleBlock<'s>> { - let (remaining, _name) = lesser_block_begin("example")(context, input)?; + let (remaining, _) = lesser_block_begin("example")(context, input)?; let (remaining, parameters) = opt(tuple((space1, example_switches)))(remaining)?; let (remaining, _nl) = recognize(tuple((space0, line_ending)))(remaining)?; let lesser_block_end_specialized = lesser_block_end("example"); @@ -200,7 +200,7 @@ pub(crate) fn export_block<'b, 'g, 'r, 's>( context: RefContext<'b, 'g, 'r, 's>, input: OrgSource<'s>, ) -> Res, ExportBlock<'s>> { - let (remaining, name) = lesser_block_begin("export")(context, input)?; + let (remaining, _) = lesser_block_begin("export")(context, input)?; // https://orgmode.org/worg/org-syntax.html#Blocks claims that export blocks must have a single word for data but testing shows no data and multi-word data still parses as an export block. let (remaining, parameters) = opt(tuple((space1, data)))(remaining)?; let (remaining, _nl) = recognize(tuple((space0, line_ending)))(remaining)?; @@ -241,7 +241,7 @@ pub(crate) fn src_block<'b, 'g, 'r, 's>( context: RefContext<'b, 'g, 'r, 's>, input: OrgSource<'s>, ) -> Res, SrcBlock<'s>> { - let (remaining, _name) = lesser_block_begin("src")(context, input)?; + let (remaining, _) = lesser_block_begin("src")(context, input)?; // https://orgmode.org/worg/org-syntax.html#Blocks claims that data is mandatory and must follow the LANGUAGE SWITCHES ARGUMENTS pattern but testing has shown that no data and incorrect data here will still parse to a src block. let (remaining, language) = opt(map(tuple((space1, switch_word(true))), |(_, language)| { language