luau_parser/impl/expression/
var.rs

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