Skip to main content

oak_php/parser/
element_type.rs

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