Skip to content

Commit 66a48e9

Browse files
authored
Merge pull request #142 from PHPCSStandards/feature/operators-isreference-bugfix-closure-return-by-ref
Operators::isReference(): bug fix - closure return by reference not recognized
2 parents c4a63d9 + 66388b8 commit 66a48e9

File tree

3 files changed

+10
-0
lines changed

3 files changed

+10
-0
lines changed

PHPCSUtils/Utils/Operators.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ class Operators
5757
* Determine if the passed token is a reference operator.
5858
*
5959
* Main differences with the PHPCS version:
60+
* - Bug fixed: the `&` for a closure declared to return by reference was not recognized as
61+
* a reference. {@link https://github.com/squizlabs/PHP_CodeSniffer/pull/2977 Open PR upstream}
6062
* - Defensive coding against incorrect calls to this method.
6163
* - Improved handling of select tokenizer errors involving short lists/short arrays.
6264
*
@@ -83,6 +85,7 @@ public static function isReference(File $phpcsFile, $stackPtr)
8385
$tokenBefore = $phpcsFile->findPrevious(Tokens::$emptyTokens, ($stackPtr - 1), null, true);
8486

8587
if ($tokens[$tokenBefore]['code'] === \T_FUNCTION
88+
|| $tokens[$tokenBefore]['code'] === T_CLOSURE
8689
|| FunctionDeclarations::isArrowFunction($phpcsFile, $tokenBefore) === true
8790
) {
8891
// Function returns a reference.

Tests/Utils/Operators/IsReferenceDiffTest.inc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,6 @@ if ($foo) {}
1111
/* testTokenizerIssue1284PHPCSlt280C */
1212
if ($foo) {}
1313
[&$a, $b];
14+
15+
/* testClosureReturnByReference */
16+
$closure = function &($param) use ($value) {};

Tests/Utils/Operators/IsReferenceDiffTest.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,10 @@ public function dataIsReference()
8585
'/* testTokenizerIssue1284PHPCSlt280C */',
8686
true,
8787
],
88+
'closure-return-by-reference' => [
89+
'/* testClosureReturnByReference */',
90+
true,
91+
],
8892
];
8993
}
9094
}

0 commit comments

Comments
 (0)