|
12 | 12 | use PHP_CodeSniffer\Util\Tokens; |
13 | 13 | use PHPCSUtils\Utils\Arrays; |
14 | 14 | use PHPCSUtils\Utils\FunctionDeclarations; |
| 15 | +use PHPCSUtils\Utils\TextStrings; |
15 | 16 | use WordPressVIPMinimum\Sniffs\Sniff; |
16 | 17 |
|
17 | 18 | /** |
@@ -80,6 +81,9 @@ public function process_token( $stackPtr ) { |
80 | 81 |
|
81 | 82 | if ( $this->tokens[ $callbackPtr ]['code'] === T_CLOSURE ) { |
82 | 83 | $this->processFunctionBody( $callbackPtr ); |
| 84 | + } elseif ( $this->tokens[ $callbackPtr ]['code'] === T_FN ) { |
| 85 | + // Arrow functions always return a value implicitly. No check needed. |
| 86 | + return; |
83 | 87 | } elseif ( $this->tokens[ $callbackPtr ]['code'] === T_ARRAY |
84 | 88 | || $this->tokens[ $callbackPtr ]['code'] === T_OPEN_SHORT_ARRAY |
85 | 89 | ) { |
@@ -133,7 +137,7 @@ private function processArray( $stackPtr ) { |
133 | 137 | */ |
134 | 138 | private function processString( $stackPtr, $start = 0, $end = null ) { |
135 | 139 |
|
136 | | - $callbackFunctionName = substr( $this->tokens[ $stackPtr ]['content'], 1, -1 ); |
| 140 | + $callbackFunctionName = TextStrings::stripQuotes( $this->tokens[ $stackPtr ]['content'] ); |
137 | 141 |
|
138 | 142 | $callbackFunctionPtr = $this->phpcsFile->findNext( |
139 | 143 | T_STRING, |
@@ -165,10 +169,10 @@ private function processFunction( $stackPtr, $start = 0, $end = null ) { |
165 | 169 | $functionName = $this->tokens[ $stackPtr ]['content']; |
166 | 170 |
|
167 | 171 | $offset = $start; |
168 | | - while ( $this->phpcsFile->findNext( [ T_FUNCTION ], $offset, $end ) !== false ) { |
169 | | - $functionStackPtr = $this->phpcsFile->findNext( [ T_FUNCTION ], $offset, $end ); |
170 | | - $functionNamePtr = $this->phpcsFile->findNext( Tokens::$emptyTokens, $functionStackPtr + 1, null, true, null, true ); |
171 | | - if ( $this->tokens[ $functionNamePtr ]['code'] === T_STRING && $this->tokens[ $functionNamePtr ]['content'] === $functionName ) { |
| 172 | + // phpcs:ignore Generic.CodeAnalysis.AssignmentInCondition.FoundInWhileCondition -- Valid usage. |
| 173 | + while ( ( $functionStackPtr = $this->phpcsFile->findNext( T_FUNCTION, $offset, $end ) ) !== false ) { |
| 174 | + $declaredName = FunctionDeclarations::getName( $this->phpcsFile, $functionStackPtr ); |
| 175 | + if ( $declaredName === $functionName ) { |
172 | 176 | $this->processFunctionBody( $functionStackPtr ); |
173 | 177 | return; |
174 | 178 | } |
@@ -294,7 +298,7 @@ private function isInsideIfConditonal( $stackPtr ) { |
294 | 298 | private function isReturningVoid( $stackPtr ) { |
295 | 299 |
|
296 | 300 | $nextToReturnTokenPtr = $this->phpcsFile->findNext( |
297 | | - [ Tokens::$emptyTokens ], |
| 301 | + Tokens::$emptyTokens, |
298 | 302 | $stackPtr + 1, |
299 | 303 | null, |
300 | 304 | true |
|
0 commit comments