From 6a5a1568404273e08c207ebfda6b858d759bfaf8 Mon Sep 17 00:00:00 2001 From: Michael Nozdrevatykh Date: Thu, 8 Oct 2020 14:40:26 +0200 Subject: [PATCH 1/2] Fixed problem in FullyQualifiedSniff with slashes in string params --- .../Flyeralarm/Sniffs/Classes/FullyQualifiedSniff.php | 8 +++++++- tests/rules/classes/allowed/FullyQualifiedSniff.php | 7 +++++++ tests/rules/classes/not-allowed/FullyQualifiedSniff.php | 2 +- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/custom-standards/Flyeralarm/Sniffs/Classes/FullyQualifiedSniff.php b/custom-standards/Flyeralarm/Sniffs/Classes/FullyQualifiedSniff.php index 2e8a703..f3ebc71 100644 --- a/custom-standards/Flyeralarm/Sniffs/Classes/FullyQualifiedSniff.php +++ b/custom-standards/Flyeralarm/Sniffs/Classes/FullyQualifiedSniff.php @@ -43,11 +43,17 @@ private function getClassCall(File $phpcsFile, $stackPtr): string switch ($tokens[$stackPtr]['code']) { case T_NEW: - return $phpcsFile->getTokensAsString( + $tokensAsString = $phpcsFile->getTokensAsString( $stackPtr, $phpcsFile->findEndOfStatement($stackPtr) - $stackPtr ); + return substr( + $tokensAsString, + 0, + strpos($tokensAsString, '(') + ); + case T_DOUBLE_COLON: $classCallStart = $phpcsFile->findStartOfStatement($stackPtr); diff --git a/tests/rules/classes/allowed/FullyQualifiedSniff.php b/tests/rules/classes/allowed/FullyQualifiedSniff.php index 43ed644..b8b8bb5 100644 --- a/tests/rules/classes/allowed/FullyQualifiedSniff.php +++ b/tests/rules/classes/allowed/FullyQualifiedSniff.php @@ -13,4 +13,11 @@ public function a() $className = RuntimeException::class; $a = new RuntimeException(); } + + public function b() + { + $a = new RuntimeException( + 'We can\'t explain' + ); + } } diff --git a/tests/rules/classes/not-allowed/FullyQualifiedSniff.php b/tests/rules/classes/not-allowed/FullyQualifiedSniff.php index 720f040..0e7901d 100644 --- a/tests/rules/classes/not-allowed/FullyQualifiedSniff.php +++ b/tests/rules/classes/not-allowed/FullyQualifiedSniff.php @@ -1,6 +1,6 @@ Date: Fri, 9 Oct 2020 11:39:20 +0200 Subject: [PATCH 2/2] Improve fully qualified class sniff to check inheritance classes too --- .../Sniffs/Classes/FullyQualifiedSniff.php | 14 +++++++++++++- .../rules/classes/allowed/FullyQualifiedSniff.php | 3 ++- ...mespaceVendorLowercasePackageUpperCamelCase.php | 4 +++- .../not-allowed/FullyQualifiedSniffExtends.php | 13 +++++++++++++ 4 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 tests/rules/classes/not-allowed/FullyQualifiedSniffExtends.php diff --git a/custom-standards/Flyeralarm/Sniffs/Classes/FullyQualifiedSniff.php b/custom-standards/Flyeralarm/Sniffs/Classes/FullyQualifiedSniff.php index f3ebc71..47ab8a2 100644 --- a/custom-standards/Flyeralarm/Sniffs/Classes/FullyQualifiedSniff.php +++ b/custom-standards/Flyeralarm/Sniffs/Classes/FullyQualifiedSniff.php @@ -13,7 +13,7 @@ class FullyQualifiedSniff implements Sniff */ public function register() { - return array(T_DOUBLE_COLON, T_NEW); + return array(T_DOUBLE_COLON, T_NEW, T_EXTENDS); } /** @@ -61,6 +61,18 @@ private function getClassCall(File $phpcsFile, $stackPtr): string $classCallStart, $stackPtr - $classCallStart ); + + case T_EXTENDS: + $tokensAsString = $phpcsFile->getTokensAsString( + $stackPtr, + $phpcsFile->findEndOfStatement($stackPtr) - $stackPtr + ); + + return trim(substr( + $tokensAsString, + 0, + strpos($tokensAsString, '{') + )); } throw new RuntimeException(sprintf( diff --git a/tests/rules/classes/allowed/FullyQualifiedSniff.php b/tests/rules/classes/allowed/FullyQualifiedSniff.php index b8b8bb5..cbebc25 100644 --- a/tests/rules/classes/allowed/FullyQualifiedSniff.php +++ b/tests/rules/classes/allowed/FullyQualifiedSniff.php @@ -5,8 +5,9 @@ namespace flyeralarm\Test; use RuntimeException; +use stdClass; -class FullyQualifiedSniff +class FullyQualifiedSniff extends stdClass { public function a() { diff --git a/tests/rules/classes/allowed/NamespaceVendorLowercasePackageUpperCamelCase.php b/tests/rules/classes/allowed/NamespaceVendorLowercasePackageUpperCamelCase.php index b4ed219..8bd59de 100644 --- a/tests/rules/classes/allowed/NamespaceVendorLowercasePackageUpperCamelCase.php +++ b/tests/rules/classes/allowed/NamespaceVendorLowercasePackageUpperCamelCase.php @@ -4,6 +4,8 @@ namespace flyeralarm\FooBar; -class NamespaceVendorLowercasePackageUpperCamelCase extends \PHP_CodeSniffer_File +use PHP_CodeSniffer_File; + +class NamespaceVendorLowercasePackageUpperCamelCase extends PHP_CodeSniffer_File { } diff --git a/tests/rules/classes/not-allowed/FullyQualifiedSniffExtends.php b/tests/rules/classes/not-allowed/FullyQualifiedSniffExtends.php new file mode 100644 index 0000000..b2c9af6 --- /dev/null +++ b/tests/rules/classes/not-allowed/FullyQualifiedSniffExtends.php @@ -0,0 +1,13 @@ +