From f75830dd0c6e9e0df2cc0e7544b6bb0d125be472 Mon Sep 17 00:00:00 2001 From: "andrii.zinkevych" Date: Tue, 2 Nov 2021 13:07:54 +0100 Subject: [PATCH 1/2] Add Sniff for check autovivification on array --- .../Sniffs/PHP/ArrayAutovivificationSniff.php | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 Magento2/Sniffs/PHP/ArrayAutovivificationSniff.php diff --git a/Magento2/Sniffs/PHP/ArrayAutovivificationSniff.php b/Magento2/Sniffs/PHP/ArrayAutovivificationSniff.php new file mode 100644 index 00000000..f814bdba --- /dev/null +++ b/Magento2/Sniffs/PHP/ArrayAutovivificationSniff.php @@ -0,0 +1,66 @@ +findNext(T_OPEN_SQUARE_BRACKET, $stackPtr, $stackPtr + 2); + + if ($positionSquareBracket) { + $tokens = $phpcsFile->getTokens(); + $propertyTokenKey = array_keys(array_column($tokens, 'content'), $tokens[$stackPtr]['content']); + + arsort($propertyTokenKey); + + foreach ($propertyTokenKey as $tokenKey) { + if ($tokenKey < $stackPtr && $tokens[$tokenKey + 2]['content'] === '=') { + if ($tokens[$tokenKey + 4]['content'] != 'false') { + return; + } + + $phpcsFile->addWarning($this->warningMessage, $positionSquareBracket, $this->warningCode); + } + } + } + } +} From 437e157b5073b48e41ab46235de37299419e684b Mon Sep 17 00:00:00 2001 From: "andrii.zinkevych" Date: Tue, 2 Nov 2021 20:36:30 +0100 Subject: [PATCH 2/2] Created Unit Test for array autovivification sniff --- .../Sniffs/PHP/ArrayAutovivificationSniff.php | 7 ++- .../PHP/ArrayAutovivificationUnitTest.inc | 60 +++++++++++++++++++ .../PHP/ArrayAutovivificationUnitTest.php | 35 +++++++++++ Magento2/ruleset.xml | 5 ++ 4 files changed, 105 insertions(+), 2 deletions(-) create mode 100644 Magento2/Tests/PHP/ArrayAutovivificationUnitTest.inc create mode 100644 Magento2/Tests/PHP/ArrayAutovivificationUnitTest.php diff --git a/Magento2/Sniffs/PHP/ArrayAutovivificationSniff.php b/Magento2/Sniffs/PHP/ArrayAutovivificationSniff.php index f814bdba..f5893a3d 100644 --- a/Magento2/Sniffs/PHP/ArrayAutovivificationSniff.php +++ b/Magento2/Sniffs/PHP/ArrayAutovivificationSniff.php @@ -48,12 +48,15 @@ public function process(File $phpcsFile, $stackPtr): void if ($positionSquareBracket) { $tokens = $phpcsFile->getTokens(); - $propertyTokenKey = array_keys(array_column($tokens, 'content'), $tokens[$stackPtr]['content']); + $positionFunction = $phpcsFile->findPrevious(T_FUNCTION, $positionSquareBracket) ?: 0; + $sliceLength = $stackPtr - $positionFunction; + $sliceToken = array_slice(array_column($tokens, 'content'), $positionFunction, $sliceLength, true); + $propertyTokenKey = array_keys($sliceToken, $tokens[$stackPtr]['content']); arsort($propertyTokenKey); foreach ($propertyTokenKey as $tokenKey) { - if ($tokenKey < $stackPtr && $tokens[$tokenKey + 2]['content'] === '=') { + if ($tokens[$tokenKey + 2]['content'] === '=') { if ($tokens[$tokenKey + 4]['content'] != 'false') { return; } diff --git a/Magento2/Tests/PHP/ArrayAutovivificationUnitTest.inc b/Magento2/Tests/PHP/ArrayAutovivificationUnitTest.inc new file mode 100644 index 00000000..82b92c00 --- /dev/null +++ b/Magento2/Tests/PHP/ArrayAutovivificationUnitTest.inc @@ -0,0 +1,60 @@ + 1 + ]; + } + + return []; + } +} diff --git a/Magento2/ruleset.xml b/Magento2/ruleset.xml index 442d9867..5ea68ff3 100644 --- a/Magento2/ruleset.xml +++ b/Magento2/ruleset.xml @@ -400,6 +400,11 @@ warning *\.xml$ + + 7 + warning + *\.xml$ + 7 warning