@@ -681,6 +681,36 @@ protected function tokenize($string)
681
681
}
682
682
}//end if
683
683
684
+ /*
685
+ Special case for `static` used as a function name, i.e. `static()`.
686
+ */
687
+
688
+ if ($ tokenIsArray === true
689
+ && $ token [0 ] === T_STATIC
690
+ && $ finalTokens [$ lastNotEmptyToken ]['code ' ] !== T_NEW
691
+ ) {
692
+ for ($ i = ($ stackPtr + 1 ); $ i < $ numTokens ; $ i ++) {
693
+ if (is_array ($ tokens [$ i ]) === true
694
+ && isset (Util \Tokens::$ emptyTokens [$ tokens [$ i ][0 ]]) === true
695
+ ) {
696
+ continue ;
697
+ }
698
+
699
+ if ($ tokens [$ i ][0 ] === '( ' ) {
700
+ $ finalTokens [$ newStackPtr ] = [
701
+ 'code ' => T_STRING ,
702
+ 'type ' => 'T_STRING ' ,
703
+ 'content ' => $ token [1 ],
704
+ ];
705
+
706
+ $ newStackPtr ++;
707
+ continue 2 ;
708
+ }
709
+
710
+ break ;
711
+ }
712
+ }//end if
713
+
684
714
/*
685
715
Parse doc blocks into something that can be easily iterated over.
686
716
*/
@@ -2104,38 +2134,60 @@ function return types. We want to keep the parenthesis map clean,
2104
2134
}
2105
2135
} else {
2106
2136
// Some T_STRING tokens should remain that way due to their context.
2107
- if ($ tokenIsArray === true
2108
- && $ token [0 ] === T_STRING
2109
- && isset ($ this ->tstringContexts [$ finalTokens [$ lastNotEmptyToken ]['code ' ]]) === true
2110
- ) {
2111
- // Special case for syntax like: return new self/new parent
2112
- // where self/parent should not be a string.
2113
- $ tokenContentLower = strtolower ($ token [1 ]);
2114
- if ($ finalTokens [$ lastNotEmptyToken ]['code ' ] === T_NEW
2115
- && ($ tokenContentLower === 'self ' || $ tokenContentLower === 'parent ' )
2116
- ) {
2117
- $ finalTokens [$ newStackPtr ] = [
2118
- 'content ' => $ token [1 ],
2119
- ];
2120
- if ($ tokenContentLower === 'self ' ) {
2121
- $ finalTokens [$ newStackPtr ]['code ' ] = T_SELF ;
2122
- $ finalTokens [$ newStackPtr ]['type ' ] = 'T_SELF ' ;
2137
+ if ($ tokenIsArray === true && $ token [0 ] === T_STRING ) {
2138
+ $ preserveTstring = false ;
2139
+
2140
+ if (isset ($ this ->tstringContexts [$ finalTokens [$ lastNotEmptyToken ]['code ' ]]) === true ) {
2141
+ $ preserveTstring = true ;
2142
+
2143
+ // Special case for syntax like: return new self/new parent
2144
+ // where self/parent should not be a string.
2145
+ $ tokenContentLower = strtolower ($ token [1 ]);
2146
+ if ($ finalTokens [$ lastNotEmptyToken ]['code ' ] === T_NEW
2147
+ && ($ tokenContentLower === 'self ' || $ tokenContentLower === 'parent ' )
2148
+ ) {
2149
+ $ preserveTstring = false ;
2123
2150
}
2151
+ } else if ($ finalTokens [$ lastNotEmptyToken ]['content ' ] === '& ' ) {
2152
+ // Function names for functions declared to return by reference.
2153
+ for ($ i = ($ lastNotEmptyToken - 1 ); $ i >= 0 ; $ i --) {
2154
+ if (isset (Util \Tokens::$ emptyTokens [$ finalTokens [$ i ]['code ' ]]) === true ) {
2155
+ continue ;
2156
+ }
2157
+
2158
+ if ($ finalTokens [$ i ]['code ' ] === T_FUNCTION ) {
2159
+ $ preserveTstring = true ;
2160
+ }
2124
2161
2125
- if ($ tokenContentLower === 'parent ' ) {
2126
- $ finalTokens [$ newStackPtr ]['code ' ] = T_PARENT ;
2127
- $ finalTokens [$ newStackPtr ]['type ' ] = 'T_PARENT ' ;
2162
+ break ;
2128
2163
}
2129
2164
} else {
2165
+ // Keywords with special PHPCS token when used as a function call.
2166
+ for ($ i = ($ stackPtr + 1 ); $ i < $ numTokens ; $ i ++) {
2167
+ if (is_array ($ tokens [$ i ]) === true
2168
+ && isset (Util \Tokens::$ emptyTokens [$ tokens [$ i ][0 ]]) === true
2169
+ ) {
2170
+ continue ;
2171
+ }
2172
+
2173
+ if ($ tokens [$ i ][0 ] === '( ' ) {
2174
+ $ preserveTstring = true ;
2175
+ }
2176
+
2177
+ break ;
2178
+ }
2179
+ }//end if
2180
+
2181
+ if ($ preserveTstring === true ) {
2130
2182
$ finalTokens [$ newStackPtr ] = [
2131
- 'content ' => $ token [1 ],
2132
2183
'code ' => T_STRING ,
2133
2184
'type ' => 'T_STRING ' ,
2185
+ 'content ' => $ token [1 ],
2134
2186
];
2135
- }
2136
2187
2137
- $ newStackPtr ++;
2138
- continue ;
2188
+ $ newStackPtr ++;
2189
+ continue ;
2190
+ }
2139
2191
}//end if
2140
2192
2141
2193
$ newToken = null ;
0 commit comments