From e71998fc73ba8e2d9b7231e1929d952e8f028674 Mon Sep 17 00:00:00 2001 From: Mante Balzaraviciute Date: Thu, 23 Mar 2023 13:28:12 +0000 Subject: [PATCH 1/4] ADD: New sniff for final controller --- src/Sniffs/FinalControllerSniff.php | 54 +++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/Sniffs/FinalControllerSniff.php diff --git a/src/Sniffs/FinalControllerSniff.php b/src/Sniffs/FinalControllerSniff.php new file mode 100644 index 0000000..3a76145 --- /dev/null +++ b/src/Sniffs/FinalControllerSniff.php @@ -0,0 +1,54 @@ +getTokens(); + + $className = $phpcsFile->getDeclarationName($classPointer); + + if (str_contains($className, 'Test')) { + return; + } + + if (str_contains($className, 'Controller') === false) { + return; + } + + if ($tokens[$previousPointer]['code'] === T_FINAL) { + return; + } + + $fix = $phpcsFile->addFixableError( + 'All controllers should be declared using "final" keyword.', + $classPointer - 1, + self::CONTROLLER_NOT_FINAL + ); + + if ($fix === false) { + return; + } + + $phpcsFile->fixer->beginChangeset(); + $phpcsFile->fixer->addContent($classPointer - 1, 'final '); + $phpcsFile->fixer->endChangeset(); + } +} From a97ee9e5c3b36decb627846fde8d60fe3e52e2b1 Mon Sep 17 00:00:00 2001 From: Mante Balzaraviciute Date: Thu, 23 Mar 2023 13:45:54 +0000 Subject: [PATCH 2/4] ADD: namespace, autoload the src in composer.json --- composer.json | 5 +++++ ecs.php | 2 ++ src/Sniffs/FinalControllerSniff.php | 2 ++ 3 files changed, 9 insertions(+) diff --git a/composer.json b/composer.json index 5027228..7f62627 100644 --- a/composer.json +++ b/composer.json @@ -31,6 +31,11 @@ "symplify/easy-coding-standard": "^10.0.6", "nikic/php-parser": "^4.0" }, + "autoload": { + "psr-4": { + "PhpCodingStandards\\": "src" + } + }, "prefer-stable": true, "minimum-stability": "dev", "config": { diff --git a/ecs.php b/ecs.php index 477aaf5..cccdfd8 100644 --- a/ecs.php +++ b/ecs.php @@ -11,6 +11,7 @@ use PHP_CodeSniffer\Standards\Squiz\Sniffs\ControlStructures\ControlSignatureSniff; use PHP_CodeSniffer\Standards\Squiz\Sniffs\PHP\CommentedOutCodeSniff; use PHP_CodeSniffer\Standards\Squiz\Sniffs\Strings\ConcatenationSpacingSniff; +use PhpCodingStandards\Sniffs\FinalControllerSniff; use PhpCsFixer\Fixer\ArrayNotation\TrailingCommaInMultilineArrayFixer; use PhpCsFixer\Fixer\ClassNotation\NoBlankLinesAfterClassOpeningFixer; use PhpCsFixer\Fixer\ClassNotation\SelfAccessorFixer; @@ -149,4 +150,5 @@ $services->set(MethodSpacingSniff::class); $services->set(BackedEnumTypeSpacingSniff::class); $services->set(UnusedFunctionParameterSniff::class); + $services->set(FinalControllerSniff::class); }; diff --git a/src/Sniffs/FinalControllerSniff.php b/src/Sniffs/FinalControllerSniff.php index 3a76145..f303508 100644 --- a/src/Sniffs/FinalControllerSniff.php +++ b/src/Sniffs/FinalControllerSniff.php @@ -2,6 +2,8 @@ declare(strict_types=1); +namespace PhpCodingStandards\Sniffs; + use PHP_CodeSniffer\Files\File; use PHP_CodeSniffer\Sniffs\Sniff; use SlevomatCodingStandard\Helpers\TokenHelper; From 0e270559f0a1f9f9a7d0a61242d00ee59cc6af24 Mon Sep 17 00:00:00 2001 From: Mante Balzaraviciute Date: Thu, 23 Mar 2023 16:04:50 +0000 Subject: [PATCH 3/4] ADD: JumpTwentyFour in namespace --- composer.json | 2 +- ecs.php | 2 +- src/Sniffs/FinalControllerSniff.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/composer.json b/composer.json index 7f62627..a70c535 100644 --- a/composer.json +++ b/composer.json @@ -33,7 +33,7 @@ }, "autoload": { "psr-4": { - "PhpCodingStandards\\": "src" + "JumpTwentyFour\\PhpCodingStandards\\": "src" } }, "prefer-stable": true, diff --git a/ecs.php b/ecs.php index cccdfd8..8626ed0 100644 --- a/ecs.php +++ b/ecs.php @@ -2,6 +2,7 @@ declare(strict_types=1); +use JumpTwentyFour\PhpCodingStandards\Sniffs\FinalControllerSniff; use PHP_CodeSniffer\Standards\Generic\Sniffs\CodeAnalysis\UnusedFunctionParameterSniff; use PHP_CodeSniffer\Standards\Generic\Sniffs\Formatting\SpaceAfterCastSniff; use PHP_CodeSniffer\Standards\Generic\Sniffs\Formatting\SpaceAfterNotSniff; @@ -11,7 +12,6 @@ use PHP_CodeSniffer\Standards\Squiz\Sniffs\ControlStructures\ControlSignatureSniff; use PHP_CodeSniffer\Standards\Squiz\Sniffs\PHP\CommentedOutCodeSniff; use PHP_CodeSniffer\Standards\Squiz\Sniffs\Strings\ConcatenationSpacingSniff; -use PhpCodingStandards\Sniffs\FinalControllerSniff; use PhpCsFixer\Fixer\ArrayNotation\TrailingCommaInMultilineArrayFixer; use PhpCsFixer\Fixer\ClassNotation\NoBlankLinesAfterClassOpeningFixer; use PhpCsFixer\Fixer\ClassNotation\SelfAccessorFixer; diff --git a/src/Sniffs/FinalControllerSniff.php b/src/Sniffs/FinalControllerSniff.php index f303508..a0cd81b 100644 --- a/src/Sniffs/FinalControllerSniff.php +++ b/src/Sniffs/FinalControllerSniff.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace PhpCodingStandards\Sniffs; +namespace JumpTwentyFour\PhpCodingStandards\Sniffs; use PHP_CodeSniffer\Files\File; use PHP_CodeSniffer\Sniffs\Sniff; From e9bafc0da391d5b32e000cc6f41eedfe0192f9b2 Mon Sep 17 00:00:00 2001 From: Mante Balzaraviciute Date: Fri, 24 Mar 2023 08:44:07 +0000 Subject: [PATCH 4/4] ADD: early return for the base controller --- src/Sniffs/FinalControllerSniff.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Sniffs/FinalControllerSniff.php b/src/Sniffs/FinalControllerSniff.php index a0cd81b..395e6e5 100644 --- a/src/Sniffs/FinalControllerSniff.php +++ b/src/Sniffs/FinalControllerSniff.php @@ -27,6 +27,10 @@ public function process(File $phpcsFile, $classPointer): void $className = $phpcsFile->getDeclarationName($classPointer); + if ($className === 'Controller') { + return; + } + if (str_contains($className, 'Test')) { return; }