From bc5745a95fef8a615ce19b7b135ea8601105f11c Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Fri, 25 Aug 2023 05:15:49 -0400 Subject: [PATCH] Add support for list items with a line break before their contents. --- src/compare/util.rs | 4 +--- src/parser/plain_list.rs | 14 +++++--------- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/src/compare/util.rs b/src/compare/util.rs index 1e0cd854..25174f65 100644 --- a/src/compare/util.rs +++ b/src/compare/util.rs @@ -47,9 +47,7 @@ pub fn assert_bounds<'s, S: Source<'s>>( standard_properties .begin .ok_or("Token should have a begin.")?, - standard_properties - .end - .ok_or("Token should have a begin.")?, + standard_properties.end.ok_or("Token should have an end.")?, ); let (rust_begin, rust_end) = get_offsets(source, rust); if (rust_begin + 1) != begin || (rust_end + 1) != end { diff --git a/src/parser/plain_list.rs b/src/parser/plain_list.rs index d39b8f7f..3c70cd61 100644 --- a/src/parser/plain_list.rs +++ b/src/parser/plain_list.rs @@ -135,8 +135,7 @@ pub fn plain_list_item<'r, 's>( })(remaining)?; // TODO: This isn't taking into account items that immediately line break and then have contents - let maybe_contentless_item: Res, OrgSource<'_>> = - alt((eof, line_ending))(remaining); + let maybe_contentless_item: Res, OrgSource<'_>> = eof(remaining); match maybe_contentless_item { Ok((rem, _ws)) => { let source = get_consumed(input, rem); @@ -153,7 +152,7 @@ pub fn plain_list_item<'r, 's>( Err(_) => {} }; - let (remaining, _ws) = space1(remaining)?; + let (remaining, _ws) = alt((space1, line_ending))(remaining)?; let exit_matcher = plain_list_item_end(indent_level); let parser_context = context .with_additional_node(ContextElement::ConsumeTrailingWhitespace(true)) @@ -162,12 +161,9 @@ pub fn plain_list_item<'r, 's>( exit_matcher: &exit_matcher, })); - let (remaining, (children, _exit_contents)) = verify( - many_till( - parser_with_context!(element(true))(&parser_context), - parser_with_context!(exit_matcher_parser)(&parser_context), - ), - |(children, _exit_contents)| !children.is_empty(), + let (remaining, (children, _exit_contents)) = many_till( + parser_with_context!(element(true))(&parser_context), + parser_with_context!(exit_matcher_parser)(&parser_context), )(remaining)?; let (remaining, _trailing_ws) =