Skip to main content

scarf_parser/parser/
spanned_token.rs

1// =======================================================================
2// spanned_token.rs
3// =======================================================================
4// A token with an associated span, to be used in parsing
5
6use crate::*;
7use lexer::Token;
8use winnow::ModalResult;
9use winnow::Parser;
10use winnow::error::ErrMode;
11use winnow::stream::{Stateful, TokenSlice};
12use winnow::token::literal;
13
14// Keep track of the largest error we've seen in repeat/opt branches
15pub type Tokens<'s> =
16    Stateful<TokenSlice<'s, SpannedToken<'s>>, Option<VerboseError<'s>>>;
17impl<'s> Parser<Tokens<'s>, &'s SpannedToken<'s>, ErrMode<VerboseError<'s>>>
18    for Token<'s>
19{
20    fn parse_next(
21        &mut self,
22        input: &mut Tokens<'s>,
23    ) -> ModalResult<&'s SpannedToken<'s>, VerboseError<'s>> {
24        literal(*self).parse_next(input).map(|t| &t[0])
25    }
26}