luau_parser/impl/expression/
var.rs1use luau_lexer::prelude::{Lexer, ParseError, Symbol, Token, TokenType};
4
5use crate::types::{
6 Expression, Parse, PrefixExp, TableAccess, TableAccessKey, TableAccessPrefix, TryParse, Var,
7};
8
9impl Parse for Var {
10 fn parse(token: Token, lexer: &mut Lexer, errors: &mut Vec<ParseError>) -> Option<Self> {
11 if !matches!(
12 token.token_type,
13 TokenType::PartialKeyword(_) | TokenType::Identifier(_)
14 ) {
15 return None;
16 }
17
18 maybe_next_token!(
19 lexer,
20 maybe_dot_or_bracket,
21 TokenType::Symbol(Symbol::Dot) | TokenType::Symbol(Symbol::OpeningBrackets)
22 );
23 if let Some(dot_or_bracket) = maybe_dot_or_bracket {
24 return Some(Self::TableAccess(TableAccess {
25 prefix: TableAccessPrefix::Name(token),
26 accessed_keys: Vec::<TableAccessKey>::parse(dot_or_bracket, lexer, errors)?,
27 }));
28 }
29
30 Some(Self::Name(token))
31 }
32}
33impl TryParse for Var {}
34
35impl Parse<PrefixExp> for Var {
36 #[inline]
37 fn parse(token: Token, lexer: &mut Lexer, errors: &mut Vec<ParseError>) -> Option<PrefixExp> {
38 Self::parse(token, lexer, errors).map(PrefixExp::Var)
39 }
40}
41impl TryParse<PrefixExp> for Var {}
42
43impl Parse<Expression> for Var {
44 #[inline]
45 fn parse(token: Token, lexer: &mut Lexer, errors: &mut Vec<ParseError>) -> Option<Expression> {
46 Self::parse(token, lexer, errors).map(Expression::Var)
47 }
48}
49impl TryParse<Expression> for Var {}