1use oak_core::{SyntaxKind, Token};
2use serde::{Deserialize, Serialize};
3
4pub type LuaToken = Token<LuaSyntaxKind>;
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
7pub enum LuaSyntaxKind {
8 And,
10 Break,
11 Do,
12 Else,
13 Elseif,
14 End,
15 False,
16 For,
17 Function,
18 Goto,
19 If,
20 In,
21 Local,
22 Nil,
23 Not,
24 Or,
25 Repeat,
26 Return,
27 Then,
28 True,
29 Until,
30 While,
31
32 Identifier,
34 Number,
35 String,
36
37 Plus, Minus, Star, Slash, Percent, Caret, Hash, Ampersand, Tilde, Pipe, LtLt, GtGt, SlashSlash, EqEq, TildeEq, LtEq, GtEq, Lt, Gt, Eq, LeftParen, RightParen, LeftBrace, RightBrace, LeftBracket, RightBracket, ColonColon, Semicolon, Colon, Comma, Dot, DotDot, DotDotDot, Whitespace,
76 Comment,
77
78 Eof,
80 Error,
81
82 SourceFile,
84 FunctionDeclaration,
85 ParameterList,
86 Parameter,
87 BlockStatement,
88 LocalStatement,
89 AssignmentStatement,
90 ExpressionStatement,
91 IfStatement,
92 WhileStatement,
93 ForStatement,
94 RepeatStatement,
95 BreakStatement,
96 ReturnStatement,
97 GotoStatement,
98 LabelStatement,
99 IdentifierExpression,
100 LiteralExpression,
101 BooleanLiteral,
102 NilLiteral,
103 ParenthesizedExpression,
104 BinaryExpression,
105 UnaryExpression,
106 CallExpression,
107 FieldExpression,
108 IndexExpression,
109 TableExpression,
110 FunctionExpression,
111 VarargExpression,
112 TableField,
113 FieldList,
114 ArgumentList,
115 VariableList,
116 ExpressionList,
117 NameList,
118 FunctionName,
119 FunctionBody,
120 ChunkStatement,
121 StatementList,
122}
123
124impl SyntaxKind for LuaSyntaxKind {
125 fn is_trivia(&self) -> bool {
126 matches!(self, Self::Whitespace | Self::Comment)
127 }
128
129 fn is_comment(&self) -> bool {
130 matches!(self, Self::Comment)
131 }
132
133 fn is_whitespace(&self) -> bool {
134 matches!(self, Self::Whitespace)
135 }
136
137 fn is_token_type(&self) -> bool {
138 use LuaSyntaxKind::*;
139 !matches!(
140 self,
141 Error | Eof |
142 SourceFile | FunctionDeclaration | ParameterList | Parameter | BlockStatement |
144 LocalStatement | AssignmentStatement | ExpressionStatement | IfStatement |
145 WhileStatement | ForStatement | RepeatStatement | BreakStatement |
146 ReturnStatement | GotoStatement | LabelStatement | IdentifierExpression |
147 LiteralExpression | BooleanLiteral | NilLiteral | ParenthesizedExpression |
148 BinaryExpression | UnaryExpression | CallExpression | FieldExpression |
149 IndexExpression | TableExpression | FunctionExpression | VarargExpression |
150 TableField | FieldList | ArgumentList | VariableList | ExpressionList |
151 NameList | FunctionName | FunctionBody | ChunkStatement | StatementList
152 )
153 }
154
155 fn is_element_type(&self) -> bool {
156 use LuaSyntaxKind::*;
157 matches!(
158 self,
159 Error | Eof |
160 SourceFile | FunctionDeclaration | ParameterList | Parameter | BlockStatement |
162 LocalStatement | AssignmentStatement | ExpressionStatement | IfStatement |
163 WhileStatement | ForStatement | RepeatStatement | BreakStatement |
164 ReturnStatement | GotoStatement | LabelStatement | IdentifierExpression |
165 LiteralExpression | BooleanLiteral | NilLiteral | ParenthesizedExpression |
166 BinaryExpression | UnaryExpression | CallExpression | FieldExpression |
167 IndexExpression | TableExpression | FunctionExpression | VarargExpression |
168 TableField | FieldList | ArgumentList | VariableList | ExpressionList |
169 NameList | FunctionName | FunctionBody | ChunkStatement | StatementList
170 )
171 }
172}