Unit Test Changes
- This release includes a change to support newer versions of PHPUnit (versions 4, 5, and 6 are now supported)
- The custom PHP_CodeSniffer test runner now requires a bootstrap file
- Developers with custom standards using the PHP_CodeSniffer test runner will need to do one of the following:
- run your unit tests from the PHP_CodeSniffer root dir so the bootstrap file is included
- specify the PHP_CodeSniffer bootstrap file on the command line:
phpunit --bootstrap=/path/to/phpcs/tests/bootstrap.php
- require the PHP_CodeSniffer bootstrap file from your own bootstrap file
- If you don't run PHP_CodeSniffer unit tests, this change will not affect you
- Thanks to Juliette Reinders Folmer for the patch
Other Changes
- A
phpcs.xml
orphpcs.xml.dist
file now takes precedence over the default_standard config setting- Thanks to Björn Fischer for the patch
- Both
phpcs.xml
andphpcs.xml.dist
files can now be prefixed with a dot (request #1566)- The order that the files are searched is:
.phpcs.xml
,.phpcs.xml.dist
,phpcs.xml
,phpcs.xml.dist
- The order that the files are searched is:
- The autoloader will now search for files during unit tests runs from the same locations as during normal phpcs runs
- Allows for easier unit testing of custom standards that use helper classes or custom namespaces
- Include patterns for sniffs now use
OR
logic instead ofAND
logic- Previously, a file had to be in each of the include patterns to be processed by a sniff
- Now, a file has to only be in at least one of the patterns
- This change reflects the original intention of the feature
- PHPCS will now follow symlinks under the list of checked directories
- This previously only worked if you specified the path to a symlink on the command line
- Output from
--config-show
,--config-set
, and--config-delete
now includes the path to the loaded config file - PHPCS now cleanly exits if its config file is not readable
- Previously, a combination of PHP notices and PHPCS errors would be generated
- Comment tokens that start with
/**
are now always tokenized as docblocks- Thanks to Michał Bundyra for the patch
- The PHP-supplied
T_YIELD
andT_YIELD_FROM
tokens have been replicated for older PHP versions- Thanks to Michał Bundyra for the patch
- Added new
Generic.CodeAnalysis.AssignmentInCondition
sniff to warn about variable assignments inside conditions- Thanks to Juliette Reinders Folmer for the contribution
- Added
Generic.Files.OneObjectStructurePerFile
sniff to ensure there is a single class/interface/trait per file- Thanks to Mponos George for the contribution
- Function call sniffs now check variable function names and self/static object creation
- Specific sniffs are
Generic.Functions.FunctionCallArgumentSpacing
,PEAR.Functions.FunctionCallSignature
, andPSR2.Methods.FunctionCallSignature
- Thanks to Michał Bundyra for the patch
- Specific sniffs are
Generic.Files.LineLength
can now be configured to ignore all comment lines, no matter their length- Set the
ignoreComments
property toTRUE
(default isFALSE
) in yourruleset.xml
file to enable this - Thanks to Juliette Reinders Folmer for the patch
- Set the
Generic.PHP.LowerCaseKeyword
now checks self, parent, yield, yield from, and closure (function) keywords- Thanks to Michał Bundyra for the patch
PEAR.Functions.FunctionDeclaration
now removes a blank line if it creates one by moving the curly brace during fixingSquiz.Commenting.FunctionCommentThrowTag
now supports PHP 7.1 multi catch exceptionsSquiz.Formatting.OperatorBracket
no longer throws errors for PHP 7.1 multi catch exceptionsSquiz.Commenting.LongConditionClosingComment
now supports finally statementsSquiz.Formatting.OperatorBracket
now correctly fixes pipe separated flagsSquiz.Formatting.OperatorBracket
now correctly fixes statements containing short array syntaxSquiz.PHP.EmbeddedPhp
now properly fixes cases where the only content in an embedded PHP block is a comment- Thanks to Juliette Reinders Folmer for the patch
Squiz.WhiteSpace.ControlStructureSpacing
now ignores comments when checking blank lines at the top of control structuresSquiz.WhiteSpace.ObjectOperatorSpacing
now detects and fixes spaces around double colons- Thanks to Julius Šmatavičius for the patch
Squiz.WhiteSpace.MemberVarSpacing
can now be configured to check any number of blank lines between member vars- Set the
spacing
property (default is1
) in yourruleset.xml
file to set the spacing
- Set the
Squiz.WhiteSpace.MemberVarSpacing
can now be configured to check a different number of blank lines before the first member var- Set the
spacingBeforeFirst
property (default is1
) in yourruleset.xml
file to set the spacing
- Set the
- Added a new
PHP_CodeSniffer\Util\Tokens::$ooScopeTokens
static member var for quickly checking object scope- Includes
T_CLASS
,T_ANON_CLASS
,T_INTERFACE
, andT_TRAIT
- Thanks to Juliette Reinders Folmer for the patch
- Includes
PHP_CodeSniffer\Files\File::findExtendedClassName()
now supports extended interfaces- Thanks to Martin Hujer for the patch
- Fixed bug #1550 : Squiz.Commenting.FunctionComment false positive when function contains closure
- Fixed bug #1577 : Generic.InlineControlStructureSniff breaks with a comment between body and condition in do while loops
- Fixed bug #1581 : Sniffs not loaded when one-standard directories are being registered in installed_paths
- Fixed bug #1591 : Autoloader failing to load arbitrary files when installed_paths only set via a custom ruleset
- Fixed bug #1605 : Squiz.WhiteSpace.OperatorSpacing false positive on unary minus after comment
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug #1615 : Uncaught RuntimeException when phpcbf fails to fix files
- Fixed bug #1637 : Generic.WhiteSpaceScopeIndent closure argument indenting incorrect with multi-line strings
- Fixed bug #1638 : Squiz.WhiteSpace.ScopeClosingBrace closure argument indenting incorrect with multi-line strings
- Fixed bug #1640 : Squiz.Strings.DoubleQuoteUsage replaces tabs with spaces when fixing
- Thanks to Juliette Reinders Folmer for the patch