Skip to main content

oak_php/parser/
element_type.rs

1use oak_core::{ElementType, UniversalElementRole};
2#[cfg(feature = "serde")]
3use serde::{Deserialize, Serialize};
4
5/// Element type for PHP AST
6#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
7#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
8pub enum PhpElementType {
9    /// Whitespace characters
10    Whitespace,
11    /// Newline characters
12    Newline,
13
14    /// Comment
15    Comment,
16
17    /// String literal
18    StringLiteral,
19    /// Number literal
20    NumberLiteral,
21    /// Boolean literal (true, false)
22    BooleanLiteral,
23    /// Null literal
24    NullLiteral,
25
26    /// Identifier
27    Identifier,
28    /// Variable identifier (starting with $)
29    Variable,
30    /// 'abstract' keyword
31    Abstract,
32    /// 'and' operator
33    And,
34    /// 'array' keyword/type
35    Array,
36    /// 'as' keyword
37    As,
38    /// 'break' keyword
39    Break,
40    /// 'callable' type
41    Callable,
42    /// 'case' keyword
43    Case,
44    /// 'catch' keyword
45    Catch,
46    /// 'class' keyword
47    Class,
48    /// 'clone' keyword
49    Clone,
50    /// 'const' keyword
51    Const,
52    /// 'continue' keyword
53    Continue,
54    /// 'declare' keyword
55    Declare,
56    /// 'default' keyword
57    Default,
58    /// 'do' keyword
59    Do,
60    /// 'echo' keyword
61    Echo,
62    /// 'else' keyword
63    Else,
64    /// 'elseif' keyword
65    Elseif,
66    /// 'empty' keyword
67    Empty,
68    /// 'enddeclare' keyword
69    Enddeclare,
70    /// 'endfor' keyword
71    Endfor,
72    /// 'endforeach' keyword
73    Endforeach,
74    /// 'endif' keyword
75    Endif,
76    /// 'endswitch' keyword
77    Endswitch,
78    /// 'endwhile' keyword
79    Endwhile,
80    /// 'eval' keyword
81    Eval,
82    /// 'exit' keyword
83    Exit,
84    /// 'extends' keyword
85    Extends,
86    /// 'final' keyword
87    Final,
88    /// 'finally' keyword
89    Finally,
90    /// 'for' keyword
91    For,
92    /// 'foreach' keyword
93    Foreach,
94    /// 'function' keyword
95    Function,
96    /// 'global' keyword
97    Global,
98    /// 'goto' keyword
99    Goto,
100    /// 'if' keyword
101    If,
102    /// 'implements' keyword
103    Implements,
104    /// 'include' keyword
105    Include,
106    /// 'include_once' keyword
107    IncludeOnce,
108    /// 'instanceof' operator
109    Instanceof,
110    /// 'insteadof' keyword
111    Insteadof,
112    /// 'interface' keyword
113    Interface,
114    /// 'isset' keyword
115    Isset,
116    /// 'list' keyword
117    List,
118    /// 'namespace' keyword
119    Namespace,
120    /// 'new' keyword
121    New,
122    /// 'or' operator
123    Or,
124    /// 'print' keyword
125    Print,
126    /// 'private' keyword
127    Private,
128    /// 'protected' keyword
129    Protected,
130    /// 'public' keyword
131    Public,
132    /// 'require' keyword
133    Require,
134    /// 'require_once' keyword
135    RequireOnce,
136    /// 'return' keyword
137    Return,
138    /// 'static' keyword
139    Static,
140    /// 'switch' keyword
141    Switch,
142    /// 'throw' keyword
143    Throw,
144    /// 'trait' keyword
145    Trait,
146    /// 'try' keyword
147    Try,
148    /// 'unset' keyword
149    Unset,
150    /// 'use' keyword
151    Use,
152    /// 'var' keyword
153    Var,
154    /// 'while' keyword
155    While,
156    /// 'xor' operator
157    Xor,
158    /// 'yield' keyword
159    Yield,
160    /// 'yield from' keyword
161    YieldFrom,
162
163    /// Plus operator (+)
164    Plus,
165    /// Minus operator (-)
166    Minus,
167    /// Multiply operator (*)
168    Multiply,
169    /// Divide operator (/)
170    Divide,
171    /// Modulo operator (%)
172    Modulo,
173    /// Power operator (**)
174    Power,
175    /// Concatenation operator (.)
176    Concat,
177    /// Equality operator (==)
178    Equal,
179    /// Identity operator (===)
180    Identical,
181    /// Inequality operator (!= or <>)
182    NotEqual,
183    /// Non-identity operator (!==)
184    NotIdentical,
185    /// Less than operator (<)
186    Less,
187    /// Greater than operator (>)
188    Greater,
189    /// Less than or equal operator (<=)
190    LessEqual,
191    /// Greater than or equal operator (>=)
192    GreaterEqual,
193    /// Spaceship operator (<=>)
194    Spaceship,
195    /// Logical AND operator (&&)
196    LogicalAnd,
197    /// Logical OR operator (||)
198    LogicalOr,
199    /// Logical XOR operator
200    LogicalXor,
201    /// Logical NOT operator (!)
202    LogicalNot,
203    /// Bitwise AND operator (&)
204    BitwiseAnd,
205    /// Bitwise OR operator (|)
206    BitwiseOr,
207    /// Bitwise XOR operator (^)
208    BitwiseXor,
209    /// Bitwise NOT operator (~)
210    BitwiseNot,
211    /// Left shift operator (<<)
212    LeftShift,
213    /// Right shift operator (>>)
214    RightShift,
215    /// Assignment operator (=)
216    Assign,
217    /// Plus assignment operator (+=)
218    PlusAssign,
219    /// Minus assignment operator (-=)
220    MinusAssign,
221    /// Multiply assignment operator (*=)
222    MultiplyAssign,
223    /// Divide assignment operator (/=)
224    DivideAssign,
225    /// Modulo assignment operator (%=)
226    ModuloAssign,
227    /// Power assignment operator (**=)
228    PowerAssign,
229    /// Concatenation assignment operator (.=)
230    ConcatAssign,
231    /// Bitwise AND assignment operator (&=)
232    BitwiseAndAssign,
233    /// Bitwise OR assignment operator (|=)
234    BitwiseOrAssign,
235    /// Bitwise XOR assignment operator (^=)
236    BitwiseXorAssign,
237    /// Left shift assignment operator (<<=)
238    LeftShiftAssign,
239    /// Right shift assignment operator (>>=)
240    RightShiftAssign,
241    /// Increment operator (++)
242    Increment,
243    /// Decrement operator (--)
244    Decrement,
245    /// Object member access operator (->)
246    Arrow,
247    /// Array element arrow (=>)
248    DoubleArrow,
249    /// Null coalescing operator (??)
250    NullCoalesce,
251    /// Null coalescing assignment operator (??=)
252    NullCoalesceAssign,
253    /// Ellipsis operator (...)
254    Ellipsis,
255
256    /// Left parenthesis (()
257    LeftParen,
258    /// Right parenthesis ())
259    RightParen,
260    /// Left bracket ([)
261    LeftBracket,
262    /// Right bracket (])
263    RightBracket,
264    /// Left brace ({)
265    LeftBrace,
266    /// Right brace (})
267    RightBrace,
268    /// Semicolon (;)
269    Semicolon,
270    /// Comma (,)
271    Comma,
272    /// Dot operator (.)
273    Dot,
274    /// Question mark (?)
275    Question,
276    /// Colon operator (:)
277    Colon,
278    /// Scope resolution operator (::)
279    DoubleColon,
280    /// Backslash (\)
281    Backslash,
282    /// Error suppression operator (@)
283    At,
284    /// Dollar sign ($)
285    Dollar,
286
287    /// PHP opening tag (<?php)
288    OpenTag,
289    /// PHP closing tag (?>)
290    CloseTag,
291    /// PHP echo tag (<?=)
292    EchoTag,
293
294    /// End of file
295    Eof,
296    /// Error node
297    Error,
298
299    /// Root node of the document
300    Root,
301    /// Class definition
302    ClassDef,
303    /// Function definition
304    FunctionDef,
305    /// Method definition
306    MethodDef,
307    /// Property definition
308    PropertyDef,
309    /// Constant definition
310    ConstDef,
311    /// Trait definition
312    TraitDef,
313    /// Interface definition
314    InterfaceDef,
315    /// Namespace definition
316    NamespaceDef,
317    /// Use statement
318    UseStatement,
319    /// If statement
320    IfStatement,
321    /// While statement
322    WhileStatement,
323    /// Do-while statement
324    DoWhileStatement,
325    /// For statement
326    ForStatement,
327    /// Foreach statement
328    ForeachStatement,
329    /// Switch statement
330    SwitchStatement,
331    /// Try statement
332    TryStatement,
333    /// Catch block
334    CatchBlock,
335    /// Finally block
336    FinallyBlock,
337    /// Expression statement
338    ExpressionStatement,
339    /// Return statement
340    ReturnStatement,
341    /// Throw statement
342    ThrowStatement,
343    /// Break statement
344    BreakStatement,
345    /// Continue statement
346    ContinueStatement,
347    /// Echo statement
348    EchoStatement,
349    /// Global statement
350    GlobalStatement,
351    /// Static statement
352    StaticStatement,
353    /// Unset statement
354    UnsetStatement,
355    /// Compound statement (block)
356    CompoundStatement,
357
358    /// Literal expression
359    Literal,
360    /// Parenthesized expression
361    ParenthesizedExpression,
362    /// Function or method call
363    CallExpression,
364    /// Array access expression
365    ArrayAccessExpression,
366    /// Member access expression
367    MemberAccessExpression,
368    /// Binary expression
369    BinaryExpression,
370}
371
372impl ElementType for PhpElementType {
373    type Role = UniversalElementRole;
374
375    fn role(&self) -> Self::Role {
376        match self {
377            _ => UniversalElementRole::None,
378        }
379    }
380}
381
382impl From<crate::lexer::token_type::PhpTokenType> for PhpElementType {
383    fn from(token: crate::lexer::token_type::PhpTokenType) -> Self {
384        match token {
385            // Whitespace and newlines
386            crate::lexer::token_type::PhpTokenType::Whitespace => PhpElementType::Whitespace,
387            crate::lexer::token_type::PhpTokenType::Newline => PhpElementType::Newline,
388
389            // Comments
390            crate::lexer::token_type::PhpTokenType::Comment => PhpElementType::Comment,
391
392            // Literals
393            crate::lexer::token_type::PhpTokenType::StringLiteral => PhpElementType::StringLiteral,
394            crate::lexer::token_type::PhpTokenType::NumberLiteral => PhpElementType::NumberLiteral,
395            crate::lexer::token_type::PhpTokenType::BooleanLiteral => PhpElementType::BooleanLiteral,
396            crate::lexer::token_type::PhpTokenType::NullLiteral => PhpElementType::NullLiteral,
397
398            // Identifiers and keywords
399            crate::lexer::token_type::PhpTokenType::Identifier => PhpElementType::Identifier,
400            crate::lexer::token_type::PhpTokenType::Variable => PhpElementType::Variable,
401            crate::lexer::token_type::PhpTokenType::Abstract => PhpElementType::Abstract,
402            crate::lexer::token_type::PhpTokenType::And => PhpElementType::And,
403            crate::lexer::token_type::PhpTokenType::Array => PhpElementType::Array,
404            crate::lexer::token_type::PhpTokenType::As => PhpElementType::As,
405            crate::lexer::token_type::PhpTokenType::Break => PhpElementType::Break,
406            crate::lexer::token_type::PhpTokenType::Callable => PhpElementType::Callable,
407            crate::lexer::token_type::PhpTokenType::Case => PhpElementType::Case,
408            crate::lexer::token_type::PhpTokenType::Catch => PhpElementType::Catch,
409            crate::lexer::token_type::PhpTokenType::Class => PhpElementType::Class,
410            crate::lexer::token_type::PhpTokenType::Clone => PhpElementType::Clone,
411            crate::lexer::token_type::PhpTokenType::Const => PhpElementType::Const,
412            crate::lexer::token_type::PhpTokenType::Continue => PhpElementType::Continue,
413            crate::lexer::token_type::PhpTokenType::Declare => PhpElementType::Declare,
414            crate::lexer::token_type::PhpTokenType::Default => PhpElementType::Default,
415            crate::lexer::token_type::PhpTokenType::Do => PhpElementType::Do,
416            crate::lexer::token_type::PhpTokenType::Echo => PhpElementType::Echo,
417            crate::lexer::token_type::PhpTokenType::Else => PhpElementType::Else,
418            crate::lexer::token_type::PhpTokenType::Elseif => PhpElementType::Elseif,
419            crate::lexer::token_type::PhpTokenType::Empty => PhpElementType::Empty,
420            crate::lexer::token_type::PhpTokenType::Enddeclare => PhpElementType::Enddeclare,
421            crate::lexer::token_type::PhpTokenType::Endfor => PhpElementType::Endfor,
422            crate::lexer::token_type::PhpTokenType::Endforeach => PhpElementType::Endforeach,
423            crate::lexer::token_type::PhpTokenType::Endif => PhpElementType::Endif,
424            crate::lexer::token_type::PhpTokenType::Endswitch => PhpElementType::Endswitch,
425            crate::lexer::token_type::PhpTokenType::Endwhile => PhpElementType::Endwhile,
426            crate::lexer::token_type::PhpTokenType::Eval => PhpElementType::Eval,
427            crate::lexer::token_type::PhpTokenType::Exit => PhpElementType::Exit,
428            crate::lexer::token_type::PhpTokenType::Extends => PhpElementType::Extends,
429            crate::lexer::token_type::PhpTokenType::Final => PhpElementType::Final,
430            crate::lexer::token_type::PhpTokenType::Finally => PhpElementType::Finally,
431            crate::lexer::token_type::PhpTokenType::For => PhpElementType::For,
432            crate::lexer::token_type::PhpTokenType::Foreach => PhpElementType::Foreach,
433            crate::lexer::token_type::PhpTokenType::Function => PhpElementType::Function,
434            crate::lexer::token_type::PhpTokenType::Global => PhpElementType::Global,
435            crate::lexer::token_type::PhpTokenType::Goto => PhpElementType::Goto,
436            crate::lexer::token_type::PhpTokenType::If => PhpElementType::If,
437            crate::lexer::token_type::PhpTokenType::Implements => PhpElementType::Implements,
438            crate::lexer::token_type::PhpTokenType::Include => PhpElementType::Include,
439            crate::lexer::token_type::PhpTokenType::IncludeOnce => PhpElementType::IncludeOnce,
440            crate::lexer::token_type::PhpTokenType::Instanceof => PhpElementType::Instanceof,
441            crate::lexer::token_type::PhpTokenType::Insteadof => PhpElementType::Insteadof,
442            crate::lexer::token_type::PhpTokenType::Interface => PhpElementType::Interface,
443            crate::lexer::token_type::PhpTokenType::Isset => PhpElementType::Isset,
444            crate::lexer::token_type::PhpTokenType::List => PhpElementType::List,
445            crate::lexer::token_type::PhpTokenType::Namespace => PhpElementType::Namespace,
446            crate::lexer::token_type::PhpTokenType::New => PhpElementType::New,
447            crate::lexer::token_type::PhpTokenType::Or => PhpElementType::Or,
448            crate::lexer::token_type::PhpTokenType::Print => PhpElementType::Print,
449            crate::lexer::token_type::PhpTokenType::Private => PhpElementType::Private,
450            crate::lexer::token_type::PhpTokenType::Protected => PhpElementType::Protected,
451            crate::lexer::token_type::PhpTokenType::Public => PhpElementType::Public,
452            crate::lexer::token_type::PhpTokenType::Require => PhpElementType::Require,
453            crate::lexer::token_type::PhpTokenType::RequireOnce => PhpElementType::RequireOnce,
454            crate::lexer::token_type::PhpTokenType::Return => PhpElementType::Return,
455            crate::lexer::token_type::PhpTokenType::Static => PhpElementType::Static,
456            crate::lexer::token_type::PhpTokenType::Switch => PhpElementType::Switch,
457            crate::lexer::token_type::PhpTokenType::Throw => PhpElementType::Throw,
458            crate::lexer::token_type::PhpTokenType::Trait => PhpElementType::Trait,
459            crate::lexer::token_type::PhpTokenType::Try => PhpElementType::Try,
460            crate::lexer::token_type::PhpTokenType::Unset => PhpElementType::Unset,
461            crate::lexer::token_type::PhpTokenType::Use => PhpElementType::Use,
462            crate::lexer::token_type::PhpTokenType::Var => PhpElementType::Var,
463            crate::lexer::token_type::PhpTokenType::While => PhpElementType::While,
464            crate::lexer::token_type::PhpTokenType::Xor => PhpElementType::Xor,
465            crate::lexer::token_type::PhpTokenType::Yield => PhpElementType::Yield,
466            crate::lexer::token_type::PhpTokenType::YieldFrom => PhpElementType::YieldFrom,
467
468            // Operators
469            crate::lexer::token_type::PhpTokenType::Plus => PhpElementType::Plus,
470            crate::lexer::token_type::PhpTokenType::Minus => PhpElementType::Minus,
471            crate::lexer::token_type::PhpTokenType::Multiply => PhpElementType::Multiply,
472            crate::lexer::token_type::PhpTokenType::Divide => PhpElementType::Divide,
473            crate::lexer::token_type::PhpTokenType::Modulo => PhpElementType::Modulo,
474            crate::lexer::token_type::PhpTokenType::Power => PhpElementType::Power,
475            crate::lexer::token_type::PhpTokenType::Concat => PhpElementType::Concat,
476            crate::lexer::token_type::PhpTokenType::Equal => PhpElementType::Equal,
477            crate::lexer::token_type::PhpTokenType::Identical => PhpElementType::Identical,
478            crate::lexer::token_type::PhpTokenType::NotEqual => PhpElementType::NotEqual,
479            crate::lexer::token_type::PhpTokenType::NotIdentical => PhpElementType::NotIdentical,
480            crate::lexer::token_type::PhpTokenType::Less => PhpElementType::Less,
481            crate::lexer::token_type::PhpTokenType::Greater => PhpElementType::Greater,
482            crate::lexer::token_type::PhpTokenType::LessEqual => PhpElementType::LessEqual,
483            crate::lexer::token_type::PhpTokenType::GreaterEqual => PhpElementType::GreaterEqual,
484            crate::lexer::token_type::PhpTokenType::Spaceship => PhpElementType::Spaceship,
485            crate::lexer::token_type::PhpTokenType::LogicalAnd => PhpElementType::LogicalAnd,
486            crate::lexer::token_type::PhpTokenType::LogicalOr => PhpElementType::LogicalOr,
487            crate::lexer::token_type::PhpTokenType::LogicalXor => PhpElementType::LogicalXor,
488            crate::lexer::token_type::PhpTokenType::LogicalNot => PhpElementType::LogicalNot,
489            crate::lexer::token_type::PhpTokenType::BitwiseAnd => PhpElementType::BitwiseAnd,
490            crate::lexer::token_type::PhpTokenType::BitwiseOr => PhpElementType::BitwiseOr,
491            crate::lexer::token_type::PhpTokenType::BitwiseXor => PhpElementType::BitwiseXor,
492            crate::lexer::token_type::PhpTokenType::BitwiseNot => PhpElementType::BitwiseNot,
493            crate::lexer::token_type::PhpTokenType::LeftShift => PhpElementType::LeftShift,
494            crate::lexer::token_type::PhpTokenType::RightShift => PhpElementType::RightShift,
495            crate::lexer::token_type::PhpTokenType::Assign => PhpElementType::Assign,
496            crate::lexer::token_type::PhpTokenType::PlusAssign => PhpElementType::PlusAssign,
497            crate::lexer::token_type::PhpTokenType::MinusAssign => PhpElementType::MinusAssign,
498            crate::lexer::token_type::PhpTokenType::MultiplyAssign => PhpElementType::MultiplyAssign,
499            crate::lexer::token_type::PhpTokenType::DivideAssign => PhpElementType::DivideAssign,
500            crate::lexer::token_type::PhpTokenType::ModuloAssign => PhpElementType::ModuloAssign,
501            crate::lexer::token_type::PhpTokenType::PowerAssign => PhpElementType::PowerAssign,
502            crate::lexer::token_type::PhpTokenType::ConcatAssign => PhpElementType::ConcatAssign,
503            crate::lexer::token_type::PhpTokenType::BitwiseAndAssign => PhpElementType::BitwiseAndAssign,
504            crate::lexer::token_type::PhpTokenType::BitwiseOrAssign => PhpElementType::BitwiseOrAssign,
505            crate::lexer::token_type::PhpTokenType::BitwiseXorAssign => PhpElementType::BitwiseXorAssign,
506            crate::lexer::token_type::PhpTokenType::LeftShiftAssign => PhpElementType::LeftShiftAssign,
507            crate::lexer::token_type::PhpTokenType::RightShiftAssign => PhpElementType::RightShiftAssign,
508            crate::lexer::token_type::PhpTokenType::Increment => PhpElementType::Increment,
509            crate::lexer::token_type::PhpTokenType::Decrement => PhpElementType::Decrement,
510            crate::lexer::token_type::PhpTokenType::Arrow => PhpElementType::Arrow,
511            crate::lexer::token_type::PhpTokenType::DoubleArrow => PhpElementType::DoubleArrow,
512            crate::lexer::token_type::PhpTokenType::NullCoalesce => PhpElementType::NullCoalesce,
513            crate::lexer::token_type::PhpTokenType::NullCoalesceAssign => PhpElementType::NullCoalesceAssign,
514            crate::lexer::token_type::PhpTokenType::Ellipsis => PhpElementType::Ellipsis,
515
516            // Punctuations
517            crate::lexer::token_type::PhpTokenType::LeftParen => PhpElementType::LeftParen,
518            crate::lexer::token_type::PhpTokenType::RightParen => PhpElementType::RightParen,
519            crate::lexer::token_type::PhpTokenType::LeftBracket => PhpElementType::LeftBracket,
520            crate::lexer::token_type::PhpTokenType::RightBracket => PhpElementType::RightBracket,
521            crate::lexer::token_type::PhpTokenType::LeftBrace => PhpElementType::LeftBrace,
522            crate::lexer::token_type::PhpTokenType::RightBrace => PhpElementType::RightBrace,
523            crate::lexer::token_type::PhpTokenType::Semicolon => PhpElementType::Semicolon,
524            crate::lexer::token_type::PhpTokenType::Comma => PhpElementType::Comma,
525            crate::lexer::token_type::PhpTokenType::Dot => PhpElementType::Dot,
526            crate::lexer::token_type::PhpTokenType::Question => PhpElementType::Question,
527            crate::lexer::token_type::PhpTokenType::Colon => PhpElementType::Colon,
528            crate::lexer::token_type::PhpTokenType::DoubleColon => PhpElementType::DoubleColon,
529            crate::lexer::token_type::PhpTokenType::Backslash => PhpElementType::Backslash,
530            crate::lexer::token_type::PhpTokenType::At => PhpElementType::At,
531            crate::lexer::token_type::PhpTokenType::Dollar => PhpElementType::Dollar,
532
533            // PHP special tags
534            crate::lexer::token_type::PhpTokenType::OpenTag => PhpElementType::OpenTag,
535            crate::lexer::token_type::PhpTokenType::CloseTag => PhpElementType::CloseTag,
536            crate::lexer::token_type::PhpTokenType::EchoTag => PhpElementType::EchoTag,
537
538            // Special
539            crate::lexer::token_type::PhpTokenType::Eof => PhpElementType::Eof,
540            crate::lexer::token_type::PhpTokenType::Error => PhpElementType::Error,
541
542            // Element types
543            crate::lexer::token_type::PhpTokenType::Root => PhpElementType::Root,
544            crate::lexer::token_type::PhpTokenType::ClassDef => PhpElementType::ClassDef,
545            crate::lexer::token_type::PhpTokenType::FunctionDef => PhpElementType::FunctionDef,
546            crate::lexer::token_type::PhpTokenType::MethodDef => PhpElementType::MethodDef,
547            crate::lexer::token_type::PhpTokenType::PropertyDef => PhpElementType::PropertyDef,
548            crate::lexer::token_type::PhpTokenType::ConstDef => PhpElementType::ConstDef,
549            crate::lexer::token_type::PhpTokenType::TraitDef => PhpElementType::TraitDef,
550            crate::lexer::token_type::PhpTokenType::InterfaceDef => PhpElementType::InterfaceDef,
551            crate::lexer::token_type::PhpTokenType::NamespaceDef => PhpElementType::NamespaceDef,
552            crate::lexer::token_type::PhpTokenType::UseStatement => PhpElementType::UseStatement,
553            crate::lexer::token_type::PhpTokenType::IfStatement => PhpElementType::IfStatement,
554            crate::lexer::token_type::PhpTokenType::WhileStatement => PhpElementType::WhileStatement,
555            crate::lexer::token_type::PhpTokenType::DoWhileStatement => PhpElementType::DoWhileStatement,
556            crate::lexer::token_type::PhpTokenType::ForStatement => PhpElementType::ForStatement,
557            crate::lexer::token_type::PhpTokenType::ForeachStatement => PhpElementType::ForeachStatement,
558            crate::lexer::token_type::PhpTokenType::SwitchStatement => PhpElementType::SwitchStatement,
559            crate::lexer::token_type::PhpTokenType::TryStatement => PhpElementType::TryStatement,
560            crate::lexer::token_type::PhpTokenType::CatchBlock => PhpElementType::CatchBlock,
561            crate::lexer::token_type::PhpTokenType::FinallyBlock => PhpElementType::FinallyBlock,
562            crate::lexer::token_type::PhpTokenType::ExpressionStatement => PhpElementType::ExpressionStatement,
563            crate::lexer::token_type::PhpTokenType::ReturnStatement => PhpElementType::ReturnStatement,
564            crate::lexer::token_type::PhpTokenType::ThrowStatement => PhpElementType::ThrowStatement,
565            crate::lexer::token_type::PhpTokenType::BreakStatement => PhpElementType::BreakStatement,
566            crate::lexer::token_type::PhpTokenType::ContinueStatement => PhpElementType::ContinueStatement,
567            crate::lexer::token_type::PhpTokenType::EchoStatement => PhpElementType::EchoStatement,
568            crate::lexer::token_type::PhpTokenType::GlobalStatement => PhpElementType::GlobalStatement,
569            crate::lexer::token_type::PhpTokenType::StaticStatement => PhpElementType::StaticStatement,
570            crate::lexer::token_type::PhpTokenType::UnsetStatement => PhpElementType::UnsetStatement,
571            crate::lexer::token_type::PhpTokenType::CompoundStatement => PhpElementType::CompoundStatement,
572
573            // Expressions
574            crate::lexer::token_type::PhpTokenType::Literal => PhpElementType::Literal,
575            crate::lexer::token_type::PhpTokenType::ParenthesizedExpression => PhpElementType::ParenthesizedExpression,
576            crate::lexer::token_type::PhpTokenType::CallExpression => PhpElementType::CallExpression,
577            crate::lexer::token_type::PhpTokenType::ArrayAccessExpression => PhpElementType::ArrayAccessExpression,
578            crate::lexer::token_type::PhpTokenType::MemberAccessExpression => PhpElementType::MemberAccessExpression,
579            crate::lexer::token_type::PhpTokenType::BinaryExpression => PhpElementType::BinaryExpression,
580        }
581    }
582}