luau_parser/impl/block/
generic_for.rs1use 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}