Skip to main content

oak_dart/parser/
element_type.rs

1use oak_core::{ElementType, UniversalElementRole};
2
3/// Element types for the Dart language.
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
5#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6pub enum DartElementType {
7    /// Root element.
8    Root,
9    /// Class declaration.
10    ClassDeclaration,
11    /// Function declaration.
12    FunctionDeclaration,
13    /// Whitespace.
14    Whitespace,
15    /// Newline.
16    Newline,
17    /// Identifier token.
18    Identifier,
19    /// Integer literal token.
20    IntegerLiteral,
21    /// Double literal token.
22    DoubleLiteral,
23    /// String literal token.
24    StringLiteral,
25    /// Boolean literal token.
26    BooleanLiteral,
27    /// Null literal token.
28    NullLiteral,
29    /// `abstract` keyword.
30    Abstract,
31    /// `as` keyword.
32    As,
33    /// `assert` keyword.
34    Assert,
35    /// `async` keyword.
36    Async,
37    /// `await` keyword.
38    Await,
39    /// `break` keyword.
40    Break,
41    /// `case` keyword.
42    Case,
43    /// `catch` keyword.
44    Catch,
45    /// `class` keyword.
46    Class,
47    /// `const` keyword.
48    Const,
49    /// `continue` keyword.
50    Continue,
51    /// `covariant` keyword.
52    Covariant,
53    /// `default` keyword.
54    Default,
55    /// `deferred` keyword.
56    Deferred,
57    /// `do` keyword.
58    Do,
59    /// `dynamic` keyword.
60    Dynamic,
61    /// `else` keyword.
62    Else,
63    /// `enum` keyword.
64    Enum,
65    /// `export` keyword.
66    Export,
67    /// `extends` keyword.
68    Extends,
69    /// `extension` keyword.
70    Extension,
71    /// `external` keyword.
72    External,
73    /// `factory` keyword.
74    Factory,
75    /// `false` keyword.
76    False,
77    /// `final` keyword.
78    Final,
79    /// `finally` keyword.
80    Finally,
81    /// `for` keyword.
82    For,
83    /// `function` keyword.
84    Function,
85    /// `get` keyword.
86    Get,
87    /// `hide` keyword.
88    Hide,
89    /// `if` keyword.
90    If,
91    /// `implements` keyword.
92    Implements,
93    /// `import` keyword.
94    Import,
95    /// `in` keyword.
96    In,
97    /// `interface` keyword.
98    Interface,
99    /// `int` keyword.
100    Int,
101    /// `is` keyword.
102    Is,
103    /// `late` keyword.
104    Late,
105    /// `library` keyword.
106    Library,
107    /// `mixin` keyword.
108    Mixin,
109    /// `new` keyword.
110    New,
111    /// `null` keyword.
112    Null,
113    /// `on` keyword.
114    On,
115    /// `operator` keyword.
116    Operator,
117    /// `part` keyword.
118    Part,
119    /// `required` keyword.
120    Required,
121    /// `rethrow` keyword.
122    Rethrow,
123    /// `return` keyword.
124    Return,
125    /// `set` keyword.
126    Set,
127    /// `show` keyword.
128    Show,
129    /// `static` keyword.
130    Static,
131    /// `super` keyword.
132    Super,
133    /// `switch` keyword.
134    Switch,
135    /// `sync` keyword.
136    Sync,
137    /// `this` keyword.
138    This,
139    /// `throw` keyword.
140    Throw,
141    /// `true` keyword.
142    True,
143    /// `try` keyword.
144    Try,
145    /// `typedef` keyword.
146    Typedef,
147    /// `var` keyword.
148    Var,
149    /// `void` keyword.
150    Void,
151    /// `while` keyword.
152    While,
153    /// `with` keyword.
154    With,
155    /// `yield` keyword.
156    Yield,
157    /// Plus operator `+`.
158    Plus,
159    /// Minus operator `-`.
160    Minus,
161    /// Star operator `*`.
162    Star,
163    /// Slash operator `/`.
164    Slash,
165    /// Percent operator `%`.
166    Percent,
167    /// Tilde-slash operator `~/`.
168    TildeSlash,
169    /// Equal operator `=`.
170    Equal,
171    /// Equality operator `==`.
172    EqualEqual,
173    /// Inequality operator `!=`.
174    BangEqual,
175    /// Less-than operator `<`.
176    Less,
177    /// Greater-than operator `>`.
178    Greater,
179    /// Less-than-or-equal operator `<=`.
180    LessEqual,
181    /// Greater-than-or-equal operator `>=`.
182    GreaterEqual,
183    /// Left shift operator `<<`.
184    LeftShift,
185    /// Right shift operator `>>`.
186    RightShift,
187    /// Bitwise AND operator `&`.
188    Ampersand,
189    /// Bitwise OR operator `|`.
190    Pipe,
191    /// Bitwise XOR operator `^`.
192    Caret,
193    /// Bitwise NOT operator `~`.
194    Tilde,
195    /// Logical NOT operator `!`.
196    Bang,
197    /// Logical AND operator `&&`.
198    AmpersandAmpersand,
199    /// Logical OR operator `||`.
200    PipePipe,
201    /// Question mark operator `?`.
202    Question,
203    /// Null-aware operator `??`.
204    QuestionQuestion,
205    /// Increment operator `++`.
206    PlusPlus,
207    /// Decrement operator `--`.
208    MinusMinus,
209    /// Addition assignment operator `+=`.
210    PlusEqual,
211    /// Subtraction assignment operator `-=`.
212    MinusEqual,
213    /// Multiplication assignment operator `*=`.
214    StarEqual,
215    /// Division assignment operator `/=`.
216    SlashEqual,
217    /// Modulo assignment operator `%=`.
218    PercentEqual,
219    /// Integer division assignment operator `~/=`.
220    TildeSlashEqual,
221    /// Left shift assignment operator `<<=`.
222    LeftShiftEqual,
223    /// Right shift assignment operator `>>=`.
224    RightShiftEqual,
225    /// Bitwise AND assignment operator `&=`.
226    AmpersandEqual,
227    /// Bitwise OR assignment operator `|=`.
228    PipeEqual,
229    /// Bitwise XOR assignment operator `^=`.
230    CaretEqual,
231    /// Null-aware assignment operator `??=`.
232    QuestionQuestionEqual,
233    /// Arrow operator `=>`.
234    Arrow,
235    /// Dot operator `.`.
236    Dot,
237    /// Cascade operator `..`.
238    DotDot,
239    /// Spread operator `...`.
240    DotDotDot,
241    /// Null-aware access operator `?.`.
242    QuestionDot,
243    /// Left parenthesis `(`.
244    LeftParen,
245    /// Right parenthesis `)`.
246    RightParen,
247    /// Left bracket `[`.
248    LeftBracket,
249    /// Right bracket `]`.
250    RightBracket,
251    /// Left brace `{`.
252    LeftBrace,
253    /// Right brace `}`.
254    RightBrace,
255    /// Semicolon `;`.
256    Semicolon,
257    /// Comma `,`.
258    Comma,
259    /// Colon `:`.
260    Colon,
261    /// At symbol `@`.
262    At,
263    /// Hash symbol `#`.
264    Hash,
265    /// Line comment.
266    LineComment,
267    /// Block comment.
268    BlockComment,
269    /// Documentation comment.
270    DocComment,
271    /// Error token.
272    Error,
273    /// End of file token.
274    Eof,
275    /// Variable declaration.
276    VariableDeclaration,
277}
278
279/// Implementation of ElementType trait for DartElementType.
280impl ElementType for DartElementType {
281    type Role = UniversalElementRole;
282
283    /// Returns the role of this element type.
284    fn role(&self) -> Self::Role {
285        match self {
286            _ => UniversalElementRole::None,
287        }
288    }
289}
290
291/// Converts a DartTokenType to a DartElementType.
292impl From<crate::lexer::token_type::DartTokenType> for DartElementType {
293    /// Converts the given token type to its corresponding element type.
294    fn from(token: crate::lexer::token_type::DartTokenType) -> Self {
295        match token {
296            crate::lexer::token_type::DartTokenType::Root => DartElementType::Root,
297            crate::lexer::token_type::DartTokenType::ClassDeclaration => DartElementType::ClassDeclaration,
298            crate::lexer::token_type::DartTokenType::FunctionDeclaration => DartElementType::FunctionDeclaration,
299            crate::lexer::token_type::DartTokenType::Whitespace => DartElementType::Whitespace,
300            crate::lexer::token_type::DartTokenType::Newline => DartElementType::Newline,
301            crate::lexer::token_type::DartTokenType::Identifier => DartElementType::Identifier,
302            crate::lexer::token_type::DartTokenType::IntegerLiteral => DartElementType::IntegerLiteral,
303            crate::lexer::token_type::DartTokenType::DoubleLiteral => DartElementType::DoubleLiteral,
304            crate::lexer::token_type::DartTokenType::StringLiteral => DartElementType::StringLiteral,
305            crate::lexer::token_type::DartTokenType::BooleanLiteral => DartElementType::BooleanLiteral,
306            crate::lexer::token_type::DartTokenType::NullLiteral => DartElementType::NullLiteral,
307            crate::lexer::token_type::DartTokenType::Abstract => DartElementType::Abstract,
308            crate::lexer::token_type::DartTokenType::As => DartElementType::As,
309            crate::lexer::token_type::DartTokenType::Assert => DartElementType::Assert,
310            crate::lexer::token_type::DartTokenType::Async => DartElementType::Async,
311            crate::lexer::token_type::DartTokenType::Await => DartElementType::Await,
312            crate::lexer::token_type::DartTokenType::Break => DartElementType::Break,
313            crate::lexer::token_type::DartTokenType::Case => DartElementType::Case,
314            crate::lexer::token_type::DartTokenType::Catch => DartElementType::Catch,
315            crate::lexer::token_type::DartTokenType::Class => DartElementType::Class,
316            crate::lexer::token_type::DartTokenType::Const => DartElementType::Const,
317            crate::lexer::token_type::DartTokenType::Continue => DartElementType::Continue,
318            crate::lexer::token_type::DartTokenType::Covariant => DartElementType::Covariant,
319            crate::lexer::token_type::DartTokenType::Default => DartElementType::Default,
320            crate::lexer::token_type::DartTokenType::Deferred => DartElementType::Deferred,
321            crate::lexer::token_type::DartTokenType::Do => DartElementType::Do,
322            crate::lexer::token_type::DartTokenType::Dynamic => DartElementType::Dynamic,
323            crate::lexer::token_type::DartTokenType::Else => DartElementType::Else,
324            crate::lexer::token_type::DartTokenType::Enum => DartElementType::Enum,
325            crate::lexer::token_type::DartTokenType::Export => DartElementType::Export,
326            crate::lexer::token_type::DartTokenType::Extends => DartElementType::Extends,
327            crate::lexer::token_type::DartTokenType::Extension => DartElementType::Extension,
328            crate::lexer::token_type::DartTokenType::External => DartElementType::External,
329            crate::lexer::token_type::DartTokenType::Factory => DartElementType::Factory,
330            crate::lexer::token_type::DartTokenType::False => DartElementType::False,
331            crate::lexer::token_type::DartTokenType::Final => DartElementType::Final,
332            crate::lexer::token_type::DartTokenType::Finally => DartElementType::Finally,
333            crate::lexer::token_type::DartTokenType::For => DartElementType::For,
334            crate::lexer::token_type::DartTokenType::Function => DartElementType::Function,
335            crate::lexer::token_type::DartTokenType::Get => DartElementType::Get,
336            crate::lexer::token_type::DartTokenType::Hide => DartElementType::Hide,
337            crate::lexer::token_type::DartTokenType::If => DartElementType::If,
338            crate::lexer::token_type::DartTokenType::Implements => DartElementType::Implements,
339            crate::lexer::token_type::DartTokenType::Import => DartElementType::Import,
340            crate::lexer::token_type::DartTokenType::In => DartElementType::In,
341            crate::lexer::token_type::DartTokenType::Interface => DartElementType::Interface,
342            crate::lexer::token_type::DartTokenType::Int => DartElementType::Int,
343            crate::lexer::token_type::DartTokenType::Is => DartElementType::Is,
344            crate::lexer::token_type::DartTokenType::Late => DartElementType::Late,
345            crate::lexer::token_type::DartTokenType::Library => DartElementType::Library,
346            crate::lexer::token_type::DartTokenType::Mixin => DartElementType::Mixin,
347            crate::lexer::token_type::DartTokenType::New => DartElementType::New,
348            crate::lexer::token_type::DartTokenType::Null => DartElementType::Null,
349            crate::lexer::token_type::DartTokenType::On => DartElementType::On,
350            crate::lexer::token_type::DartTokenType::Operator => DartElementType::Operator,
351            crate::lexer::token_type::DartTokenType::Part => DartElementType::Part,
352            crate::lexer::token_type::DartTokenType::Required => DartElementType::Required,
353            crate::lexer::token_type::DartTokenType::Rethrow => DartElementType::Rethrow,
354            crate::lexer::token_type::DartTokenType::Return => DartElementType::Return,
355            crate::lexer::token_type::DartTokenType::Set => DartElementType::Set,
356            crate::lexer::token_type::DartTokenType::Show => DartElementType::Show,
357            crate::lexer::token_type::DartTokenType::Static => DartElementType::Static,
358            crate::lexer::token_type::DartTokenType::Super => DartElementType::Super,
359            crate::lexer::token_type::DartTokenType::Switch => DartElementType::Switch,
360            crate::lexer::token_type::DartTokenType::Sync => DartElementType::Sync,
361            crate::lexer::token_type::DartTokenType::This => DartElementType::This,
362            crate::lexer::token_type::DartTokenType::Throw => DartElementType::Throw,
363            crate::lexer::token_type::DartTokenType::True => DartElementType::True,
364            crate::lexer::token_type::DartTokenType::Try => DartElementType::Try,
365            crate::lexer::token_type::DartTokenType::Typedef => DartElementType::Typedef,
366            crate::lexer::token_type::DartTokenType::Var => DartElementType::Var,
367            crate::lexer::token_type::DartTokenType::Void => DartElementType::Void,
368            crate::lexer::token_type::DartTokenType::While => DartElementType::While,
369            crate::lexer::token_type::DartTokenType::With => DartElementType::With,
370            crate::lexer::token_type::DartTokenType::Yield => DartElementType::Yield,
371            crate::lexer::token_type::DartTokenType::Plus => DartElementType::Plus,
372            crate::lexer::token_type::DartTokenType::Minus => DartElementType::Minus,
373            crate::lexer::token_type::DartTokenType::Star => DartElementType::Star,
374            crate::lexer::token_type::DartTokenType::Slash => DartElementType::Slash,
375            crate::lexer::token_type::DartTokenType::Percent => DartElementType::Percent,
376            crate::lexer::token_type::DartTokenType::TildeSlash => DartElementType::TildeSlash,
377            crate::lexer::token_type::DartTokenType::Equal => DartElementType::Equal,
378            crate::lexer::token_type::DartTokenType::EqualEqual => DartElementType::EqualEqual,
379            crate::lexer::token_type::DartTokenType::BangEqual => DartElementType::BangEqual,
380            crate::lexer::token_type::DartTokenType::Less => DartElementType::Less,
381            crate::lexer::token_type::DartTokenType::Greater => DartElementType::Greater,
382            crate::lexer::token_type::DartTokenType::LessEqual => DartElementType::LessEqual,
383            crate::lexer::token_type::DartTokenType::GreaterEqual => DartElementType::GreaterEqual,
384            crate::lexer::token_type::DartTokenType::LeftShift => DartElementType::LeftShift,
385            crate::lexer::token_type::DartTokenType::RightShift => DartElementType::RightShift,
386            crate::lexer::token_type::DartTokenType::Ampersand => DartElementType::Ampersand,
387            crate::lexer::token_type::DartTokenType::Pipe => DartElementType::Pipe,
388            crate::lexer::token_type::DartTokenType::Caret => DartElementType::Caret,
389            crate::lexer::token_type::DartTokenType::Tilde => DartElementType::Tilde,
390            crate::lexer::token_type::DartTokenType::Bang => DartElementType::Bang,
391            crate::lexer::token_type::DartTokenType::AmpersandAmpersand => DartElementType::AmpersandAmpersand,
392            crate::lexer::token_type::DartTokenType::PipePipe => DartElementType::PipePipe,
393            crate::lexer::token_type::DartTokenType::Question => DartElementType::Question,
394            crate::lexer::token_type::DartTokenType::QuestionQuestion => DartElementType::QuestionQuestion,
395            crate::lexer::token_type::DartTokenType::PlusPlus => DartElementType::PlusPlus,
396            crate::lexer::token_type::DartTokenType::MinusMinus => DartElementType::MinusMinus,
397            crate::lexer::token_type::DartTokenType::PlusEqual => DartElementType::PlusEqual,
398            crate::lexer::token_type::DartTokenType::MinusEqual => DartElementType::MinusEqual,
399            crate::lexer::token_type::DartTokenType::StarEqual => DartElementType::StarEqual,
400            crate::lexer::token_type::DartTokenType::SlashEqual => DartElementType::SlashEqual,
401            crate::lexer::token_type::DartTokenType::PercentEqual => DartElementType::PercentEqual,
402            crate::lexer::token_type::DartTokenType::TildeSlashEqual => DartElementType::TildeSlashEqual,
403            crate::lexer::token_type::DartTokenType::LeftShiftEqual => DartElementType::LeftShiftEqual,
404            crate::lexer::token_type::DartTokenType::RightShiftEqual => DartElementType::RightShiftEqual,
405            crate::lexer::token_type::DartTokenType::AmpersandEqual => DartElementType::AmpersandEqual,
406            crate::lexer::token_type::DartTokenType::PipeEqual => DartElementType::PipeEqual,
407            crate::lexer::token_type::DartTokenType::CaretEqual => DartElementType::CaretEqual,
408            crate::lexer::token_type::DartTokenType::QuestionQuestionEqual => DartElementType::QuestionQuestionEqual,
409            crate::lexer::token_type::DartTokenType::Arrow => DartElementType::Arrow,
410            crate::lexer::token_type::DartTokenType::Dot => DartElementType::Dot,
411            crate::lexer::token_type::DartTokenType::DotDot => DartElementType::DotDot,
412            crate::lexer::token_type::DartTokenType::DotDotDot => DartElementType::DotDotDot,
413            crate::lexer::token_type::DartTokenType::QuestionDot => DartElementType::QuestionDot,
414            crate::lexer::token_type::DartTokenType::LeftParen => DartElementType::LeftParen,
415            crate::lexer::token_type::DartTokenType::RightParen => DartElementType::RightParen,
416            crate::lexer::token_type::DartTokenType::LeftBracket => DartElementType::LeftBracket,
417            crate::lexer::token_type::DartTokenType::RightBracket => DartElementType::RightBracket,
418            crate::lexer::token_type::DartTokenType::LeftBrace => DartElementType::LeftBrace,
419            crate::lexer::token_type::DartTokenType::RightBrace => DartElementType::RightBrace,
420            crate::lexer::token_type::DartTokenType::Semicolon => DartElementType::Semicolon,
421            crate::lexer::token_type::DartTokenType::Comma => DartElementType::Comma,
422            crate::lexer::token_type::DartTokenType::Colon => DartElementType::Colon,
423            crate::lexer::token_type::DartTokenType::At => DartElementType::At,
424            crate::lexer::token_type::DartTokenType::Hash => DartElementType::Hash,
425            crate::lexer::token_type::DartTokenType::LineComment => DartElementType::LineComment,
426            crate::lexer::token_type::DartTokenType::BlockComment => DartElementType::BlockComment,
427            crate::lexer::token_type::DartTokenType::DocComment => DartElementType::DocComment,
428            crate::lexer::token_type::DartTokenType::Error => DartElementType::Error,
429            crate::lexer::token_type::DartTokenType::Eof => DartElementType::Eof,
430            crate::lexer::token_type::DartTokenType::VariableDeclaration => DartElementType::VariableDeclaration,
431        }
432    }
433}