luau-parser 0.2.68

A blazingly fast Luau parser with robust error recovery.
Documentation
//! All `impl` blocks for [`GenericFor`].

use luau_lexer::prelude::{Error, Keyword, Lexer, Token, TokenType};

use crate::types::{DoBlock, GenericFor, List, Parse, TryParse};

impl Parse for GenericFor {
    fn parse(for_keyword: Token, lexer: &mut Lexer, errors: &mut Vec<Error>) -> Option<Self> {
        let state = lexer.save_state();

        if for_keyword != TokenType::Keyword(Keyword::For) {
            return None;
        }

        let names = List::try_parse(lexer, errors)?;

        maybe_next_token!(lexer, in_keyword, TokenType::Keyword(Keyword::In));
        let Some(in_keyword) = in_keyword else {
            lexer.set_state(state);

            return None;
        };

        let expressions = List::try_parse(lexer, errors)?;
        let do_block = DoBlock::try_parse(lexer, errors)?;

        Some(Self {
            for_keyword,
            names,
            in_keyword,
            expressions,
            do_block,
        })
    }
}