luau_parser/impl/expression/
var.rs

1//! All `impl` blocks for [`Var`].
2
3use luau_lexer::prelude::{Lexer, ParseError, Symbol, Token, TokenType};
4
5use crate::{
6    types::{
7        Expression, FunctionCall, FunctionCallInvoked, Parse, Pointer, PrefixExp, TableAccess,
8        TableAccessKey, TableAccessPrefix, TryParse, Var,
9    },
10    utils::get_token_type_display,
11};
12
13impl Parse for Var {
14    fn parse(token: Token, lexer: &mut Lexer, errors: &mut Vec<ParseError>) -> Option<Self> {
15        if !matches!(
16            token.token_type,
17            TokenType::PartialKeyword(_) | TokenType::Identifier(_)
18        ) {
19            return None;
20        }
21
22        maybe_next_token!(
23            lexer,
24            maybe_dot_or_bracket,
25            TokenType::Symbol(Symbol::Dot) | TokenType::Symbol(Symbol::OpeningBrackets)
26        );
27        if let Some(dot_or_bracket) = maybe_dot_or_bracket {
28            return Some(Self::TableAccess(TableAccess {
29                prefix: TableAccessPrefix::Name(token),
30                accessed_keys: Vec::<TableAccessKey>::parse(dot_or_bracket, lexer, errors)?,
31            }));
32        }
33
34        Some(Self::Name(token))
35    }
36}
37impl TryParse for Var {}