diff --git a/custom-standards/Flyeralarm/Sniffs/Classes/FullyQualifiedSniff.php b/custom-standards/Flyeralarm/Sniffs/Classes/FullyQualifiedSniff.php new file mode 100644 index 0000000..2e8a703 --- /dev/null +++ b/custom-standards/Flyeralarm/Sniffs/Classes/FullyQualifiedSniff.php @@ -0,0 +1,65 @@ +getClassCall($phpcsFile, $stackPtr); + + if (strpos($classCall, '\\') === false) { + return; + } + + $phpcsFile->addError( + 'Qualifier should be replaced with an import: "%s"', + $stackPtr, + 'Found', + [$classCall] + ); + } + + private function getClassCall(File $phpcsFile, $stackPtr): string + { + $tokens = $phpcsFile->getTokens(); + + switch ($tokens[$stackPtr]['code']) { + case T_NEW: + return $phpcsFile->getTokensAsString( + $stackPtr, + $phpcsFile->findEndOfStatement($stackPtr) - $stackPtr + ); + + case T_DOUBLE_COLON: + $classCallStart = $phpcsFile->findStartOfStatement($stackPtr); + + return $phpcsFile->getTokensAsString( + $classCallStart, + $stackPtr - $classCallStart + ); + } + + throw new RuntimeException(sprintf( + 'Unknown token type: "%s"', + $tokens[$stackPtr]['type'] + )); + } +} diff --git a/tests/rules/classes/allowed/FullyQualifiedSniff.php b/tests/rules/classes/allowed/FullyQualifiedSniff.php new file mode 100644 index 0000000..43ed644 --- /dev/null +++ b/tests/rules/classes/allowed/FullyQualifiedSniff.php @@ -0,0 +1,16 @@ + + + A custom coding standard for FLYERALARM + + + + + + + + + + + + + + + diff --git a/tests/runner.php b/tests/runner.php index a546361..c63563d 100644 --- a/tests/runner.php +++ b/tests/runner.php @@ -25,7 +25,7 @@ function processDir($dirPath) sprintf( "%s -w -p -s --standard=%s %s", escapeshellcmd(__DIR__ . '/../vendor/bin/phpcs'), - escapeshellarg(__DIR__ . '/../ruleset.xml'), + escapeshellarg(__DIR__ . '/ruleset.xml'), escapeshellarg($dirPath . $file) ) );