@@ -319,8 +319,22 @@ public static function findFunctionCall(File $phpcsFile, $stackPtr)
319319 if (is_int ($ openPtr )) {
320320 // First non-whitespace thing and see if it's a T_STRING function name
321321 $ functionPtr = $ phpcsFile ->findPrevious (self ::getEmptyTokens (), $ openPtr - 1 , null , true , null , true );
322- if (is_int ($ functionPtr ) && $ tokens [$ functionPtr ]['code ' ] === T_STRING ) {
323- return $ functionPtr ;
322+ if (is_int ($ functionPtr )) {
323+ $ functionTokenCode = $ tokens [$ functionPtr ]['code ' ];
324+ // In PHPCS 4.x, function names can be T_NAME_FULLY_QUALIFIED, T_NAME_QUALIFIED, or T_NAME_RELATIVE
325+ $ validFunctionTokens = [T_STRING ];
326+ if (defined ('T_NAME_FULLY_QUALIFIED ' )) {
327+ $ validFunctionTokens [] = T_NAME_FULLY_QUALIFIED ;
328+ }
329+ if (defined ('T_NAME_QUALIFIED ' )) {
330+ $ validFunctionTokens [] = T_NAME_QUALIFIED ;
331+ }
332+ if (defined ('T_NAME_RELATIVE ' )) {
333+ $ validFunctionTokens [] = T_NAME_RELATIVE ;
334+ }
335+ if (in_array ($ functionTokenCode , $ validFunctionTokens , true )) {
336+ return $ functionPtr ;
337+ }
324338 }
325339 }
326340 return null ;
@@ -634,6 +648,16 @@ public static function findVariableScopeExceptArrowFunctions(File $phpcsFile, $s
634648 T_HEREDOC ,
635649 T_STRING ,
636650 ];
651+ // In PHPCS 4.x, function names can be T_NAME_FULLY_QUALIFIED, T_NAME_QUALIFIED, or T_NAME_RELATIVE
652+ if (defined ('T_NAME_FULLY_QUALIFIED ' )) {
653+ $ allowedTypes [] = T_NAME_FULLY_QUALIFIED ;
654+ }
655+ if (defined ('T_NAME_QUALIFIED ' )) {
656+ $ allowedTypes [] = T_NAME_QUALIFIED ;
657+ }
658+ if (defined ('T_NAME_RELATIVE ' )) {
659+ $ allowedTypes [] = T_NAME_RELATIVE ;
660+ }
637661 if (! in_array ($ tokens [$ stackPtr ]['code ' ], $ allowedTypes , true )) {
638662 throw new \Exception ("Cannot find variable scope for non-variable {$ tokens [$ stackPtr ]['type ' ]}" );
639663 }
@@ -1766,6 +1790,18 @@ public static function getFunctionNameWithNamespace(File $phpcsFile, $stackPtr)
17661790 $ startOfScope = self ::findVariableScope ($ phpcsFile , $ stackPtr );
17671791 $ functionName = $ tokens [$ stackPtr ]['content ' ];
17681792
1793+ // In PHPCS 4.x, T_NAME_FULLY_QUALIFIED, T_NAME_QUALIFIED, and T_NAME_RELATIVE
1794+ // tokens already contain the full namespaced name, so we can return early.
1795+ if (defined ('T_NAME_FULLY_QUALIFIED ' ) && $ tokens [$ stackPtr ]['code ' ] === T_NAME_FULLY_QUALIFIED ) {
1796+ return $ functionName ;
1797+ }
1798+ if (defined ('T_NAME_QUALIFIED ' ) && $ tokens [$ stackPtr ]['code ' ] === T_NAME_QUALIFIED ) {
1799+ return $ functionName ;
1800+ }
1801+ if (defined ('T_NAME_RELATIVE ' ) && $ tokens [$ stackPtr ]['code ' ] === T_NAME_RELATIVE ) {
1802+ return $ functionName ;
1803+ }
1804+
17691805 // Move backwards from the token, collecting namespace separators and
17701806 // strings, until we encounter whitespace or something else.
17711807 $ partOfNamespace = [T_NS_SEPARATOR , T_STRING ];
0 commit comments