luau_parser/impl/expression/
var.rs1use luau_lexer::prelude::{Error, Lexer, Symbol, Token, TokenType};
4
5use crate::types::{Parse, TableAccess, TableAccessKey, TableAccessPrefix, TryParse, Var};
6
7impl Parse for Var {
8 fn parse(token: Token, lexer: &mut Lexer, errors: &mut Vec<Error>) -> Option<Self> {
9 if !matches!(
10 token.token_type,
11 TokenType::PartialKeyword(_) | TokenType::Identifier(_)
12 ) {
13 return None;
14 }
15
16 maybe_next_token!(
17 lexer,
18 maybe_dot_or_bracket,
19 TokenType::Symbol(Symbol::Dot) | TokenType::Symbol(Symbol::OpeningBrackets)
20 );
21 if let Some(dot_or_bracket) = maybe_dot_or_bracket {
22 return Some(Self::TableAccess(TableAccess {
23 prefix: TableAccessPrefix::Name(token),
24 accessed_keys: Vec::<TableAccessKey>::parse(dot_or_bracket, lexer, errors)?,
25 }));
26 }
27
28 Some(Self::Name(token))
29 }
30}
31impl TryParse for Var {}