From 17db05c2c77551658e90004e605d8bae2de0e307 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Tue, 17 Oct 2023 12:42:34 -0400 Subject: [PATCH] Unify more error handling. --- src/parser/headline.rs | 17 ++++++++--------- src/parser/in_buffer_settings.rs | 6 +++++- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/parser/headline.rs b/src/parser/headline.rs index 7b4ffc40..aca0fa3f 100644 --- a/src/parser/headline.rs +++ b/src/parser/headline.rs @@ -18,12 +18,13 @@ use nom::sequence::tuple; use super::org_source::OrgSource; use super::section::section; +use super::util::exit_matcher_parser; use super::util::get_consumed; use super::util::org_line_ending; use super::util::org_space; use super::util::org_space_or_line_ending; use super::util::start_of_line; -use crate::context::parser_with_context; +use crate::context::bind_context; use crate::context::ContextElement; use crate::context::ExitClass; use crate::context::ExitMatcherNode; @@ -61,10 +62,10 @@ fn _heading<'b, 'g, 'r, 's>( let mut scheduled = None; let mut deadline = None; let mut closed = None; - not(|i| context.check_exit_matcher(i))(input)?; + not(bind_context!(exit_matcher_parser, context))(input)?; let (remaining, pre_headline) = headline(context, input, parent_star_count)?; - let section_matcher = parser_with_context!(section)(context); - let heading_matcher = parser_with_context!(heading(pre_headline.star_count))(context); + let section_matcher = bind_context!(section, context); + let heading_matcher = bind_context!(heading(pre_headline.star_count), context); let (remaining, maybe_section) = opt(map(section_matcher, DocumentElement::Section))(remaining)?; let (remaining, _ws) = opt(tuple((start_of_line, many0(blank_line))))(remaining)?; @@ -154,7 +155,7 @@ fn headline<'b, 'g, 'r, 's>( let (remaining, (_, (headline_level, star_count, _), _)) = tuple(( start_of_line, verify( - parser_with_context!(headline_level)(&parser_context), + bind_context!(headline_level, &parser_context), |(_, count, _)| *count > parent_star_count, ), peek(org_space), @@ -162,7 +163,7 @@ fn headline<'b, 'g, 'r, 's>( let (remaining, maybe_todo_keyword) = opt(tuple(( space1, - parser_with_context!(heading_keyword)(&parser_context), + bind_context!(heading_keyword, &parser_context), peek(org_space_or_line_ending), )))(remaining)?; @@ -176,9 +177,7 @@ fn headline<'b, 'g, 'r, 's>( let (remaining, maybe_title) = opt(tuple(( space1, - consumed(many1(parser_with_context!(standard_set_object)( - &parser_context, - ))), + consumed(many1(bind_context!(standard_set_object, &parser_context))), )))(remaining)?; let (remaining, maybe_tags) = opt(tuple((space0, tags)))(remaining)?; diff --git a/src/parser/in_buffer_settings.rs b/src/parser/in_buffer_settings.rs index 7ab27a7b..e6719403 100644 --- a/src/parser/in_buffer_settings.rs +++ b/src/parser/in_buffer_settings.rs @@ -137,7 +137,11 @@ pub(crate) fn apply_in_buffer_settings<'g, 's, 'sf>( .iter() .filter(|kw| kw.key.eq_ignore_ascii_case("link")) { - let (_, (link_key, link_value)) = link_template(kw.value).map_err(|e| e.to_string())?; + let (_, (link_key, link_value)) = link_template(kw.value).map_err(|err| match err { + nom::Err::Incomplete(_) => CustomError::Text(err.to_string()), + nom::Err::Error(e) => e, + nom::Err::Failure(e) => e, + })?; new_settings .link_templates .insert(link_key.to_owned(), link_value.to_owned());