use super::prelude::*;
use crate::span_wrap::SpanWrap;
pub const RULE_COMMENT: Rule = Rule {
name: "comment",
try_consume_fn,
};
fn try_consume_fn<'p, 'r, 't>(
log: &slog::Logger,
parser: &'p mut Parser<'r, 't>,
) -> ParseResult<'r, 't, Elements<'t>> {
debug!(log, "Consuming tokens until end of comment");
check_step(parser, Token::LeftComment)?;
loop {
let ExtractedToken { token, span, slice } = parser.current();
debug!(
log,
"Received token inside comment";
"token" => token,
"slice" => slice,
"span" => SpanWrap::from(span),
);
match token {
Token::RightComment => {
trace!(log, "Reached end of comment, returning");
parser.step()?;
return ok!(Elements::None);
}
Token::InputEnd => {
trace!(log, "Reached end of input, aborting");
return Err(parser.make_warn(ParseWarningKind::EndOfInput));
}
_ => {
trace!(log, "Token inside comment received. Discarding.");
parser.step()?;
}
}
}
}