Running only UnusedUseStatementSniff leaves behind extraneous semicolons. You don't see this in normal usage because the empty statements are taken care of by other sniffs.
Test case
$ mkdir /tmp/test && cd /tmp/test $ composer require mediawiki/mediawiki-codesniffer $ cat <<EOF > test.php <?php use Foo; EOF $ cat <<EOF > .phpcs.xml <?xml version="1.0"?> <ruleset> <rule ref="./vendor/mediawiki/mediawiki-codesniffer/MediaWiki/Sniffs/Classes/UnusedUseStatementSniff.php" /> </ruleset> EOF $ vendor/bin/phpcbf test.php
Expected result
test.php is
<?php
Actual result
test.php is
<?php ;
Notes
Fixing it seems pretty straightforward:
diff --git a/MediaWiki/Sniffs/Classes/UnusedUseStatementSniff.php b/MediaWiki/Sniffs/Classes/UnusedUseStatementSniff.php index 2cb7227..4dc17da 100644 --- a/MediaWiki/Sniffs/Classes/UnusedUseStatementSniff.php +++ b/MediaWiki/Sniffs/Classes/UnusedUseStatementSniff.php @@ -311,6 +311,12 @@ class UnusedUseStatementSniff implements Sniff { $i++; } while ( isset( $tokens[$i] ) && $tokens[$i]['code'] !== T_SEMICOLON ); + // Remove the semicolon too. + if ( isset( $tokens[$i] ) && $tokens[$i]['code'] === T_SEMICOLON ) { + $phpcsFile->fixer->replaceToken( $i, '' ); + $i++; + } + // Also remove whitespace after the semicolon (new lines). while ( isset( $tokens[$i] ) && $tokens[$i]['code'] === T_WHITESPACE
I'd submit that to Gerrit myself, but my Gerrit account seems to be non-functional.