Skip to main content

oak_actionscript/lexer/
token_type.rs

1use oak_core::{Source, Token, TokenType, UniversalElementRole, UniversalTokenRole};
2#[cfg(feature = "serde")]
3use serde::{Deserialize, Serialize};
4
5pub type ActionScriptToken = Token<ActionScriptTokenType>;
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
8#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
9#[repr(u8)]
10pub enum ActionScriptTokenType {
11    Whitespace,
12    Newline,
13    Comment,
14    Identifier,
15    StringLiteral,
16    CharLiteral,
17    NumberLiteral,
18    BooleanLiteral,
19    NullLiteral,
20    As,
21    Break,
22    Case,
23    Catch,
24    Class,
25    Const,
26    Continue,
27    Default,
28    Delete,
29    Do,
30    Else,
31    Extends,
32    False,
33    Finally,
34    For,
35    Function,
36    If,
37    Implements,
38    Import,
39    In,
40    Instanceof,
41    Interface,
42    Internal,
43    Is,
44    Native,
45    New,
46    Null,
47    Package,
48    Private,
49    Protected,
50    Public,
51    Return,
52    Static,
53    Super,
54    Switch,
55    This,
56    Throw,
57    True,
58    Try,
59    Typeof,
60    Use,
61    Var,
62    Void,
63    While,
64    With,
65    Each,
66    Get,
67    Set,
68    Namespace,
69    Include,
70    Dynamic,
71    Final,
72    Override,
73    Array,
74    Boolean,
75    Date,
76    Number,
77    ObjectType,
78    RegExp,
79    StringType,
80    Uint,
81    Vector,
82    VoidType,
83    Xml,
84    XmlList,
85    Plus,
86    Minus,
87    Star,
88    Slash,
89    Percent,
90    Equal,
91    EqualEqual,
92    EqualEqualEqual,
93    NotEqual,
94    NotEqualEqual,
95    LessThan,
96    LessEqual,
97    GreaterThan,
98    GreaterEqual,
99    LogicalAnd,
100    LogicalOr,
101    LogicalNot,
102    BitwiseAnd,
103    BitwiseOr,
104    BitwiseXor,
105    BitwiseNot,
106    LeftShift,
107    RightShift,
108    UnsignedRightShift,
109    Increment,
110    Decrement,
111    PlusAssign,
112    MinusAssign,
113    StarAssign,
114    SlashAssign,
115    PercentAssign,
116    LeftShiftAssign,
117    RightShiftAssign,
118    UnsignedRightShiftAssign,
119    BitwiseAndAssign,
120    BitwiseOrAssign,
121    BitwiseXorAssign,
122    Question,
123    Colon,
124    Dot,
125    Arrow,
126    LeftParen,
127    RightParen,
128    LeftBrace,
129    RightBrace,
130    LeftBracket,
131    RightBracket,
132    Semicolon,
133    Comma,
134    At,
135    Hash,
136    Dollar,
137    Ampersand,
138    Backslash,
139    Quote,
140    DoubleQuote,
141    Backtick,
142    Eof,
143    Program,
144    Block,
145    Variable,
146    FunctionCall,
147    MethodCall,
148    PropertyAccess,
149    ArrayAccess,
150    ParameterList,
151    UseItem,
152    ModuleItem,
153    StructItem,
154    EnumItem,
155    FunctionType,
156    Root,
157    Statement,
158    Expression,
159    Assignment,
160    ConditionalExpression,
161    BinaryExpression,
162    UnaryExpression,
163    IfStatement,
164    ForStatement,
165    WhileStatement,
166    DoWhileStatement,
167    SwitchStatement,
168    TryStatement,
169    ThrowStatement,
170    ReturnStatement,
171    BreakStatement,
172    ContinueStatement,
173    Error,
174    LiteralExpression,
175    IdentifierExpression,
176    ParenthesizedExpression,
177    SourceFile,
178    BlockExpression,
179    LetStatement,
180    IfExpression,
181    WhileExpression,
182    LoopExpression,
183    ForExpression,
184    CallExpression,
185    IndexExpression,
186    FieldExpression,
187}
188
189impl TokenType for ActionScriptTokenType {
190    type Role = UniversalTokenRole;
191    const END_OF_STREAM: Self = Self::Eof;
192
193    fn is_ignored(&self) -> bool {
194        matches!(self, Self::Whitespace | Self::Newline | Self::Comment)
195    }
196
197    fn role(&self) -> Self::Role {
198        match self {
199            t if t.is_keyword() => UniversalTokenRole::Keyword,
200            t if t.is_operator() => UniversalTokenRole::Operator,
201            t if t.is_punctuation() => UniversalTokenRole::Punctuation,
202            Self::Identifier => UniversalTokenRole::Name,
203            t if t.is_literal() => UniversalTokenRole::Literal,
204            Self::Comment => UniversalTokenRole::Comment,
205            Self::Eof => UniversalTokenRole::Eof,
206            Self::Error => UniversalTokenRole::Error,
207            _ => UniversalTokenRole::None,
208        }
209    }
210}
211
212impl ActionScriptTokenType {
213    pub fn is_literal(&self) -> bool {
214        matches!(self, Self::StringLiteral | Self::CharLiteral | Self::NumberLiteral | Self::BooleanLiteral | Self::NullLiteral | Self::True | Self::False | Self::Null)
215    }
216
217    pub fn is_keyword(&self) -> bool {
218        matches!(
219            self,
220            Self::As
221                | Self::Break
222                | Self::Case
223                | Self::Catch
224                | Self::Class
225                | Self::Const
226                | Self::Continue
227                | Self::Default
228                | Self::Delete
229                | Self::Do
230                | Self::Else
231                | Self::Extends
232                | Self::Finally
233                | Self::For
234                | Self::Function
235                | Self::If
236                | Self::Implements
237                | Self::Import
238                | Self::In
239                | Self::Instanceof
240                | Self::Interface
241                | Self::Internal
242                | Self::Is
243                | Self::Native
244                | Self::New
245                | Self::Package
246                | Self::Private
247                | Self::Protected
248                | Self::Public
249                | Self::Return
250                | Self::Static
251                | Self::Super
252                | Self::Switch
253                | Self::This
254                | Self::Throw
255                | Self::Try
256                | Self::Typeof
257                | Self::Use
258                | Self::Var
259                | Self::Void
260                | Self::While
261                | Self::With
262                | Self::Each
263                | Self::Get
264                | Self::Set
265                | Self::Namespace
266                | Self::Include
267                | Self::Dynamic
268                | Self::Final
269                | Self::Override
270        )
271    }
272
273    pub fn is_operator(&self) -> bool {
274        matches!(
275            self,
276            Self::Plus
277                | Self::Minus
278                | Self::Star
279                | Self::Slash
280                | Self::Percent
281                | Self::Equal
282                | Self::EqualEqual
283                | Self::EqualEqualEqual
284                | Self::NotEqual
285                | Self::NotEqualEqual
286                | Self::LessThan
287                | Self::LessEqual
288                | Self::GreaterThan
289                | Self::GreaterEqual
290                | Self::LogicalAnd
291                | Self::LogicalOr
292                | Self::LogicalNot
293                | Self::BitwiseAnd
294                | Self::BitwiseOr
295                | Self::BitwiseXor
296                | Self::BitwiseNot
297                | Self::LeftShift
298                | Self::RightShift
299                | Self::UnsignedRightShift
300                | Self::PlusAssign
301                | Self::MinusAssign
302                | Self::StarAssign
303                | Self::SlashAssign
304                | Self::PercentAssign
305                | Self::LeftShiftAssign
306                | Self::RightShiftAssign
307                | Self::UnsignedRightShiftAssign
308                | Self::BitwiseAndAssign
309                | Self::BitwiseOrAssign
310                | Self::BitwiseXorAssign
311                | Self::Question
312        )
313    }
314
315    pub fn is_punctuation(&self) -> bool {
316        matches!(self, Self::LeftParen | Self::RightParen | Self::LeftBracket | Self::RightBracket | Self::LeftBrace | Self::RightBrace | Self::Dot | Self::Comma | Self::Colon | Self::Semicolon)
317    }
318}