From 9d8ac547ef72d8a6e78513c64be014d081d70767 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Bundyra?= Date: Wed, 28 Feb 2024 10:10:04 +0000 Subject: [PATCH 1/3] fix: Squiz.Arrays.ArrayDeclaration for static closures Fixes #368 --- .../Squiz/Sniffs/Arrays/ArrayDeclarationSniff.php | 6 +++++- .../Tests/Arrays/ArrayDeclarationUnitTest.3.inc | 11 +++++++++++ .../Arrays/ArrayDeclarationUnitTest.3.inc.fixed | 12 ++++++++++++ .../Squiz/Tests/Arrays/ArrayDeclarationUnitTest.php | 4 ++++ 4 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.3.inc create mode 100644 src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.3.inc.fixed diff --git a/src/Standards/Squiz/Sniffs/Arrays/ArrayDeclarationSniff.php b/src/Standards/Squiz/Sniffs/Arrays/ArrayDeclarationSniff.php index 9cd419822d..44cacf53b9 100644 --- a/src/Standards/Squiz/Sniffs/Arrays/ArrayDeclarationSniff.php +++ b/src/Standards/Squiz/Sniffs/Arrays/ArrayDeclarationSniff.php @@ -654,7 +654,11 @@ public function processMultiLineArray($phpcsFile, $stackPtr, $arrayStart, $array if ($tokens[$valuePointer]['code'] === T_CLOSURE || $tokens[$valuePointer]['code'] === T_FN ) { - $ignoreTokens += [T_STATIC => T_STATIC]; + // check if the closure is static, if it is, override the value pointer as indices before did not do it correctly + $staticPointer = $phpcsFile->findPrevious($ignoreTokens, ($valuePointer - 1), ($arrayStart + 1), true); + if ($staticPointer !== false && $tokens[$staticPointer]['code'] === T_STATIC) { + $valuePointer = $staticPointer; + } } $previous = $phpcsFile->findPrevious($ignoreTokens, ($valuePointer - 1), ($arrayStart + 1), true); diff --git a/src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.3.inc b/src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.3.inc new file mode 100644 index 0000000000..36e80f0cb6 --- /dev/null +++ b/src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.3.inc @@ -0,0 +1,11 @@ + [ + 1, static fn (float $item): float => match ($item) { + 2.0 => 3.0, + default => $item + }, + ]; +}; diff --git a/src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.3.inc.fixed b/src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.3.inc.fixed new file mode 100644 index 0000000000..2e691adf88 --- /dev/null +++ b/src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.3.inc.fixed @@ -0,0 +1,12 @@ + [ + 1, + static fn (float $item): float => match ($item) { + 2.0 => 3.0, + default => $item + }, + ]; +}; diff --git a/src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.php b/src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.php index 6ec80af373..a6100fb6c3 100644 --- a/src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.php +++ b/src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.php @@ -226,6 +226,10 @@ public function getErrorList($testFile='') 519 => 1, 526 => 1, ]; + case 'ArrayDeclarationUnitTest.3.inc': + return [ + 6 => 1, + ]; default: return []; }//end switch From 6d2d7e1882bfaf87894e7b848d5645ae89202728 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Bundyra?= Date: Wed, 28 Feb 2024 10:22:06 +0000 Subject: [PATCH 2/3] Update ArrayDeclarationSniff.php --- src/Standards/Squiz/Sniffs/Arrays/ArrayDeclarationSniff.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Standards/Squiz/Sniffs/Arrays/ArrayDeclarationSniff.php b/src/Standards/Squiz/Sniffs/Arrays/ArrayDeclarationSniff.php index 44cacf53b9..c8c1ad2717 100644 --- a/src/Standards/Squiz/Sniffs/Arrays/ArrayDeclarationSniff.php +++ b/src/Standards/Squiz/Sniffs/Arrays/ArrayDeclarationSniff.php @@ -654,7 +654,7 @@ public function processMultiLineArray($phpcsFile, $stackPtr, $arrayStart, $array if ($tokens[$valuePointer]['code'] === T_CLOSURE || $tokens[$valuePointer]['code'] === T_FN ) { - // check if the closure is static, if it is, override the value pointer as indices before did not do it correctly + // Check if the closure is static, if it is, override the value pointer as indices before did not do it correctly. $staticPointer = $phpcsFile->findPrevious($ignoreTokens, ($valuePointer - 1), ($arrayStart + 1), true); if ($staticPointer !== false && $tokens[$staticPointer]['code'] === T_STATIC) { $valuePointer = $staticPointer; From b80fa2d4f91b246588b48b3ef5ff5f4d09d942e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Bundyra?= Date: Wed, 28 Feb 2024 17:17:17 +0000 Subject: [PATCH 3/3] update per @jrfnl --- .../Squiz/Sniffs/Arrays/ArrayDeclarationSniff.php | 15 +++++---------- .../Tests/Arrays/ArrayDeclarationUnitTest.1.inc | 7 +++++++ .../Arrays/ArrayDeclarationUnitTest.1.inc.fixed | 8 ++++++++ .../Tests/Arrays/ArrayDeclarationUnitTest.2.inc | 7 +++++++ .../Arrays/ArrayDeclarationUnitTest.2.inc.fixed | 8 ++++++++ .../Tests/Arrays/ArrayDeclarationUnitTest.3.inc | 11 ----------- .../Arrays/ArrayDeclarationUnitTest.3.inc.fixed | 12 ------------ .../Tests/Arrays/ArrayDeclarationUnitTest.php | 6 ++---- 8 files changed, 37 insertions(+), 37 deletions(-) delete mode 100644 src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.3.inc delete mode 100644 src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.3.inc.fixed diff --git a/src/Standards/Squiz/Sniffs/Arrays/ArrayDeclarationSniff.php b/src/Standards/Squiz/Sniffs/Arrays/ArrayDeclarationSniff.php index c8c1ad2717..05861c91ff 100644 --- a/src/Standards/Squiz/Sniffs/Arrays/ArrayDeclarationSniff.php +++ b/src/Standards/Squiz/Sniffs/Arrays/ArrayDeclarationSniff.php @@ -378,6 +378,7 @@ public function processMultiLineArray($phpcsFile, $stackPtr, $arrayStart, $array if ($tokens[$nextToken]['code'] === T_ARRAY || $tokens[$nextToken]['code'] === T_OPEN_SHORT_ARRAY + || $tokens[$nextToken]['code'] === T_STATIC || $tokens[$nextToken]['code'] === T_CLOSURE || $tokens[$nextToken]['code'] === T_FN || $tokens[$nextToken]['code'] === T_MATCH @@ -388,6 +389,10 @@ public function processMultiLineArray($phpcsFile, $stackPtr, $arrayStart, $array $lastToken = $nextToken; } + if ($tokens[$nextToken]['code'] === T_STATIC) { + $nextToken = $phpcsFile->findNext(Tokens::$emptyTokens, ($nextToken + 1), null, true); + } + if ($tokens[$nextToken]['code'] === T_ARRAY) { $nextToken = $tokens[$tokens[$nextToken]['parenthesis_opener']]['parenthesis_closer']; } else if ($tokens[$nextToken]['code'] === T_OPEN_SHORT_ARRAY) { @@ -651,16 +656,6 @@ public function processMultiLineArray($phpcsFile, $stackPtr, $arrayStart, $array ]; $ignoreTokens += Tokens::$castTokens; - if ($tokens[$valuePointer]['code'] === T_CLOSURE - || $tokens[$valuePointer]['code'] === T_FN - ) { - // Check if the closure is static, if it is, override the value pointer as indices before did not do it correctly. - $staticPointer = $phpcsFile->findPrevious($ignoreTokens, ($valuePointer - 1), ($arrayStart + 1), true); - if ($staticPointer !== false && $tokens[$staticPointer]['code'] === T_STATIC) { - $valuePointer = $staticPointer; - } - } - $previous = $phpcsFile->findPrevious($ignoreTokens, ($valuePointer - 1), ($arrayStart + 1), true); if ($previous === false) { $previous = $stackPtr; diff --git a/src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.1.inc b/src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.1.inc index 5b539a372a..098a7c9d18 100644 --- a/src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.1.inc +++ b/src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.1.inc @@ -535,3 +535,10 @@ $x = array( 'a', 'b', ); + +$x = array( + 1, static fn (float $item): float => match ($item) { + 2.0 => 3.0, + default => $item + }, + ); diff --git a/src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.1.inc.fixed b/src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.1.inc.fixed index 5ebf715024..a1da4ca58b 100644 --- a/src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.1.inc.fixed +++ b/src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.1.inc.fixed @@ -571,3 +571,11 @@ $x = array( 'a', 'b', ); + +$x = array( + 1, + static fn (float $item): float => match ($item) { + 2.0 => 3.0, + default => $item + }, + ); diff --git a/src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.2.inc b/src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.2.inc index 7bcc5e044e..1781dfd602 100644 --- a/src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.2.inc +++ b/src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.2.inc @@ -524,3 +524,10 @@ $x = [ 'a', 'b', ]; + +$x = [ + 1, static fn (float $item): float => match ($item) { + 2.0 => 3.0, + default => $item + }, + ]; diff --git a/src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.2.inc.fixed b/src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.2.inc.fixed index d156357c93..d8a8631516 100644 --- a/src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.2.inc.fixed +++ b/src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.2.inc.fixed @@ -558,3 +558,11 @@ $x = [ 'a', 'b', ]; + +$x = [ + 1, + static fn (float $item): float => match ($item) { + 2.0 => 3.0, + default => $item + }, + ]; diff --git a/src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.3.inc b/src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.3.inc deleted file mode 100644 index 36e80f0cb6..0000000000 --- a/src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.3.inc +++ /dev/null @@ -1,11 +0,0 @@ - [ - 1, static fn (float $item): float => match ($item) { - 2.0 => 3.0, - default => $item - }, - ]; -}; diff --git a/src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.3.inc.fixed b/src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.3.inc.fixed deleted file mode 100644 index 2e691adf88..0000000000 --- a/src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.3.inc.fixed +++ /dev/null @@ -1,12 +0,0 @@ - [ - 1, - static fn (float $item): float => match ($item) { - 2.0 => 3.0, - default => $item - }, - ]; -}; diff --git a/src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.php b/src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.php index a6100fb6c3..858be0b061 100644 --- a/src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.php +++ b/src/Standards/Squiz/Tests/Arrays/ArrayDeclarationUnitTest.php @@ -134,6 +134,7 @@ public function getErrorList($testFile='') 523 => 1, 530 => 1, 537 => 1, + 540 => 1, ]; case 'ArrayDeclarationUnitTest.2.inc': return [ @@ -225,10 +226,7 @@ public function getErrorList($testFile='') 512 => 1, 519 => 1, 526 => 1, - ]; - case 'ArrayDeclarationUnitTest.3.inc': - return [ - 6 => 1, + 529 => 1, ]; default: return [];