From b15621230beecea197327f52e411b779766fd8fc Mon Sep 17 00:00:00 2001 From: jrfnl Date: Mon, 19 Jun 2023 01:18:04 +0200 Subject: [PATCH 1/2] Universal/RequireFinalMethodsInTraits: move sniff to `FunctionDeclarations` category ... which feels more appropriate. --- .../RequireFinalMethodsInTraitsStandard.xml | 0 .../RequireFinalMethodsInTraitsSniff.php | 2 +- .../RequireFinalMethodsInTraitsUnitTest.inc | 4 ++-- .../RequireFinalMethodsInTraitsUnitTest.inc.fixed | 4 ++-- .../RequireFinalMethodsInTraitsUnitTest.php | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) rename Universal/Docs/{OOStructures => FunctionDeclarations}/RequireFinalMethodsInTraitsStandard.xml (100%) rename Universal/Sniffs/{OOStructures => FunctionDeclarations}/RequireFinalMethodsInTraitsSniff.php (98%) rename Universal/Tests/{OOStructures => FunctionDeclarations}/RequireFinalMethodsInTraitsUnitTest.inc (94%) rename Universal/Tests/{OOStructures => FunctionDeclarations}/RequireFinalMethodsInTraitsUnitTest.inc.fixed (94%) rename Universal/Tests/{OOStructures => FunctionDeclarations}/RequireFinalMethodsInTraitsUnitTest.php (90%) diff --git a/Universal/Docs/OOStructures/RequireFinalMethodsInTraitsStandard.xml b/Universal/Docs/FunctionDeclarations/RequireFinalMethodsInTraitsStandard.xml similarity index 100% rename from Universal/Docs/OOStructures/RequireFinalMethodsInTraitsStandard.xml rename to Universal/Docs/FunctionDeclarations/RequireFinalMethodsInTraitsStandard.xml diff --git a/Universal/Sniffs/OOStructures/RequireFinalMethodsInTraitsSniff.php b/Universal/Sniffs/FunctionDeclarations/RequireFinalMethodsInTraitsSniff.php similarity index 98% rename from Universal/Sniffs/OOStructures/RequireFinalMethodsInTraitsSniff.php rename to Universal/Sniffs/FunctionDeclarations/RequireFinalMethodsInTraitsSniff.php index b286a369..8fa1f91b 100644 --- a/Universal/Sniffs/OOStructures/RequireFinalMethodsInTraitsSniff.php +++ b/Universal/Sniffs/FunctionDeclarations/RequireFinalMethodsInTraitsSniff.php @@ -8,7 +8,7 @@ * @link https://github.com/PHPCSStandards/PHPCSExtra */ -namespace PHPCSExtra\Universal\Sniffs\OOStructures; +namespace PHPCSExtra\Universal\Sniffs\FunctionDeclarations; use PHP_CodeSniffer\Files\File; use PHP_CodeSniffer\Sniffs\Sniff; diff --git a/Universal/Tests/OOStructures/RequireFinalMethodsInTraitsUnitTest.inc b/Universal/Tests/FunctionDeclarations/RequireFinalMethodsInTraitsUnitTest.inc similarity index 94% rename from Universal/Tests/OOStructures/RequireFinalMethodsInTraitsUnitTest.inc rename to Universal/Tests/FunctionDeclarations/RequireFinalMethodsInTraitsUnitTest.inc index 773debe8..b48bfaa3 100644 --- a/Universal/Tests/OOStructures/RequireFinalMethodsInTraitsUnitTest.inc +++ b/Universal/Tests/FunctionDeclarations/RequireFinalMethodsInTraitsUnitTest.inc @@ -96,7 +96,7 @@ trait FixMe { /*comment*/ protected function withCommentBeforeKeyword() {} } -// phpcs:set Universal.OOStructures.RequireFinalMethodsInTraits includeMagicMethods true +// phpcs:set Universal.FunctionDeclarations.RequireFinalMethodsInTraits includeMagicMethods true trait MagicMethodsAreFlaggedOnRequest { public function __construct() {} public function __destruct() {} @@ -117,4 +117,4 @@ trait MagicMethodsAreFlaggedOnRequest { } // Reset property to default value. -// phpcs:set Universal.OOStructures.RequireFinalMethodsInTraits includeMagicMethods false +// phpcs:set Universal.FunctionDeclarations.RequireFinalMethodsInTraits includeMagicMethods false diff --git a/Universal/Tests/OOStructures/RequireFinalMethodsInTraitsUnitTest.inc.fixed b/Universal/Tests/FunctionDeclarations/RequireFinalMethodsInTraitsUnitTest.inc.fixed similarity index 94% rename from Universal/Tests/OOStructures/RequireFinalMethodsInTraitsUnitTest.inc.fixed rename to Universal/Tests/FunctionDeclarations/RequireFinalMethodsInTraitsUnitTest.inc.fixed index 0fd73365..19e9a868 100644 --- a/Universal/Tests/OOStructures/RequireFinalMethodsInTraitsUnitTest.inc.fixed +++ b/Universal/Tests/FunctionDeclarations/RequireFinalMethodsInTraitsUnitTest.inc.fixed @@ -96,7 +96,7 @@ trait FixMe { /*comment*/ protected final function withCommentBeforeKeyword() {} } -// phpcs:set Universal.OOStructures.RequireFinalMethodsInTraits includeMagicMethods true +// phpcs:set Universal.FunctionDeclarations.RequireFinalMethodsInTraits includeMagicMethods true trait MagicMethodsAreFlaggedOnRequest { public final function __construct() {} public final function __destruct() {} @@ -117,4 +117,4 @@ trait MagicMethodsAreFlaggedOnRequest { } // Reset property to default value. -// phpcs:set Universal.OOStructures.RequireFinalMethodsInTraits includeMagicMethods false +// phpcs:set Universal.FunctionDeclarations.RequireFinalMethodsInTraits includeMagicMethods false diff --git a/Universal/Tests/OOStructures/RequireFinalMethodsInTraitsUnitTest.php b/Universal/Tests/FunctionDeclarations/RequireFinalMethodsInTraitsUnitTest.php similarity index 90% rename from Universal/Tests/OOStructures/RequireFinalMethodsInTraitsUnitTest.php rename to Universal/Tests/FunctionDeclarations/RequireFinalMethodsInTraitsUnitTest.php index 71c737b5..005e0525 100644 --- a/Universal/Tests/OOStructures/RequireFinalMethodsInTraitsUnitTest.php +++ b/Universal/Tests/FunctionDeclarations/RequireFinalMethodsInTraitsUnitTest.php @@ -8,14 +8,14 @@ * @link https://github.com/PHPCSStandards/PHPCSExtra */ -namespace PHPCSExtra\Universal\Tests\OOStructures; +namespace PHPCSExtra\Universal\Tests\FunctionDeclarations; use PHP_CodeSniffer\Tests\Standards\AbstractSniffUnitTest; /** * Unit test class for the RequireFinalMethodsInTraits sniff. * - * @covers PHPCSExtra\Universal\Sniffs\OOStructures\RequireFinalMethodsInTraitsSniff + * @covers PHPCSExtra\Universal\Sniffs\FunctionDeclarations\RequireFinalMethodsInTraitsSniff * * @since 1.1.0 */ From 787f3f9d9c11550688d543f02f30b072cd5575ba Mon Sep 17 00:00:00 2001 From: jrfnl Date: Mon, 19 Jun 2023 01:20:43 +0200 Subject: [PATCH 2/2] Universal/RequireFinalMethodsInTraits: remove property in favour of error code differentiation This removes the `public` `$includeMagicMethods` property in favour of using an error code to allow people to include/exclude magic methods from this sniff. --- .../RequireFinalMethodsInTraitsStandard.xml | 2 - .../RequireFinalMethodsInTraitsSniff.php | 33 +++++-------- .../RequireFinalMethodsInTraitsUnitTest.inc | 25 +--------- ...uireFinalMethodsInTraitsUnitTest.inc.fixed | 25 +--------- .../RequireFinalMethodsInTraitsUnitTest.php | 48 +++++++++---------- 5 files changed, 38 insertions(+), 95 deletions(-) diff --git a/Universal/Docs/FunctionDeclarations/RequireFinalMethodsInTraitsStandard.xml b/Universal/Docs/FunctionDeclarations/RequireFinalMethodsInTraitsStandard.xml index b78e6d29..4b2622de 100644 --- a/Universal/Docs/FunctionDeclarations/RequireFinalMethodsInTraitsStandard.xml +++ b/Universal/Docs/FunctionDeclarations/RequireFinalMethodsInTraitsStandard.xml @@ -6,8 +6,6 @@ diff --git a/Universal/Sniffs/FunctionDeclarations/RequireFinalMethodsInTraitsSniff.php b/Universal/Sniffs/FunctionDeclarations/RequireFinalMethodsInTraitsSniff.php index 8fa1f91b..da9e2415 100644 --- a/Universal/Sniffs/FunctionDeclarations/RequireFinalMethodsInTraitsSniff.php +++ b/Universal/Sniffs/FunctionDeclarations/RequireFinalMethodsInTraitsSniff.php @@ -33,17 +33,6 @@ final class RequireFinalMethodsInTraitsSniff implements Sniff */ const METRIC_NAME = 'Non-private method in trait is abstract or final ?'; - /** - * Whether or not this rule applies to magic methods. - * - * Defaults to `false`. - * - * @since 1.1.0 - * - * @var bool - */ - public $includeMagicMethods = false; - /** * Returns an array of tokens this test wants to listen for. * @@ -81,14 +70,6 @@ public function process(File $phpcsFile, $stackPtr) return; } - $methodName = FunctionDeclarations::getName($phpcsFile, $stackPtr); - if ($this->includeMagicMethods === false - && FunctionDeclarations::isMagicMethodName($methodName) === true - ) { - // Magic methods are excluded. Bow out. - return; - } - $methodProps = FunctionDeclarations::getProperties($phpcsFile, $stackPtr); if ($methodProps['scope'] === 'private') { // Private methods can't be final. @@ -109,16 +90,26 @@ public function process(File $phpcsFile, $stackPtr) $phpcsFile->recordMetric($stackPtr, self::METRIC_NAME, 'not abstract, not final'); + $methodName = FunctionDeclarations::getName($phpcsFile, $stackPtr); + $magic = ''; + $code = 'NonFinalMethodFound'; + if (FunctionDeclarations::isMagicMethodName($methodName) === true) { + // Use separate error code for magic methods. + $magic = 'magic '; + $code = 'NonFinalMagicMethodFound'; + } + $data = [ $methodProps['scope'], + $magic, $methodName, ObjectDeclarations::getName($phpcsFile, $scopePtr), ]; $fix = $phpcsFile->addFixableError( - 'The non-abstract, %s method "%s()" in trait %s should be declared as final.', + 'The non-abstract, %s %smethod "%s()" in trait %s should be declared as final.', $stackPtr, - 'NonFinalMethodFound', + $code, $data ); diff --git a/Universal/Tests/FunctionDeclarations/RequireFinalMethodsInTraitsUnitTest.inc b/Universal/Tests/FunctionDeclarations/RequireFinalMethodsInTraitsUnitTest.inc index b48bfaa3..6c388b05 100644 --- a/Universal/Tests/FunctionDeclarations/RequireFinalMethodsInTraitsUnitTest.inc +++ b/Universal/Tests/FunctionDeclarations/RequireFinalMethodsInTraitsUnitTest.inc @@ -54,25 +54,6 @@ trait FinalMagicMethodsAreNotFlagged { final public function __unserialize($data) {} } -trait MagicMethodsAreNotFlaggedByDefault { - public function __construct() {} - public function __destruct() {} - public function __clone() {} - public function __debugInfo() {} - public function __invoke() {} - public function __get($name) {} - public function __set($name, $value) {} - public function __isset($name) {} - public function __unset($name) {} - public function __call($name, $arguments) {} - public static function __callStatic($name, $arguments) {} - public function __sleep() {} - public function __toString() {} - public static function __set_state($properties) {} - public function __serialize() {} - public function __unserialize($data) {} -} - /* * Bad. @@ -96,8 +77,7 @@ trait FixMe { /*comment*/ protected function withCommentBeforeKeyword() {} } -// phpcs:set Universal.FunctionDeclarations.RequireFinalMethodsInTraits includeMagicMethods true -trait MagicMethodsAreFlaggedOnRequest { +trait MagicMethodsAreAlsoFlagged { public function __construct() {} public function __destruct() {} public function __clone() {} @@ -115,6 +95,3 @@ trait MagicMethodsAreFlaggedOnRequest { public function __serialize() {} public function __unserialize($data) {} } - -// Reset property to default value. -// phpcs:set Universal.FunctionDeclarations.RequireFinalMethodsInTraits includeMagicMethods false diff --git a/Universal/Tests/FunctionDeclarations/RequireFinalMethodsInTraitsUnitTest.inc.fixed b/Universal/Tests/FunctionDeclarations/RequireFinalMethodsInTraitsUnitTest.inc.fixed index 19e9a868..34173802 100644 --- a/Universal/Tests/FunctionDeclarations/RequireFinalMethodsInTraitsUnitTest.inc.fixed +++ b/Universal/Tests/FunctionDeclarations/RequireFinalMethodsInTraitsUnitTest.inc.fixed @@ -54,25 +54,6 @@ trait FinalMagicMethodsAreNotFlagged { final public function __unserialize($data) {} } -trait MagicMethodsAreNotFlaggedByDefault { - public function __construct() {} - public function __destruct() {} - public function __clone() {} - public function __debugInfo() {} - public function __invoke() {} - public function __get($name) {} - public function __set($name, $value) {} - public function __isset($name) {} - public function __unset($name) {} - public function __call($name, $arguments) {} - public static function __callStatic($name, $arguments) {} - public function __sleep() {} - public function __toString() {} - public static function __set_state($properties) {} - public function __serialize() {} - public function __unserialize($data) {} -} - /* * Bad. @@ -96,8 +77,7 @@ trait FixMe { /*comment*/ protected final function withCommentBeforeKeyword() {} } -// phpcs:set Universal.FunctionDeclarations.RequireFinalMethodsInTraits includeMagicMethods true -trait MagicMethodsAreFlaggedOnRequest { +trait MagicMethodsAreAlsoFlagged { public final function __construct() {} public final function __destruct() {} public final function __clone() {} @@ -115,6 +95,3 @@ trait MagicMethodsAreFlaggedOnRequest { public final function __serialize() {} public final function __unserialize($data) {} } - -// Reset property to default value. -// phpcs:set Universal.FunctionDeclarations.RequireFinalMethodsInTraits includeMagicMethods false diff --git a/Universal/Tests/FunctionDeclarations/RequireFinalMethodsInTraitsUnitTest.php b/Universal/Tests/FunctionDeclarations/RequireFinalMethodsInTraitsUnitTest.php index 005e0525..168fa928 100644 --- a/Universal/Tests/FunctionDeclarations/RequireFinalMethodsInTraitsUnitTest.php +++ b/Universal/Tests/FunctionDeclarations/RequireFinalMethodsInTraitsUnitTest.php @@ -30,30 +30,30 @@ final class RequireFinalMethodsInTraitsUnitTest extends AbstractSniffUnitTest public function getErrorList() { return [ - 81 => 1, - 82 => 1, - 84 => 1, - 85 => 1, - 87 => 1, - 92 => 1, - 94 => 1, - 96 => 1, - 101 => 1, - 102 => 1, - 103 => 1, - 104 => 1, - 105 => 1, - 106 => 1, - 107 => 1, - 108 => 1, - 109 => 1, - 110 => 1, - 111 => 1, - 112 => 1, - 113 => 1, - 114 => 1, - 115 => 1, - 116 => 1, + 62 => 1, + 63 => 1, + 65 => 1, + 66 => 1, + 68 => 1, + 73 => 1, + 75 => 1, + 77 => 1, + 81 => 1, + 82 => 1, + 83 => 1, + 84 => 1, + 85 => 1, + 86 => 1, + 87 => 1, + 88 => 1, + 89 => 1, + 90 => 1, + 91 => 1, + 92 => 1, + 93 => 1, + 94 => 1, + 95 => 1, + 96 => 1, ]; }