From 6139ea328d66cfa7d1a93fe52e1c11859e2d7967 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Tue, 17 Oct 2023 12:22:52 -0400 Subject: [PATCH] Unify some more error handling. --- src/parser/document.rs | 8 +++----- src/parser/in_buffer_settings.rs | 24 +++++++++++++++--------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/parser/document.rs b/src/parser/document.rs index 2117b920..be995477 100644 --- a/src/parser/document.rs +++ b/src/parser/document.rs @@ -134,7 +134,7 @@ fn document_org_source<'b, 'g, 'r, 's>( } final_settings.extend(document_settings); let new_settings = apply_in_buffer_settings(final_settings, context.get_global_settings()) - .map_err(|err| nom::Err::Error(CustomError::from(err)))?; + .map_err(nom::Err::Error)?; let new_context = context.with_global_settings(&new_settings); let context = &new_context; @@ -159,15 +159,13 @@ fn document_org_source<'b, 'g, 'r, 's>( let parser_context = context.with_global_settings(&new_global_settings); let (remaining, mut document) = _document(&parser_context, input) .map(|(rem, out)| (Into::<&str>::into(rem), out))?; - apply_post_parse_in_buffer_settings(&mut document) - .map_err(|err| nom::Err::::Failure(err.into()))?; + apply_post_parse_in_buffer_settings(&mut document); return Ok((remaining.into(), document)); } } // Find final in-buffer settings that do not impact parsing - apply_post_parse_in_buffer_settings(&mut document) - .map_err(|err| nom::Err::::Failure(err.into()))?; + apply_post_parse_in_buffer_settings(&mut document); Ok((remaining.into(), document)) } diff --git a/src/parser/in_buffer_settings.rs b/src/parser/in_buffer_settings.rs index b746496f..7ab27a7b 100644 --- a/src/parser/in_buffer_settings.rs +++ b/src/parser/in_buffer_settings.rs @@ -88,7 +88,7 @@ fn in_buffer_settings_key<'s>(input: OrgSource<'s>) -> Res, OrgSou pub(crate) fn apply_in_buffer_settings<'g, 's, 'sf>( keywords: Vec>, original_settings: &'g GlobalSettings<'g, 's>, -) -> Result, String> { +) -> Result, CustomError> { let mut new_settings = original_settings.clone(); // Todo Keywords @@ -98,7 +98,11 @@ pub(crate) fn apply_in_buffer_settings<'g, 's, 'sf>( || kw.key.eq_ignore_ascii_case("typ_todo") }) { let (_, (in_progress_words, complete_words)) = - todo_keywords(kw.value).map_err(|err| err.to_string())?; + todo_keywords(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 .in_progress_todo_keywords .extend(in_progress_words.into_iter().map(str::to_string)); @@ -112,9 +116,14 @@ pub(crate) fn apply_in_buffer_settings<'g, 's, 'sf>( .iter() .filter(|kw| kw.key.eq_ignore_ascii_case("startup")) { - let (_remaining, settings) = - separated_list0(space1::<&str, nom::error::Error<_>>, is_not(" \t"))(kw.value) - .map_err(|err: nom::Err<_>| err.to_string())?; + let (_remaining, settings) = separated_list0(space1::<&str, CustomError>, is_not(" \t"))( + kw.value, + ) + .map_err(|err: nom::Err<_>| match err { + nom::Err::Incomplete(_) => CustomError::Text(err.to_string()), + nom::Err::Error(e) => e, + nom::Err::Failure(e) => e, + })?; if settings.contains(&"odd") { new_settings.odd_levels_only = HeadlineLevelFilter::Odd; } @@ -139,9 +148,7 @@ pub(crate) fn apply_in_buffer_settings<'g, 's, 'sf>( /// Apply in-buffer settings that do not impact parsing and therefore can be applied after parsing. #[cfg_attr(feature = "tracing", tracing::instrument(ret, level = "debug"))] -pub(crate) fn apply_post_parse_in_buffer_settings<'g, 's, 'sf>( - document: &mut Document<'s>, -) -> Result<(), &'static str> { +pub(crate) fn apply_post_parse_in_buffer_settings<'g, 's, 'sf>(document: &mut Document<'s>) { document.category = Into::::into(&*document) .into_iter() .filter_map(|ast_node| { @@ -154,7 +161,6 @@ pub(crate) fn apply_post_parse_in_buffer_settings<'g, 's, 'sf>( }) .last() .map(|kw| kw.value.to_owned()); - Ok(()) } #[cfg_attr(feature = "tracing", tracing::instrument(ret, level = "debug"))]