From 4216638b0584a56b840ae2602f4ebc0b4217fe89 Mon Sep 17 00:00:00 2001 From: Sergio Vera Date: Fri, 11 Feb 2022 10:35:45 +0100 Subject: [PATCH 1/3] AC-2222: [UCT Autofixing] PHPCompatibility.ForbiddenFinalPrivateMethods --- .../ForbiddenFinalPrivateMethodsSniff.php | 23 ++--- .../ForbiddenFinalPrivateMethodsUnitTest.inc | 32 +------ ...iddenFinalPrivateMethodsUnitTest.inc.fixed | 21 +++++ .../ForbiddenFinalPrivateMethodsUnitTest.php | 84 ++++--------------- 4 files changed, 51 insertions(+), 109 deletions(-) create mode 100644 Magento2/Tests/PHPCompatibility/ForbiddenFinalPrivateMethodsUnitTest.inc.fixed diff --git a/Magento2/Sniffs/PHPCompatibility/ForbiddenFinalPrivateMethodsSniff.php b/Magento2/Sniffs/PHPCompatibility/ForbiddenFinalPrivateMethodsSniff.php index 51fa3d69..ab8c289a 100644 --- a/Magento2/Sniffs/PHPCompatibility/ForbiddenFinalPrivateMethodsSniff.php +++ b/Magento2/Sniffs/PHPCompatibility/ForbiddenFinalPrivateMethodsSniff.php @@ -35,6 +35,7 @@ */ class ForbiddenFinalPrivateMethodsSniff extends Sniff { + private const MESSAGE_FINAL = 'Private methods should not be declared as final since PHP 8.0'; /** * Returns an array of tokens this test wants to listen for. @@ -61,10 +62,6 @@ public function register() */ public function process(File $phpcsFile, $stackPtr) { - if ($this->supportsAbove('8.0') === false) { - return; - } - if (Scopes::isOOMethod($phpcsFile, $stackPtr) === false) { // Function, not method. return; @@ -83,14 +80,18 @@ public function process(File $phpcsFile, $stackPtr) $properties = FunctionDeclarations::getProperties($phpcsFile, $stackPtr); if ($properties['scope'] !== 'private' || $properties['is_final'] === false) { - // Not an private final method. + // Not a private final method. return; } - - $phpcsFile->addWarning( - 'Private methods should not be declared as final since PHP 8.0', - $stackPtr, - 'Found' - ); + $phpcsFile->fixer->enabled = true; + if ($phpcsFile->addFixableWarning(self::MESSAGE_FINAL, $stackPtr, 'Found') === true) { + $phpcsFile->fixer->beginChangeset(); + $prev = $phpcsFile->findPrevious(\T_FINAL, ($stackPtr - 1)); + $phpcsFile->fixer->replaceToken($prev, null); + // Remove extra space left out by previous replacement + $next = $phpcsFile->findNext(\T_WHITESPACE, $prev); + $phpcsFile->fixer->replaceToken($next, null); + $phpcsFile->fixer->endChangeset(); + } } } diff --git a/Magento2/Tests/PHPCompatibility/ForbiddenFinalPrivateMethodsUnitTest.inc b/Magento2/Tests/PHPCompatibility/ForbiddenFinalPrivateMethodsUnitTest.inc index 486d0584..803c0033 100644 --- a/Magento2/Tests/PHPCompatibility/ForbiddenFinalPrivateMethodsUnitTest.inc +++ b/Magento2/Tests/PHPCompatibility/ForbiddenFinalPrivateMethodsUnitTest.inc @@ -1,47 +1,21 @@ sniffFile(__FILE__, '8.0'); - $this->assertWarning($file, $line, 'Private methods should not be declared as final since PHP 8.0'); + return []; } /** - * Data provider. - * - * @see testForbiddenFinalPrivateMethods() - * - * @return array + * @inheritdoc */ - public function dataForbiddenFinalPrivateMethods() + public function getWarningList() { - return [ - [34], - [35], - [39], - [40], - [45], - [46], + return [ + 6 => 1, + 7 => 1, + 12 => 1, + 13 => 1, + 19 => 1, + 20 => 1, ]; } - - /** - * Verify the sniff does not throw false positives for valid code. - * - * @dataProvider dataNoFalsePositives - * - * @param int $line The line number. - * - * @return void - */ - public function testNoFalsePositives($line) - { - $file = $this->sniffFile(__FILE__, '8.0'); - $this->assertNoViolation($file, $line); - } - - /** - * Data provider. - * - * @see testNoFalsePositives() - * - * @return array - */ - public function dataNoFalsePositives() - { - $cases = []; - // No errors expected on the first 28 lines. - for ($line = 1; $line <= 28; $line++) { - $cases[] = [$line]; - } - - return $cases; - } - - /** - * Verify no notices are thrown at all. - * - * @return void - */ - public function testNoViolationsInFileOnValidVersion() - { - $file = $this->sniffFile(__FILE__, '7.4'); - $this->assertNoViolation($file); - } } From 56fcc1ae02fcdf82111785bc82e56a1313bbcaad Mon Sep 17 00:00:00 2001 From: Sergio Vera Date: Fri, 11 Feb 2022 11:06:29 +0100 Subject: [PATCH 2/3] AC-2222: [UCT Autofixing] PHPCompatibility.ForbiddenFinalPrivateMethods --- .../PHPCompatibility/ForbiddenFinalPrivateMethodsSniff.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Magento2/Sniffs/PHPCompatibility/ForbiddenFinalPrivateMethodsSniff.php b/Magento2/Sniffs/PHPCompatibility/ForbiddenFinalPrivateMethodsSniff.php index ab8c289a..85b2fe11 100644 --- a/Magento2/Sniffs/PHPCompatibility/ForbiddenFinalPrivateMethodsSniff.php +++ b/Magento2/Sniffs/PHPCompatibility/ForbiddenFinalPrivateMethodsSniff.php @@ -83,7 +83,7 @@ public function process(File $phpcsFile, $stackPtr) // Not a private final method. return; } - $phpcsFile->fixer->enabled = true; + if ($phpcsFile->addFixableWarning(self::MESSAGE_FINAL, $stackPtr, 'Found') === true) { $phpcsFile->fixer->beginChangeset(); $prev = $phpcsFile->findPrevious(\T_FINAL, ($stackPtr - 1)); From 6d9a5c9ece98f854bc35d587c31c79bfb76a86e9 Mon Sep 17 00:00:00 2001 From: Sergio Vera Date: Fri, 11 Feb 2022 12:52:41 +0100 Subject: [PATCH 3/3] AC-2222: [UCT Autofixing] PHPCompatibility.ForbiddenFinalPrivateMethods --- .../ForbiddenFinalPrivateMethodsUnitTest.inc | 8 +++++++- .../ForbiddenFinalPrivateMethodsUnitTest.inc.fixed | 8 +++++++- .../ForbiddenFinalPrivateMethodsUnitTest.php | 8 ++++---- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/Magento2/Tests/PHPCompatibility/ForbiddenFinalPrivateMethodsUnitTest.inc b/Magento2/Tests/PHPCompatibility/ForbiddenFinalPrivateMethodsUnitTest.inc index 803c0033..660c6b57 100644 --- a/Magento2/Tests/PHPCompatibility/ForbiddenFinalPrivateMethodsUnitTest.inc +++ b/Magento2/Tests/PHPCompatibility/ForbiddenFinalPrivateMethodsUnitTest.inc @@ -1,21 +1,27 @@ 1, 7 => 1, - 12 => 1, - 13 => 1, - 19 => 1, - 20 => 1, + 14 => 1, + 15 => 1, + 23 => 1, + 25 => 1, ]; } }