luau_parser/impl/block/
do_block.rs1use luau_lexer::prelude::{Error, Keyword, Lexer, Token, TokenType};
4
5use crate::{
6 types::{Block, DoBlock, Parse, TryParse, TryParseWithArgs},
7 utils::get_token_type_display_extended,
8};
9
10impl Parse for DoBlock {
11 fn parse(do_keyword: Token, lexer: &mut Lexer, errors: &mut Vec<Error>) -> Option<Self> {
12 if do_keyword != TokenType::Keyword(Keyword::Do) {
13 return None;
14 }
15
16 let body = Block::try_parse_with(lexer, errors, TokenType::Keyword(Keyword::End))
17 .unwrap_or_default();
18
19 next_token_recoverable!(
20 lexer,
21 end_keyword,
22 TokenType::Keyword(Keyword::End),
23 TokenType::Keyword(Keyword::End),
24 errors,
25 "Expected ".to_string()
26 + get_token_type_display_extended(&TokenType::Keyword(Keyword::End))
27 );
28
29 Some(Self {
30 do_keyword,
31 body,
32 end_keyword,
33 })
34 }
35}
36impl TryParse for DoBlock {}