luau_parser/types/expression/
function.rs1use luau_lexer::prelude::Token;
2use luau_parser_derive::{Print, Range};
3
4use crate::types::{
5 Attribute, Block, BracketedList, Expression, GenericDeclaration, Parameter, Pointer, PrefixExp, Table, TypeValue
6};
7
8#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord, Range, Print)]
10#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
11pub enum FunctionCallInvoked {
12 Function(Pointer<PrefixExp>),
18
19 TableMethod {
26 table: Pointer<PrefixExp>,
28
29 colon: Pointer<Token>,
31
32 method: Pointer<Token>,
34 },
35}
36
37#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord, Range, Print)]
43#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
44pub struct FunctionCall {
45 pub invoked: FunctionCallInvoked,
47
48 pub arguments: FunctionArguments,
50}
51
52#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord, Range, Print)]
54#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
55pub enum FunctionArguments {
56 String(Token),
62
63 Table(Table),
69
70 List(BracketedList<Pointer<FunctionArgument>>),
76}
77
78#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord, Range, Print)]
80#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
81pub enum FunctionArgument {
82 Expression(Pointer<Expression>),
84
85 VariadicValues(Token),
91}
92
93#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord, Range, Print)]
95#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
96pub struct Closure {
97 pub attributes: Vec<Attribute>,
99
100 pub function_keyword: Token,
102
103 pub generics: Option<Pointer<GenericDeclaration>>,
105
106 pub parameters: BracketedList<Parameter>,
108
109 pub colon: Option<Pointer<Token>>,
111
112 pub return_type: Option<Pointer<TypeValue>>,
114
115 pub body: Block,
117
118 pub end_keyword: Token,
120}