luau_parser/impl/expression/
var.rs1use 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 {}