@@ -53,7 +53,7 @@ class PhpParser
5353 */
5454 public function parse (string $ code ): \stdClass
5555 {
56- $ tokens = token_get_all ($ code , TOKEN_PARSE );
56+ $ tokens = \PhpToken:: tokenize ($ code , TOKEN_PARSE );
5757
5858 $ level = $ classLevel = $ functionLevel = null ;
5959 $ namespace = '' ;
@@ -70,11 +70,9 @@ public function parse(string $code): \stdClass
7070
7171 while ($ token = current ($ tokens )) {
7272 next ($ tokens );
73- if (is_array ($ token )) {
74- $ line = $ token [2 ];
75- }
73+ $ line = $ token ->line ;
7674
77- switch (is_array ( $ token) ? $ token [ 0 ] : $ token ) {
75+ switch ($ token-> id ) {
7876 case T_NAMESPACE :
7977 $ namespace = self ::fetch ($ tokens , [T_STRING , T_NAME_QUALIFIED ]);
8078 $ namespace = ltrim ($ namespace . '\\' , '\\' );
@@ -84,9 +82,9 @@ public function parse(string $code): \stdClass
8482 case T_INTERFACE :
8583 case T_TRAIT :
8684 if ($ name = self ::fetch ($ tokens , T_STRING )) {
87- if ($ token[ 0 ] === T_CLASS ) {
85+ if ($ token-> id === T_CLASS ) {
8886 $ class = &$ result ->classes [$ namespace . $ name ];
89- } elseif ($ token[ 0 ] === T_INTERFACE ) {
87+ } elseif ($ token-> id === T_INTERFACE ) {
9088 $ class = &$ result ->interfaces [$ namespace . $ name ];
9189 } else {
9290 $ class = &$ result ->traits [$ namespace . $ name ];
@@ -105,7 +103,7 @@ public function parse(string $code): \stdClass
105103 case T_PUBLIC :
106104 case T_PROTECTED :
107105 case T_PRIVATE :
108- $ visibility = $ token[ 1 ] ;
106+ $ visibility = $ token-> text ;
109107 break ;
110108
111109 case T_ABSTRACT :
@@ -138,11 +136,11 @@ public function parse(string $code): \stdClass
138136
139137 case T_CURLY_OPEN :
140138 case T_DOLLAR_OPEN_CURLY_BRACES :
141- case '{ ' :
139+ case ord ( '{ ' ) :
142140 $ level ++;
143141 break ;
144142
145- case '} ' :
143+ case ord ( '} ' ) :
146144 if (isset ($ function ) && $ level === $ functionLevel ) {
147145 $ function ->end = $ line ;
148146 unset($ function );
@@ -157,12 +155,12 @@ public function parse(string $code): \stdClass
157155
158156 case T_COMMENT :
159157 case T_DOC_COMMENT :
160- $ result ->linesOfComments += substr_count (trim ($ token[ 1 ] ), "\n" ) + 1 ;
158+ $ result ->linesOfComments += substr_count (trim ($ token-> text ), "\n" ) + 1 ;
161159 // break omitted
162160
163161 case T_WHITESPACE :
164162 case T_CONSTANT_ENCAPSED_STRING :
165- $ line += substr_count ($ token[ 1 ] , "\n" );
163+ $ line += substr_count ($ token-> text , "\n" );
166164 break ;
167165 }
168166 }
@@ -175,10 +173,9 @@ private static function fetch(array &$tokens, array|int $take): ?string
175173 {
176174 $ res = null ;
177175 while ($ token = current ($ tokens )) {
178- [$ token , $ s ] = is_array ($ token ) ? $ token : [$ token , $ token ];
179- if (in_array ($ token , (array ) $ take , true )) {
180- $ res .= $ s ;
181- } elseif (!in_array ($ token , [T_DOC_COMMENT , T_WHITESPACE , T_COMMENT ], true )) {
176+ if ($ token ->is ($ take )) {
177+ $ res .= $ token ->text ;
178+ } elseif (!$ token ->is ([T_DOC_COMMENT , T_WHITESPACE , T_COMMENT ])) {
182179 break ;
183180 }
184181
0 commit comments