Closed
Description
Type of issue
- Bug in MO4 sniffer rule.
- Bug in MO4 auto-fixer.
- Bug in MO4 documentation.
- Request to extend MO4 sniffer with specific rule.
- Request to extend MO4 auto-fixer for specific rule.
- Request to extend MO4 documentation.
- Other (explain):
Description
The file integrationtests/B.php
contains following code
<?php
namespace T;
use A;
class B
{
/**
* B's constructor
*/
public function __construct()
{
$a = new A();
$a->b();
}
}
The style violation consists of 2 blank lines between the last use
statement and the class
declaration.
$ vendor/bin/phpcs --standard=MO4 -s integrationtests/B.php
FILE: /home/x/mo4-coding-standard/integrationtests/B.php
-----------------------------------------------------------------------------------------------------------------------------------------------
FOUND 4 ERRORS AFFECTING 2 LINES
-----------------------------------------------------------------------------------------------------------------------------------------------
5 | ERROR | [x] Expected 1 line after last use statement, found 2.
| | (SlevomatCodingStandard.Namespaces.UseSpacing.IncorrectLinesCountAfterLastUse)
5 | ERROR | [x] There must be one blank line after the last USE statement; 2 found;
| | (MO4.Formatting.AlphabeticalUseStatements.SpaceAfterLastUse)
5 | ERROR | [x] Header blocks must be separated by a single blank line (PSR12.Files.FileHeader.SpacingAfterBlock)
6 | ERROR | [x] Multiple empty lines should not exist in a row; found 2 consecutive empty lines
| | (MO4.WhiteSpace.MultipleEmptyLines.MultipleEmptyLines)
-----------------------------------------------------------------------------------------------------------------------------------------------
PHPCBF CAN FIX THE 4 MARKED SNIFF VIOLATIONS AUTOMATICALLY
-----------------------------------------------------------------------------------------------------------------------------------------------
Time: 39ms; Memory: 10MB
We see, that more than on sniff are complaining.
Using the autofixer fails, with an exception in a non relevant sniff MO4.Formatting.UnnecessaryNamespaceUsage
$ vendor/bin/phpcbf --standard=MO4 -s integrationtests/B.php
PHP Fatal error: Uncaught PHP_CodeSniffer\Exceptions\RuntimeException: Uninitialized string offset 0 in /home/x/mo4-coding-standard/MO4/Sniffs/Formatting/UnnecessaryNamespaceUsageSniff.php on line 313 in /home/x/Projekte/PHP/mo4-coding-standard/vendor/squizlabs/php_codesniffer/src/Runner.php:624
Stack trace:
#0 /home/x/mo4-coding-standard/MO4/Sniffs/Formatting/UnnecessaryNamespaceUsageSniff.php(313): PHP_CodeSniffer\Runner->handleErrors()
#1 /home/x/mo4-coding-standard/MO4/Sniffs/Formatting/UnnecessaryNamespaceUsageSniff.php(258): MO4\Sniffs\Formatting\UnnecessaryNamespaceUsageSniff->getFullyQualifiedClassName()
#2 /home/x/mo4-coding-standard/MO4/Sniffs/Formatting/UnnecessaryNamespaceUsageSniff.php(92): MO4\Sniffs\Formatting\UnnecessaryNamespaceUsageSniff->getUseStatements()
#3 /home/x/mo4-coding-standard/vendor/squizlabs/php_codesniffer/src/Files/File.php(519): MO4\Sniffs\Formatting\UnnecessaryNamespaceUsageSniff->process()
#4 /home/x/mo4-coding-standard/vendor/squizlabs/php_codesniffer/src/Files/LocalFile.php(92): PHP_CodeSniffer\Files\File->process()
#5 /home/x/mo4-coding-standard/vendor/squizlabs/php_codesniffer/src/Fixer.php(175): PHP_CodeSniffer\Files\LocalFile->process()
#6 /home/x/mo4-coding-standard/vendor/squizlabs/php_codesniffer/src/Reports/Cbf.php(53): PHP_CodeSniffer\Fixer->fixFile()
#7 /home/x/mo4-coding-standard/vendor/squizlabs/php_codesniffer/src/Reporter.php(285): PHP_CodeSniffer\Reports\Cbf->generateFileReport()
#8 /home/x/mo4-coding-standard/vendor/squizlabs/php_codesniffer/src/Runner.php(714): PHP_CodeSniffer\Reporter->cacheFileReport()
#9 /home/x/mo4-coding-standard/vendor/squizlabs/php_codesniffer/src/Runner.php(454): PHP_CodeSniffer\Runner->processFile()
#10 /home/x/mo4-coding-standard/vendor/squizlabs/php_codesniffer/src/Runner.php(216): PHP_CodeSniffer\Runner->run()
#11 /home/x/mo4-coding-standard/vendor/squizlabs/php_codesniffer/bin/phpcbf(14): PHP_CodeSniffer\Runner->runPHPCBF()
#12 /home/x/mo4-coding-standard/vendor/bin/phpcbf(119): include('...')
#13 {main}
thrown in /home/x/mo4-coding-standard/vendor/squizlabs/php_codesniffer/src/Runner.php on line 624
$ vendor/bin/phpcbf --standard=MO4 -s integrationtests/B.php --exclude=MO4.Formatting.UnnecessaryNamespaceUsage
works.
Technical details
- PHP version: PHP 8.3.6 (cli) (built: Sep 30 2024 15:17:17) (NTS)
- PHPCS version: squizlabs/php_codesniffer 3.11.2
- MO4 version: Relse 10.0.0 commit a7b983b
- OS: Ubuntu 24.04.1 LTS