luau_parser/impl/block/
do_block.rs

1//! All `impl` blocks for [`DoBlock`].
2
3use 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 {}