oak_lua/kind/
mod.rs

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    // 关键字
9    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    // 标识符和字面量
33    Identifier,
34    Number,
35    String,
36
37    // 操作符
38    Plus,       // +
39    Minus,      // -
40    Star,       // *
41    Slash,      // /
42    Percent,    // %
43    Caret,      // ^
44    Hash,       // #
45    Ampersand,  // &
46    Tilde,      // ~
47    Pipe,       // |
48    LtLt,       // <<
49    GtGt,       // >>
50    SlashSlash, // //
51    EqEq,       // ==
52    TildeEq,    // ~=
53    LtEq,       // <=
54    GtEq,       // >=
55    Lt,         // <
56    Gt,         // >
57    Eq,         // =
58
59    // 分隔符
60    LeftParen,    // (
61    RightParen,   // )
62    LeftBrace,    // {
63    RightBrace,   // }
64    LeftBracket,  // [
65    RightBracket, // ]
66    ColonColon,   // ::
67    Semicolon,    // ;
68    Colon,        // :
69    Comma,        // ,
70    Dot,          // .
71    DotDot,       // ..
72    DotDotDot,    // ...
73
74    // 空白和注释
75    Whitespace,
76    Comment,
77
78    // 特殊标记
79    Eof,
80    Error,
81
82    // 语法节点类型 (非终结符)
83    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            // 语法节点类型 (非终结符)
143            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            // 语法节点类型 (非终结符)
161            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}