diff --git a/src/parser/nom_context.rs b/src/parser/nom_context.rs index 78a1806..5c195e6 100644 --- a/src/parser/nom_context.rs +++ b/src/parser/nom_context.rs @@ -10,6 +10,7 @@ use nom::error::ParseError; use nom::error::VerboseError; use nom::IResult; use nom::Parser; +use tracing::trace; type Link<'r, T> = Option<&'r Node<'r, T>>; type Matcher = dyn for<'s> Fn(&'s str) -> IResult<&'s str, &'s str, VerboseError<&'s str>>; @@ -67,6 +68,7 @@ impl<'r> OrgModeContextTree<'r> for OrgModeContext<'r> { } fn match_fail<'s>(&'r self, i: &'s str) -> IResult<&'s str, &'s str, VerboseError<&'s str>> { + trace!("Checking for fail with \"{}\"", i); let mut current_node = self.head.as_ref(); while current_node.is_some() { let current_node_unwrapped = current_node @@ -76,6 +78,7 @@ impl<'r> OrgModeContextTree<'r> for OrgModeContext<'r> { ChainBehavior::AndParent(Some(matcher)) => { let local_result = matcher(i); if local_result.is_ok() { + trace!("FAIL MATCHED"); return local_result; } } @@ -83,6 +86,7 @@ impl<'r> OrgModeContextTree<'r> for OrgModeContext<'r> { ChainBehavior::IgnoreParent(Some(matcher)) => { let local_result = matcher(i); if local_result.is_ok() { + trace!("FAIL MATCHED"); return local_result; } // TODO: Make this a custom error @@ -100,3 +104,9 @@ impl<'r> OrgModeContextTree<'r> for OrgModeContext<'r> { unreachable!() } } + +impl<'r, T> std::fmt::Debug for ContextTree<'r, T> { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "ContextTree") + } +} diff --git a/src/parser/text.rs b/src/parser/text.rs index 9129c21..a5efcbd 100644 --- a/src/parser/text.rs +++ b/src/parser/text.rs @@ -134,6 +134,7 @@ pub fn link_end(input: &str) -> Res<&str, TextElement> { map(symbol("]"), TextElement::Symbol)(input) } +#[instrument] pub fn paragraph_end(input: &str) -> Res<&str, &str> { recognize(tuple((map(line_break, TextElement::LineBreak), blank_line)))(input) } diff --git a/src/parser/text_element_parser.rs b/src/parser/text_element_parser.rs index 54f1e96..5596107 100644 --- a/src/parser/text_element_parser.rs +++ b/src/parser/text_element_parser.rs @@ -24,6 +24,7 @@ use nom::error::VerboseError; use nom::multi::many_till; use nom::sequence::tuple; use nom::IResult; +use tracing::instrument; fn flat_text_element<'s, 'r>( i: &'s str, @@ -44,21 +45,21 @@ fn flat_text_element<'s, 'r>( ))(i) } +#[instrument] fn recognize_bold_end(input: &str) -> Res<&str, &str> { recognize(bold_end)(input) } +#[instrument] fn flat_bold<'s, 'r>(i: &'s str, context: &'r OrgModeContext<'r>) -> Res<&'s str, TextElement<'s>> { let new_context = context.with_additional_fail_matcher(&recognize_bold_end); let text_element_parser = parser_with_context!(flat_text_element)(&new_context); let (remaining, captured) = recognize(tuple(( bold_start, many_till(text_element_parser, bold_end), - bold_end + bold_end, )))(i)?; - let ret = TextElement::Bold(Bold { - contents: captured - }); + let ret = TextElement::Bold(Bold { contents: captured }); Ok((remaining, ret)) }