luau_parser/impl/block/
generic_for.rs

1//! All `impl` blocks for [`GenericFor`].
2
3use luau_lexer::prelude::{Error, Keyword, Lexer, Token, TokenType};
4
5use crate::types::{DoBlock, GenericFor, List, Parse, TryParse};
6
7impl Parse for GenericFor {
8    fn parse(for_keyword: Token, lexer: &mut Lexer, errors: &mut Vec<Error>) -> Option<Self> {
9        let state = lexer.save_state();
10
11        if for_keyword != TokenType::Keyword(Keyword::For) {
12            return None;
13        }
14
15        let names = List::try_parse(lexer, errors)?;
16
17        maybe_next_token!(lexer, in_keyword, TokenType::Keyword(Keyword::In));
18        let Some(in_keyword) = in_keyword else {
19            lexer.set_state(state);
20
21            return None;
22        };
23
24        let expressions = List::try_parse(lexer, errors)?;
25        let do_block = DoBlock::try_parse(lexer, errors)?;
26
27        Some(Self {
28            for_keyword,
29            names,
30            in_keyword,
31            expressions,
32            do_block,
33        })
34    }
35}