The file documents changes to the PHP_CodeSniffer project for the 1.x series of releases.
1.5.6 - 2014-12-05
- JS tokenizer now detects xor statements correctly
- The --config-show command now pretty-prints the config values
- Thanks to Ken Guest for the patch
- Setting and removing config values now catches exceptions if the config file is not writable
- Thanks to Ken Guest for the patch
- Setting and removing config values now prints a message to confirm the action and show old values
- You can now get PHP_CodeSniffer to ignore a single line by putting @codingStandardsIgnoreLine in a comment
- When the comment is found, the comment line and the following line will be ignored
- Thanks to Andy Bulford for the contribution
- Generic ConstructorNameSniff no longer errors for PHP4 style constructors when __construct() is present
- Thanks to Thibaud Fabre for the patch
- Fixed bug #280 : The --config-show option generates error when there is no config file
- Fixed bug #306 : File containing only a namespace declaration raises undefined index notice
- Fixed bug #308 : Squiz InlineIfDeclarationSniff fails on ternary operators inside closure
- Fixed bug #310 : Variadics not recognized by tokenizer
- Fixed bug #311 : Suppression of function prototype breaks checking of lines within function
1.5.5 - 2014-09-25
- PHP tokenizer no longer converts class/function names to special tokens types
- Class/function names such as parent and true would become special tokens such as T_PARENT and T_TRUE
- Improved closure support in Generic ScopeIndentSniff
- Improved indented PHP tag support in Generic ScopeIndentSniff
- Generic CamelCapsFunctionNameSniff now ignores a single leading underscore
- Thanks to Alex Slobodiskiy for the patch
- Standards can now be located within hidden directories (further fix for bug #20323)
- Thanks to Klaus Purer for the patch
- Added Generic SyntaxSniff to check for syntax errors in PHP files
- Thanks to Blaine Schmeisser for the contribution
- Squiz DiscouragedFunctionsSniff now warns about var_dump()
- PEAR ValidFunctionNameSniff no longer throws an error for _()
- Squiz and PEAR FunctionCommentSnif now support _()
- Generic UpperCaseConstantSniff and LowerCaseConstantSniff now ignore function names
- Fixed bug #248 : FunctionCommentSniff expects ampersand on param name
- Fixed bug #265 : False positives with type hints in ForbiddenFunctionsSniff
- Fixed bug #20373 : Inline comment sniff tab handling way
- Fixed bug #20378 : Report appended to existing file if no errors found in run
- Fixed bug #20381 : Invalid "Comment closer must be on a new line"
- Thanks to Brad Kent for the patch
- Fixed bug #20386 : Squiz.Commenting.ClassComment.SpacingBefore thrown if first block comment
1.5.4 - 2014-08-06
- Removed use of sys_get_temp_dir() as this is not supported by the min PHP version
- The installed_paths config var now accepts relative paths
- The paths are relative to the PHP_CodeSniffer install directory
- Thanks to Weston Ruter for the patch
- Generic ScopeIndentSniff now accounts for different open tag indents
- PEAR FunctionDeclarationSniff now ignores short arrays when checking indent
- Thanks to Daniel Tschinder for the patch
- PSR2 FunctionCallSignatureSniff now treats multi-line strings as a single-line argument, like arrays and closures
- Thanks to Dawid Nowak for the patch
- Generic ForbiddenFunctionsSniff now detects calls to functions in the global namespace
- Thanks to Ole Martin Handeland for the patch
- Generic LowerCaseConstantSniff and UpperCaseConstantSniff now ignore namespaces beginning with TRUE/FALSE/NULL
- Thanks to Renan Gonçalves for the patch
- Squiz InlineCommentSniff no longer requires a blank line after post-statement comments (request #20299)
- Squiz SelfMemberReferenceSniff now works correctly with namespaces
- Tab characters are now encoded in abstract pattern error messages
- Thanks to Blaine Schmeisser for the patch
- Invalid sniff codes passed to --sniffs now show a friendly error message (request #20313)
- Generic LineLengthSniff now shows a warning if the iconv module is disabled (request #20314)
- Source report no longer shows errors if category or sniff names ends in an uppercase error
- Thanks to Jonathan Marcil for the patch
- Fixed bug #20268 : Incorrect documentation titles in PEAR documentation
- Fixed bug #20296 : new array notion in function comma check fails
- Fixed bug #20307 : PHP_CodeSniffer_Standards_AbstractVariableSniff analyze traits
- Fixed bug #20308 : Squiz.ValidVariableNameSniff - wrong variable usage
- Fixed bug #20309 : Use "member variable" term in sniff "processMemberVar" method
- Fixed bug #20310 : PSR2 does not check for space after function name
- Fixed bug #20322 : Display rules set to type=error even when suppressing warnings
- Fixed bug #20323 : PHPCS tries to load sniffs from hidden directories
1.5.3 - 2014-05-01
- Improved detection of nested IF statements that use the alternate IF/ENDIF syntax
- PHP tokenizer now supports DEFAULT statements opened with a T_SEMICOLON
- PSR1 CamelCapsMethodNameSniff now ignores magic methods
- Thanks to Eser Ozvataf for the patch
- PSR1 SideEffectsSniff now ignores methods named define()
- PSR1 and PEAR ClassDeclarationSniffs now support traits (request #20208)
- PSR2 ControlStructureSpacingSniff now allows newlines before/after parentheses
- Thanks to Maurus Cuelenaere for the patch
- Squiz LowercasePHPFunctionsSniff no longer reports errors for namespaced functions
- Thanks to Max Galbusera for the patch
- Squiz SwitchDeclarationSniff now allows exit() as a breaking statement for case/default
- Squiz ValidVariableNameSniff and Zend ValidVariableNameSniff now ignore additional PHP reserved vars
- Thanks to Mikuláš Dítě and Adrian Crepaz for the patch
- Sniff code Squiz.WhiteSpace.MemberVarSpacing.After changed to Squiz.WhiteSpace.MemberVarSpacing.Incorrect (request #20241)
- Fixed bug #20200 : Invalid JSON produced with specific error message
- Fixed bug #20204 : Ruleset exclude checks are case sensitive
- Fixed bug #20213 : Invalid error, Inline IF must be declared on single line
- Fixed bug #20225 : array_merge() that takes more than one line generates error
- Fixed bug #20230 : Squiz ControlStructureSpacing sniff assumes specific condition formatting
- Fixed bug #20240 : Squiz block comment sniff fails when newline present
- Fixed bug #20247 : The Squiz.WhiteSpace.ControlStructureSpacing sniff and do-while
- Thanks to Alexander Obuhovich for the patch
- Fixed bug #20248 : The Squiz_Sniffs_WhiteSpace_ControlStructureSpacingSniff sniff and empty scope
- Fixed bug #20252 : Uninitialized string offset when package name starts with underscore
1.5.2 - 2014-02-05
- Improved support for the PHP 5.5. classname::class syntax
- PSR2 SwitchDeclarationSniff no longer throws errors when this syntax is used in CASE conditions
- Improved support for negative checks of instanceOf in Squiz ComparisonOperatorUsageSniff
- Thanks to Martin Winkel for the patch
- Generic FunctionCallArgumentSpacingSniff now longer complains about space before comma when using here/nowdocs
- Thanks to Richard van Velzen for the patch
- Generic LowerCaseConstantSniff and UpperCaseConstantSniff now ignore class constants
- Thanks to Kristopher Wilson for the patch
- PEAR FunctionCallSignatureSniff now has settings to specify how many spaces should appear before/after parentheses
- Override the 'requiredSpacesAfterOpen' and 'requiredSpacesBeforeClose' settings in a ruleset.xml file to change
- Default remains at 0 for both
- Thanks to Astinus Eberhard for the patch
- PSR2 ControlStructureSpacingSniff now has settings to specify how many spaces should appear before/after parentheses
- Override the 'requiredSpacesAfterOpen' and 'requiredSpacesBeforeClose' settings in a ruleset.xml file to change
- Default remains at 0 for both
- Thanks to Astinus Eberhard for the patch
- Squiz ForEachLoopDeclarationSniff now has settings to specify how many spaces should appear before/after parentheses
- Override the 'requiredSpacesAfterOpen' and 'requiredSpacesBeforeClose' settings in a ruleset.xml file to change
- Default remains at 0 for both
- Thanks to Astinus Eberhard for the patch
- Squiz ForLoopDeclarationSniff now has settings to specify how many spaces should appear before/after parentheses
- Override the 'requiredSpacesAfterOpen' and 'requiredSpacesBeforeClose' settings in a ruleset.xml file to change
- Default remains at 0 for both
- Thanks to Astinus Eberhard for the patch
- Squiz FunctionDeclarationArgumentSpacingSniff now has settings to specify how many spaces should appear before/after parentheses
- Override the 'requiredSpacesAfterOpen' and 'requiredSpacesBeforeClose' settings in a ruleset.xml file to change
- Default remains at 0 for both
- Thanks to Astinus Eberhard for the patch
- Removed UnusedFunctionParameter, CyclomaticComplexity and NestingLevel from the Squiz standard
- Generic FixmeSniff and TodoSniff now work correctly with accented characters
- Fixed bug #20145 : Custom ruleset preferences directory over installed standard
- Fixed bug #20147 : phpcs-svn-pre-commit - no more default error report
- Fixed bug #20151 : Problem handling "if(): ... else: ... endif;" syntax
- Fixed bug #20190 : Invalid regex in Squiz_Sniffs_WhiteSpace_SuperfluousWhitespaceSniff
1.5.1 - 2013-12-12
- Config values can now be set at runtime using the command line argument
--runtime-set key value- Runtime values are the same as config values, but are not written to the main config file
- Thanks to Wim Godden for the patch
- Config values can now be set in ruleset files
- e.g., config name="zend_ca_path" value="/path/to/ZendCodeAnalyzer"
- Can not be used to set config values that override command line values, such as show_warnings
- Thanks to Jonathan Marcil for helping with the patch
- Added a new installed_paths config value to allow for the setting of directories that contain standards
- By default, standards have to be installed into the CodeSniffer/Standards directory to be considered installed
- New config value allows a list of paths to be set in addition to this internal path
- Installed standards appear when using the -i arg, and can be referenced in rulesets using only their name
- Set paths by running: phpcs --config-set installed_paths /path/one,/path/two,...
- PSR2 ClassDeclarationSniff now allows a list of extended interfaces to be split across multiple lines
- Squiz DoubleQuoteUsageSniff now allows \b in double quoted strings
- Generic ForbiddenFunctionsSniff now ignores object creation
- This is a further fix for bug #20100 : incorrect Function mysql() has been deprecated report
- Fixed bug #20136 : Squiz_Sniffs_WhiteSpace_ScopeKeywordSpacingSniff and Traits
- Fixed bug #20138 : Protected property underscore and camel caps issue (in trait with Zend)
- Thanks to Gaetan Rousseau for the patch
- Fixed bug #20139 : No report file generated on success
1.5.0 - 2013-11-28
- Doc generation is now working again for installed standards
- Includes a fix for limiting the docs to specific sniffs
- Generic ScopeIndentSniff now allows for ignored tokens to be set via ruleset.xml files
- E.g., to ignore comments, override a property using:
- name="ignoreIndentationTokens" type="array" value="T_COMMENT,T_DOC_COMMENT"
- PSR2 standard now ignores comments when checking indentation rules
- Generic UpperCaseConstantNameSniff no longer reports errors where constants are used (request #20090)
- It still reports errors where constants are defined
- Individual messages can now be excluded in ruleset.xml files using the exclude tag (request #20091)
- Setting message severity to 0 continues to be supported
- Squiz OperatorSpacingSniff no longer throws errors for the ?: short ternary operator
- Thanks to Antoine Musso for the patch
- Comment parser now supports non-English characters when splitting comment lines into words
- Thanks to Nik Sun for the patch
- Exit statements are now recognised as valid closers for CASE and DEFAULT blocks
- Thanks to Maksim Kochkin for the patch
- PHP_CodeSniffer_CLI::process() can now be passed an incomplete array of CLI values
- Missing values will be set to the CLI defaults
- Thanks to Maksim Kochkin for the patch
- Fixed bug #20093 : Bug with ternary operator token
- Fixed bug #20097 :
CLI.phpthrows error in PHP 5.2 - Fixed bug #20100 : incorrect Function mysql() has been deprecated report
- Fixed bug #20119 : PHP warning: invalid argument to str_repeat() in SVN blame report with -s
- Fixed bug #20123 : PSR2 complains about an empty second statement in for-loop
- Fixed bug #20131 : PHP errors in svnblame report, if there are files not under version control
- Fixed bug #20133 : Allow "HG: hg_id" as value for @version tag
1.4.8 - 2013-11-26
- Generic ScopeIndentSniff now allows for ignored tokens to be set via ruleset.xml files
- E.g., to ignore comments, override a property using:
- name="ignoreIndentationTokens" type="array" value="T_COMMENT,T_DOC_COMMENT"
- PSR2 standard now ignores comments when checking indentation rules
- Squiz OperatorSpacingSniff no longer throws errors for the ?: short ternary operator
- Thanks to Antoine Musso for the patch
- Comment parser now supports non-English characters when splitting comment lines into words
- Thanks to Nik Sun for the patch
- Exit statements are now recognised as valid closers for CASE and DEFAULT blocks
- Thanks to Maksim Kochkin for the patch
- PHP_CodeSniffer_CLI::process() can now be passed an incomplete array of CLI values
- Missing values will be set to the CLI defaults
- Thanks to Maksim Kochkin for the patch
- Fixed bug #20097 :
CLI.phpthrows error in PHP 5.2 - Fixed bug #20100 : incorrect Function mysql() has been deprecated report
- Fixed bug #20119 : PHP warning: invalid argument to str_repeat() in SVN blame report with -s
- Fixed bug #20123 : PSR2 complains about an empty second statement in for-loop
- Fixed bug #20131 : PHP errors in svnblame report, if there are files not under version control
- Fixed bug #20133 : Allow "HG: hg_id" as value for @version tag
1.5.0RC4 - 2013-09-26
- You can now restrict violations to individual sniff codes using the --sniffs command line argument
- Previously, this only restricted violations to an entire sniff and not individual messages
- If you have scripts calling PHP_CodeSniffer::process() or creating PHP_CodeSniffer_File objects, you must update your code
- The array of restrictions passed to PHP_CodeSniffer::process() must now be an array of sniff codes instead of class names
- The PHP_CodeSniffer_File::__construct() method now requires an array of restrictions to be passed
- Doc generation is now working again
- Progress information now shows the percentage complete at the end of each line
- Added report type --report=junit to show the error list in a JUnit compatible format
- Thanks to Oleg Lobach for the contribution
- Added support for the PHP 5.4 callable type hint
- Fixed problem where some file content could be ignored when checking STDIN
- Version information is now printed when installed via composer or run from a Git clone (request #20050)
- Added Squiz DisallowBooleanStatementSniff to ban boolean operators outside of control structure conditions
- The CSS tokenizer is now more reliable when encountering 'list' and 'break' strings
- Coding standard ignore comments can now appear instead doc blocks as well as inline comments
- Thanks to Stuart Langley for the patch
- Generic LineLengthSniff now ignores SVN URL and Head URL comments
- Thanks to Karl DeBisschop for the patch
- PEAR MultiLineConditionSniff now has a setting to specify how many spaces code should be indented
- Default remains at 4; override the 'indent' setting in a ruleset.xml file to change
- Thanks to Szabolcs Sulik for the patch
- PEAR MultiLineAssignmentSniff now has a setting to specify how many spaces code should be indented
- Default remains at 4; override the 'indent' setting in a ruleset.xml file to change
- Thanks to Szabolcs Sulik for the patch
- PEAR FunctionDeclarationSniff now has a setting to specify how many spaces code should be indented
- Default remains at 4; override the 'indent' setting in a ruleset.xml file to change
- Thanks to Szabolcs Sulik for the patch
- Squiz SwitchDeclarationSniff now has a setting to specify how many spaces code should be indented
- Default remains at 4; override the 'indent' setting in a ruleset.xml file to change
- Thanks to Szabolcs Sulik for the patch
- Squiz CSS IndentationSniff now has a setting to specify how many spaces code should be indented
- Default remains at 4; override the 'indent' setting in a ruleset.xml file to change
- Thanks to Hugo Fonseca for the patch
- Squiz and MySource File and Function comment sniffs now allow all tags and don't require a particular licence
- Squiz standard now allows lines to be 120 characters long before warning; up from 85
- Squiz LowercaseStyleDefinitionSniff no longer throws errors for class names in nested style definitions
- Squiz ClassFileNameSniff no longer throws errors when checking STDIN
- Squiz CSS sniffs no longer generate errors for IE filters
- Squiz CSS IndentationSniff no longer sees comments as blank lines
- Squiz LogicalOperatorSpacingSniff now ignores whitespace at the end of a line
- Squiz.Scope.MethodScope.Missing error message now mentions 'visibility' instead of 'scope modifier'
- Thanks to Renat Akhmedyanov for the patch
- Added support for the PSR2 multi-line arguments errata
- The PSR2 standard no longer throws errors for additional spacing after a type hint
- PSR UseDeclarationSniff no longer throws errors for USE statements inside TRAITs
- Fixed cases where code was incorrectly assigned the T_GOTO_LABEL token when used in a complex CASE condition
- Fixed bug #20026 : Check for multi-line arrays that should be single-line is slightly wrong
- Adds new error message for single-line arrays that end with a comma
- Fixed bug #20029 : ForbiddenFunction sniff incorrectly recognizes methods in USE clauses
- Fixed bug #20043 : Mis-interpretation of Foo::class
- Fixed bug #20044 : PSR1 camelCase check does not ignore leading underscores
- Fixed bug #20045 : Errors about indentation for closures with multi-line 'use' in functions
- Fixed bug #20051 : Undefined index: scope_opener / scope_closer
- Thanks to Anthon Pang for the patch
1.4.7 - 2013-09-26
- Added report type --report=junit to show the error list in a JUnit compatible format
- Thanks to Oleg Lobach for the contribution
- Added support for the PHP 5.4 callable type hint
- Fixed problem where some file content could be ignored when checking STDIN
- Version information is now printed when installed via composer or run from a Git clone (request #20050)
- The CSS tokenizer is now more reliable when encountering 'list' and 'break' strings
- Coding standard ignore comments can now appear instead doc blocks as well as inline comments
- Thanks to Stuart Langley for the patch
- Generic LineLengthSniff now ignores SVN URL and Head URL comments
- Thanks to Karl DeBisschop for the patch
- PEAR MultiLineConditionSniff now has a setting to specify how many spaces code should be indented
- Default remains at 4; override the 'indent' setting in a ruleset.xml file to change
- Thanks to Szabolcs Sulik for the patch
- PEAR MultiLineAssignmentSniff now has a setting to specify how many spaces code should be indented
- Default remains at 4; override the 'indent' setting in a ruleset.xml file to change
- Thanks to Szabolcs Sulik for the patch
- PEAR FunctionDeclarationSniff now has a setting to specify how many spaces code should be indented
- Default remains at 4; override the 'indent' setting in a ruleset.xml file to change
- Thanks to Szabolcs Sulik for the patch
- Squiz SwitchDeclarationSniff now has a setting to specify how many spaces code should be indented
- Default remains at 4; override the 'indent' setting in a ruleset.xml file to change
- Thanks to Szabolcs Sulik for the patch
- Squiz CSS IndentationSniff now has a setting to specify how many spaces code should be indented
- Default remains at 4; override the 'indent' setting in a ruleset.xml file to change
- Thanks to Hugo Fonseca for the patch
- Squiz and MySource File and Function comment sniffs now allow all tags and don't require a particular licence
- Squiz LowercaseStyleDefinitionSniff no longer throws errors for class names in nested style definitions
- Squiz ClassFileNameSniff no longer throws errors when checking STDIN
- Squiz CSS sniffs no longer generate errors for IE filters
- Squiz CSS IndentationSniff no longer sees comments as blank lines
- Squiz LogicalOperatorSpacingSniff now ignores whitespace at the end of a line
- Squiz.Scope.MethodScope.Missing error message now mentions 'visibility' instead of 'scope modifier'
- Thanks to Renat Akhmedyanov for the patch
- Added support for the PSR2 multi-line arguments errata
- The PSR2 standard no longer throws errors for additional spacing after a type hint
- PSR UseDeclarationSniff no longer throws errors for USE statements inside TRAITs
- Fixed bug #20026 : Check for multi-line arrays that should be single-line is slightly wrong
- Adds new error message for single-line arrays that end with a comma
- Fixed bug #20029 : ForbiddenFunction sniff incorrectly recognizes methods in USE clauses
- Fixed bug #20043 : Mis-interpretation of Foo::class
- Fixed bug #20044 : PSR1 camelCase check does not ignore leading underscores
- Fixed bug #20045 : Errors about indentation for closures with multi-line 'use' in functions
1.5.0RC3 - 2013-07-25
- Added report type --report=json to show the error list and total counts for all checked files
- Thanks to Jeffrey Fisher for the contribution
- PHP_CodeSniffer::isCamelCaps now allows for acronyms at the start of a string if the strict flag is FALSE
- acronyms are defined as at least 2 uppercase characters in a row
- e.g., the following is now valid camel caps with strict set to FALSE: XMLParser
- The PHP tokenizer now tokenizes goto labels as T_GOTO_LABEL instead of T_STRING followed by T_COLON
- The JS tokenizer now has support for the T_THROW token
- Symlinked directories inside CodeSniffer/Standards and in ruleset.xml files are now supported
- Only available since PHP 5.2.11 and 5.3.1
- Thanks to Maik Penz for the patch
- The JS tokenizer now correctly identifies T_INLINE_ELSE tokens instead of leaving them as T_COLON
- Thanks to Arnout Boks for the patch
- Explaining a standard (phpcs -e) that uses namespaces now works correctly
- Restricting a check to specific sniffs (phpcs --sniffs=...) now works correctly with namespaced sniffs
- Thanks to Maik Penz for the patch
- Docs added for the entire Generic standard, and many sniffs from other standards are now documented as well
- Thanks to Spencer Rinehart for the contribution
- Clearer error message for when the sniff class name does not match the directory structure
- Generated HTML docs now correctly show the open PHP tag in code comparison blocks
- Added Generic InlineHTMLSniff to ensure a file only contains PHP code
- Added Squiz ShorthandSizeSniff to check that CSS sizes are using shorthand notation only when 1 or 2 values are used
- Added Squiz ForbiddenStylesSniff to ban the use of some deprecated browser-specific styles
- Added Squiz NamedColoursSniff to ban the use of colour names
- PSR2 standard no longer enforces no whitespace between the closing parenthesis of a function call and the semicolon
- PSR2 ClassDeclarationSniff now ignores empty classes when checking the end brace position
- PSR2 SwitchDeclarationSniff no longer reports errors for empty lines between CASE statements
- PEAR ObjectOperatorIndentSniff now has a setting to specify how many spaces code should be indented
- Default remains at 4; override the indent setting in a ruleset.xml file to change
- Thanks to Andrey Mindubaev for the patch
- Squiz FileExtensionSniff now supports traits
- Thanks to Lucas Green for the patch
- Squiz ArrayDeclarationSniff no longer reports errors for no comma at the end of a line that contains a function call
- Squiz SwitchDeclarationSniff now supports T_CONTINUE and T_THROW as valid case/default breaking statements
- Squiz CommentedOutCodeSniff is now better at ignoring commented out HTML, XML and regular expressions
- Squiz DisallowComparisonAssignmentSniff no longer throws errors for the third expression in a FOR statement
- Squiz ColourDefinitionSniff no longer throws errors for some CSS class names
- Squiz ControlStructureSpacingSniff now supports all types of CASE/DEFAULT breaking statements
- Generic CallTimePassByReferenceSniff now reports errors for functions called using a variable
- Thanks to Maik Penz for the patch
- Generic ConstructorNameSniff no longer throws a notice for abstract constructors inside abstract classes
- Thanks to Spencer Rinehart for the patch
- Squiz ComparisonOperatorUsageSniff now checks inside elseif statements
- Thanks to Arnout Boks for the patch
- Squiz OperatorSpacingSniff now reports errors for no spacing around inline then and else tokens
- Thanks to Arnout Boks for the patch
- Fixed bug #19811 : Comments not ignored in all cases in AbstractPatternSniff
- Thanks to Erik Wiffin for the patch
- Fixed bug #19892 : ELSE with no braces causes incorrect SWITCH break statement indentation error
- Fixed bug #19897 : Indenting warnings in templates not consistent
- Fixed bug #19908 : PEAR MultiLineCondition Does Not Apply elseif
- Fixed bug #19930 : option --report-file generate an empty file
- Fixed bug #19935 : notify-send reports do not vanish in gnome-shell
- Thanks to Christian Weiske for the patch
- Fixed bug #19944 : docblock squiz sniff "return void" trips over return in lambda function
- Fixed bug #19953 : PSR2 - Spaces before interface name for abstract class
- Fixed bug #19956 : phpcs warns for Type Hint missing Resource
- Fixed bug #19957 : Does not understand trait method aliasing
- Fixed bug #19968 : Permission denied on excluded directory
- Fixed bug #19969 : Sniffs with namespace not recognized in reports
- Fixed bug #19997 : Class names incorrectly detected as constants
1.4.6 - 2013-07-25
- Added report type --report=json to show the error list and total counts for all checked files
- Thanks to Jeffrey Fisher for the contribution
- The JS tokenizer now has support for the T_THROW token
- Symlinked directories inside CodeSniffer/Standards and in ruleset.xml files are now supported
- Only available since PHP 5.2.11 and 5.3.1
- Thanks to Maik Penz for the patch
- The JS tokenizer now correctly identifies T_INLINE_ELSE tokens instead of leaving them as T_COLON
- Thanks to Arnout Boks for the patch
- Explaining a standard (phpcs -e) that uses namespaces now works correctly
- Restricting a check to specific sniffs (phpcs --sniffs=...) now works correctly with namespaced sniffs
- Thanks to Maik Penz for the patch
- Docs added for the entire Generic standard, and many sniffs from other standards are now documented as well
- Thanks to Spencer Rinehart for the contribution
- Clearer error message for when the sniff class name does not match the directory structure
- Generated HTML docs now correctly show the open PHP tag in code comparison blocks
- Added Generic InlineHTMLSniff to ensure a file only contains PHP code
- Added Squiz ShorthandSizeSniff to check that CSS sizes are using shorthand notation only when 1 or 2 values are used
- Added Squiz ForbiddenStylesSniff to ban the use of some deprecated browser-specific styles
- Added Squiz NamedColoursSniff to ban the use of colour names
- PSR2 standard no longer enforces no whitespace between the closing parenthesis of a function call and the semicolon
- PSR2 ClassDeclarationSniff now ignores empty classes when checking the end brace position
- PSR2 SwitchDeclarationSniff no longer reports errors for empty lines between CASE statements
- PEAR ObjectOperatorIndentSniff now has a setting to specify how many spaces code should be indented
- Default remains at 4; override the indent setting in a ruleset.xml file to change
- Thanks to Andrey Mindubaev for the patch
- Squiz FileExtensionSniff now supports traits
- Thanks to Lucas Green for the patch
- Squiz ArrayDeclarationSniff no longer reports errors for no comma at the end of a line that contains a function call
- Squiz SwitchDeclarationSniff now supports T_CONTINUE and T_THROW as valid case/default breaking statements
- Squiz CommentedOutCodeSniff is now better at ignoring commented out HTML, XML and regular expressions
- Squiz DisallowComparisonAssignmentSniff no longer throws errors for the third expression in a FOR statement
- Squiz ColourDefinitionSniff no longer throws errors for some CSS class names
- Squiz ControlStructureSpacingSniff now supports all types of CASE/DEFAULT breaking statements
- Generic CallTimePassByReferenceSniff now reports errors for functions called using a variable
- Thanks to Maik Penz for the patch
- Generic ConstructorNameSniff no longer throws a notice for abstract constructors inside abstract classes
- Thanks to Spencer Rinehart for the patch
- Squiz ComparisonOperatorUsageSniff now checks inside elseif statements
- Thanks to Arnout Boks for the patch
- Squiz OperatorSpacingSniff now reports errors for no spacing around inline then and else tokens
- Thanks to Arnout Boks for the patch
- Fixed bug #19811 : Comments not ignored in all cases in AbstractPatternSniff
- Thanks to Erik Wiffin for the patch
- Fixed bug #19892 : ELSE with no braces causes incorrect SWITCH break statement indentation error
- Fixed bug #19897 : Indenting warnings in templates not consistent
- Fixed bug #19908 : PEAR MultiLineCondition Does Not Apply elseif
- Fixed bug #19913 : Running phpcs in interactive mode causes warnings
- Thanks to Harald Franndorfer for the patch
- Fixed bug #19935 : notify-send reports do not vanish in gnome-shell
- Thanks to Christian Weiske for the patch
- Fixed bug #19944 : docblock squiz sniff "return void" trips over return in lambda function
- Fixed bug #19953 : PSR2 - Spaces before interface name for abstract class
- Fixed bug #19956 : phpcs warns for Type Hint missing Resource
- Fixed bug #19957 : Does not understand trait method aliasing
- Fixed bug #19968 : Permission denied on excluded directory
- Fixed bug #19969 : Sniffs with namespace not recognized in reports
- Fixed bug #19997 : Class names incorrectly detected as constants
1.5.0RC2 - 2013-04-04
- Ruleset processing has been rewritten to be more predictable
- Provides much better support for relative paths inside ruleset files
- May mean that sniffs that were previously ignored are now being included when importing external rulesets
- Ruleset processing output can be seen by using the -vv command line argument
- Internal sniff registering functions have all changed, so please review custom scripts
- You can now pass multiple coding standards on the command line, comma separated (request #19144)
- Works with built-in or custom standards and rulesets, or a mix of both
- You can now exclude directories or whole standards in a ruleset XML file (request #19731)
- e.g., exclude "Generic.Commenting" or just "Generic"
- You can also pass in a path to a directory instead, if you know it
- Added Generic LowerCaseKeywordSniff to ensure all PHP keywords are defined in lowercase
- The PSR2 and Squiz standards now use this sniff
- Added Generic SAPIUsageSniff to ensure the
PHP_SAPIconstant is used instead ofphp_sapi_name()(request #19863) - Squiz FunctionSpacingSniff now has a setting to specify how many lines there should between functions (request #19843)
- Default remains at 2
- Override the "spacing" setting in a ruleset.xml file to change
- Squiz LowercasePHPFunctionSniff no longer throws errors for the limited set of PHP keywords it was checking
- Add a rule for Generic.PHP.LowerCaseKeyword to your ruleset to replicate this functionality
- Added support for the PHP 5.4 T_CALLABLE token so it can be used in lower PHP versions
- Generic EndFileNoNewlineSniff now supports checking of CSS and JS files
- PSR2 SwitchDeclarationSniff now has a setting to specify how many spaces code should be indented
- Default remains at 4; override the indent setting in a ruleset.xml file to change
- Thanks to Asher Snyder for the patch
- Generic ScopeIndentSniff now has a setting to specify a list of tokens that should be ignored
- The first token on the line is checked and the whole line is ignored if the token is in the array
- Thanks to Eloy Lafuente for the patch
- Squiz LowercaseClassKeywordsSniff now checks for the TRAIT keyword
- Thanks to Anthon Pang for the patch
- If you create your own PHP_CodeSniffer object, PHPCS will no longer exit when an unknown argument is found
- This allows you to create wrapper scripts for PHPCS more easily
- PSR2 MethodDeclarationSniff no longer generates a notice for methods named "_"
- Thanks to Bart S for the patch
- Squiz BlockCommentSniff no longer reports that a blank line between a scope closer and block comment is invalid
- Generic DuplicateClassNameSniff no longer reports an invalid error if multiple PHP open tags exist in a file
- Generic DuplicateClassNameSniff no longer reports duplicate errors if multiple PHP open tags exist in a file
- Fixed bug #19819 : Freeze with syntax error in use statement
- Fixed bug #19820 : Wrong message level in Generic_Sniffs_CodeAnalysis_EmptyStatementSniff
- Fixed bug #19859 : CodeSniffer::setIgnorePatterns API changed
- Fixed bug #19871 : findExtendedClassName doesn't return FQCN on namespaced classes
- Fixed bug #19879 : bitwise and operator interpreted as reference by value
1.4.5 - 2013-04-04
- Added Generic LowerCaseKeywordSniff to ensure all PHP keywords are defined in lowercase
- The PSR2 and Squiz standards now use this sniff
- Added Generic SAPIUsageSniff to ensure the
PHP_SAPIconstant is used instead ofphp_sapi_name()(request #19863) - Squiz FunctionSpacingSniff now has a setting to specify how many lines there should between functions (request #19843)
- Default remains at 2
- Override the "spacing" setting in a ruleset.xml file to change
- Squiz LowercasePHPFunctionSniff no longer throws errors for the limited set of PHP keywords it was checking
- Add a rule for Generic.PHP.LowerCaseKeyword to your ruleset to replicate this functionality
- Added support for the PHP 5.4 T_CALLABLE token so it can be used in lower PHP versions
- Generic EndFileNoNewlineSniff now supports checking of CSS and JS files
- PSR2 SwitchDeclarationSniff now has a setting to specify how many spaces code should be indented
- Default remains at 4; override the indent setting in a ruleset.xml file to change
- Thanks to Asher Snyder for the patch
- Generic ScopeIndentSniff now has a setting to specify a list of tokens that should be ignored
- The first token on the line is checked and the whole line is ignored if the token is in the array
- Thanks to Eloy Lafuente for the patch
- Squiz LowercaseClassKeywordsSniff now checks for the TRAIT keyword
- Thanks to Anthon Pang for the patch
- If you create your own PHP_CodeSniffer object, PHPCS will no longer exit when an unknown argument is found
- This allows you to create wrapper scripts for PHPCS more easily
- PSR2 MethodDeclarationSniff no longer generates a notice for methods named "_"
- Thanks to Bart S for the patch
- Squiz BlockCommentSniff no longer reports that a blank line between a scope closer and block comment is invalid
- Generic DuplicateClassNameSniff no longer reports an invalid error if multiple PHP open tags exist in a file
- Generic DuplicateClassNameSniff no longer reports duplicate errors if multiple PHP open tags exist in a file
- Fixed bug #19819 : Freeze with syntax error in use statement
- Fixed bug #19820 : Wrong message level in Generic_Sniffs_CodeAnalysis_EmptyStatementSniff
- Fixed bug #19859 : CodeSniffer::setIgnorePatterns API changed
- Fixed bug #19871 : findExtendedClassName doesn't return FQCN on namespaced classes
- Fixed bug #19879 : bitwise and operator interpreted as reference by value
1.5.0RC1 - 2013-02-08
- Reports have been completely rewritten to consume far less memory
- Each report is incrementally written to the file system during a run and then printed out when the run ends
- There is no longer a need to keep the list of errors and warnings in memory during a run
- Multi-file sniff support has been removed because they are too memory intensive
- If you have a custom multi-file sniff, you can convert it into a standard sniff quite easily
- See
CodeSniffer/Standards/Generic/Sniffs/Classes/DuplicateClassNameSniff.phpfor an example
1.4.4 - 2013-02-07
- Ignored lines no longer cause the summary report to show incorrect error and warning counts
- Thanks to Bert Van Hauwaert for the patch
- Added Generic CSSLintSniff to run CSSLint over a CSS file and report warnings
- Set full command to run CSSLint using phpcs --config-set csslint_path /path/to/csslint
- Thanks to Roman Levishchenko for the contribution
- Added PSR2 ControlStructureSpacingSniff to ensure there are no spaces before and after parenthesis in control structures
- Fixes bug #19732 : PSR2: some control structures errors not reported
- Squiz commenting sniffs now support non-English characters when checking for capital letters
- Thanks to Roman Levishchenko for the patch
- Generic EndFileNewlineSniff now supports JS and CSS files
- Thanks to Denis Ryabkov for the patch
- PSR1 SideEffectsSniff no longer reports constant declarations as side effects
- Notifysend report now supports notify-send versions before 0.7.3
- Thanks to Ken Guest for the patch
- PEAR and Squiz FunctionCommentSniffs no longer report errors for misaligned argument comments when they are blank
- Thanks to Thomas Peterson for the patch
- Squiz FunctionDeclarationArgumentSpacingSniff now works correctly for equalsSpacing values greater than 0
- Thanks to Klaus Purer for the patch
- Squiz SuperfluousWhitespaceSniff no longer throws errors for CSS files with no newline at the end
- Squiz SuperfluousWhitespaceSniff now allows a single newline at the end of JS and CSS files
- Fixed bug #19755 : Token of T_CLASS type has no scope_opener and scope_closer keys
- Fixed bug #19759 : Squiz.PHP.NonExecutableCode fails for return function()...
- Fixed bug #19763 : Use statements for traits not recognised correctly for PSR2 code style
- Fixed bug #19764 : Instead of for traits throws uppercase constant name errors
- Fixed bug #19772 : PSR2_Sniffs_Namespaces_UseDeclarationSniff does not properly recognize last use
- Fixed bug #19775 : False positive in NonExecutableCode sniff when not using curly braces
- Fixed bug #19782 : Invalid found size functions in loop when using object operator
- Fixed bug #19799 : config folder is not created automatically
- Fixed bug #19804 : JS Tokenizer wrong /**/ parsing
1.4.3 - 2012-12-04
- Added support for the PHP 5.5 T_FINALLY token to detect try/catch/finally statements
- Added empty CodeSniffer.conf to enable config settings for Composer installs
- Added Generic EndFileNoNewlineSniff to ensure there is no newline at the end of a file
- Autoloader can now load PSR-0 compliant classes
- Thanks to Maik Penz for the patch
- Squiz NonExecutableCodeSniff no longer throws error for multi-line RETURNs inside CASE statements
- Thanks to Marc Ypes for the patch
- Squiz OperatorSpacingSniff no longer reports errors for negative numbers inside inline THEN statements
- Thanks to Klaus Purer for the patch
- Squiz OperatorSpacingSniff no longer reports errors for the assignment of operations involving negative numbers
- Squiz SelfMemberReferenceSniff can no longer get into an infinite loop when checking a static call with a namespace
- Thanks to Andy Grunwald for the patch
- Fixed bug #19699 : Generic.Files.LineLength giving false positives when tab-width is used
- Fixed bug #19726 : Wrong number of spaces expected after instanceof static
- Fixed bug #19727 : PSR2: no error reported when using } elseif {
1.4.2 - 2012-11-09
- PHP_CodeSniffer can now be installed using Composer
- Require
squizlabs/php_codesnifferin yourcomposer.jsonfile - Thanks to Rob Bast, Stephen Rees-Carter, Stefano Kowalke and Ivan Habunek for help with this
- Require
- Squiz BlockCommentSniff and InlineCommentSniff no longer report errors for trait block comments
- Squiz SelfMemberReferenceSniff now supports namespaces
- Thanks to Andy Grunwald for the patch
- Squiz FileCommentSniff now uses tag names inside the error codes for many messages
- This allows you to exclude specific missing, out of order etc., tags
- Squiz SuperfluousWhitespaceSniff now has an option to ignore blank lines
- This will stop errors being reported for lines that contain only whitespace
- Set the ignoreBlankLines property to TRUE in your ruleset.xml file to enable this
- PSR2 no longer reports errors for whitespace at the end of blank lines
- Fixed gitblame report not working on Windows
- Thanks to Rogerio Prado de Jesus
- Fixed an incorrect error in Squiz OperatorSpacingSniff for default values inside a closure definition
- Fixed bug #19691 : SubversionPropertiesSniff fails to find missing properties
- Thanks to Kevin Winahradsky for the patch
- Fixed bug #19692 : DisallowMultipleAssignments is triggered by a closure
- Fixed bug #19693 : exclude-patterns no longer work on specific messages
- Fixed bug #19694 : Squiz.PHP.LowercasePHPFunctions incorrectly matches return by ref functions
1.4.1 - 2012-11-02
- All ignore patterns have been reverted to being checked against the absolute path of a file
- Patterns can be specified to be relative in a ruleset.xml file, but nowhere else
- e.g.,
<exclude-pattern type="relative">^tests/*</exclude-pattern>
- Added support for PHP tokenizing of T_INLINE_ELSE colons, so this token type is now available
- Custom sniffs that rely on looking for T_COLON tokens inside inline if statements must be changed to use the new token
- Fixes bug #19666 : PSR1.Files.SideEffects throws a notice Undefined index: scope_closer
- Messages can now be changed from errors to warnings (and vice versa) inside ruleset.xml files
- As you would with "message" and "severity", specify a "type" tag under a "rule" tag and set the value to "error" or "warning"
- PHP_CodeSniffer will now generate a warning on files that it detects have mixed line endings
- This warning has the code Internal.LineEndings.Mixed and can be overridden in a ruleset.xml file
- Thanks to Vit Brunner for help with this
- Sniffs inside PHP 5.3 namespaces are now supported, along with the existing underscore-style emulated namespaces
- For example: namespace MyStandard\Sniffs\Arrays; class ArrayDeclarationSniff implements \PHP_CodeSniffer_Sniff { ...
- Thanks to Till Klampaeckel for the patch
- Generic DuplicateClassNameSniff is no longer a multi-file sniff, so it won't max out your memory
- Multi-file sniff support should be considered deprecated as standard sniffs can now do the same thing
- Added Generic DisallowSpaceIndent to check that files are indented using tabs
- Added Generic OneClassPerFileSniff to check that only one class is defined in each file
- Thanks to Andy Grunwald for the contribution
- Added Generic OneInterfacePerFileSniff to check that only one interface is defined in each file
- Thanks to Andy Grunwald for the contribution
- Added Generic LowercasedFilenameSniff to check that filenames are lowercase
- Thanks to Andy Grunwald for the contribution
- Added Generic ClosingPHPTagSniff to check that each open PHP tag has a corresponding close tag
- Thanks to Andy Grunwald for the contribution
- Added Generic CharacterBeforePHPOpeningTagSniff to check that the open PHP tag is the first content in a file
- Thanks to Andy Grunwald for the contribution
- Fixed incorrect errors in Squiz OperatorBracketSniff and OperatorSpacingSniff for negative numbers in CASE statements
- Thanks to Arnout Boks for the patch
- Generic CamelCapsFunctionNameSniff no longer enforces exact case matching for PHP magic methods
- Generic CamelCapsFunctionNameSniff no longer throws errors for overridden SOAPClient methods prefixed with double underscores
- Thanks to Dorian Villet for the patch
- PEAR ValidFunctionNameSniff now supports traits
- PSR1 ClassDeclarationSniff no longer throws an error for non-namespaced code if PHP version is less than 5.3.0
- Fixed bug #19616 : Nested switches cause false error in PSR2
- Fixed bug #19629 : PSR2 error for inline comments on multi-line argument lists
- Fixed bug #19644 : Alternative syntax, e.g. if/endif triggers Inline Control Structure error
- Fixed bug #19655 : Closures reporting as multi-line when they are not
- Fixed bug #19675 : Improper indent of nested anonymous function bodies in a call
- Fixed bug #19685 : PSR2 catch-22 with empty third statement in for loop
- Fixed bug #19687 : Anonymous functions inside arrays marked as indented incorrectly in PSR2
1.4.0 - 2012-09-26
- Added PSR1 and PSR2 coding standards that can be used to check your code against these guidelines
- PHP 5.4 short array syntax is now detected and tokens are assigned to the open and close characters
- New tokens are T_OPEN_SHORT_ARRAY and T_CLOSE_SHORT_ARRAY as PHP does not define its own
- Added the ability to explain a coding standard by listing the sniffs that it includes
- The sniff list includes all imported and native sniffs
- Explain a standard by using the
-eand--standard=[standard]command line arguments - E.g.,
phpcs -e --standard=Squiz - Thanks to Ben Selby for the idea
- Added report to show results using notify-send
- Use --report=notifysend to generate the report
- Thanks to Christian Weiske for the contribution
- The JS tokenizer now recognises RETURN as a valid closer for CASE and DEFAULT inside switch statements
- AbstractPatternSniff now sets the ignoreComments option using a public var rather than through the constructor
- This allows the setting to be overwritten in ruleset.xml files
- Old method remains for backwards compatibility
- Generic LowerCaseConstantSniff and UpperCaseConstantSniff no longer report errors on classes named True, False or Null
- PEAR ValidFunctionNameSniff no longer enforces exact case matching for PHP magic methods
- Squiz SwitchDeclarationSniff now allows RETURN statements to close a CASE or DEFAULT statement
- Squiz BlockCommentSniff now correctly reports an error for blank lines before blocks at the start of a control structure
- Fixed a PHP notice generated when loading custom array settings from a ruleset.xml file
- Fixed bug #17908 : CodeSniffer does not recognise optional @params
- Thanks to Pete Walker for the patch
- Fixed bug #19538 : Function indentation code sniffer checks inside short arrays
- Fixed bug #19565 : Non-Executable Code Sniff Broken for Case Statements with both return and break
- Fixed bug #19612 : Invalid @package suggestion
1.3.6 - 2012-08-08
- Memory usage has been dramatically reduced when using the summary report
- Reduced memory is only available when displaying a single summary report to the screen
- PHP_CodeSniffer will not generate any messages in this case, storing only error counts instead
- Impact is most notable with very high error and warning counts
- Significantly improved the performance of Squiz NonExecutableCodeSniff
- Ignore patterns now check the relative path of a file based on the dir being checked
- Allows ignore patterns to become more generic as the path to the code is no longer included when checking
- Thanks to Kristof Coomans for the patch
- Sniff settings can now be changed by specifying a special comment format inside a file
- e.g., // @codingStandardsChangeSetting PEAR.Functions.FunctionCallSignature allowMultipleArguments false
- If you change a setting, don't forget to change it back
- Added Generic EndFileNewlineSniff to ensure PHP files end with a newline character
- PEAR FunctionCallSignatureSniff now includes a setting to force one argument per line in multi-line calls
- Set allowMultipleArguments to false
- Squiz standard now enforces one argument per line in multi-line function calls
- Squiz FunctionDeclarationArgumentSpacingSniff now supports closures
- Squiz OperatorSpacingSniff no longer throws an error for negative values inside an inline THEN statement
- Thanks to Klaus Purer for the patch
- Squiz FunctionCommentSniff now throws an error for not closing a comment with */
- Thanks to Klaus Purer for the patch
- Summary report no longer shows two lines of PHP_Timer output when showing sources
- Fixed undefined variable error in PEAR FunctionCallSignatureSniff for lines with no indent
- Fixed bug #19502 : Generic.Files.LineEndingsSniff fails if no new-lines in file
- Fixed bug #19508 : switch+return: Closing brace indented incorrectly
- Fixed bug #19532 : The PSR-2 standard don't recognize Null in class names
- Fixed bug #19546 : Error thrown for __call() method in traits
1.3.5 - 2012-07-12
- Added Generic CamelCapsFunctionNameSniff to just check if function and method names use camel caps
- Does not allow underscore prefixes for private/protected methods
- Defaults to strict checking, where two uppercase characters can not be next to each other
- Strict checking can be disabled in a ruleset.xml file
- Squiz FunctionDeclarationArgumentSpacing now has a setting to specify how many spaces should surround equals signs
- Default remains at 0
- Override the equalsSpacing setting in a ruleset.xml file to change
- Squiz ClassDeclarationSniff now throws errors for > 1 space before extends/implements class name with ns separator
- Squiz standard now warns about deprecated functions using Generic DeprecatedFunctionsSniff
- PEAR FunctionDeclarationSniff now reports an error for multiple spaces after the FUNCTION keyword and around USE
- PEAR FunctionDeclarationSniff now supports closures
- Squiz MultiLineFunctionDeclarationSniff now supports closures
- Exclude rules written for Unix systems will now work correctly on Windows
- Thanks to Walter Tamboer for the patch
- The PHP tokenizer now recognises T_RETURN as a valid closer for T_CASE and T_DEFAULT inside switch statements
- Fixed duplicate message codes in Generic OpeningFunctionBraceKernighanRitchieSniff
- Fixed bug #18651 : PHPUnit Test cases for custom standards are not working on Windows
- Fixed bug #19416 : Shorthand arrays cause bracket spacing errors
- Fixed bug #19421 : phpcs doesn't recognize ${x} as equivalent to $x
- Fixed bug #19428 : PHPCS Report "hgblame" doesn't support windows paths
- Thanks to Justin Rovang for the patch
- Fixed bug #19448 : Problem with detecting remote standards
- Fixed bug #19463 : Anonymous functions incorrectly being flagged by NonExecutableCodeSniff
- Fixed bug #19469 : PHP_CodeSniffer_File::getMemberProperties() sets wrong scope
- Fixed bug #19471 : phpcs on Windows, when using Zend standard, doesn't catch problems
- Thanks to Ivan Habunek for the patch
- Fixed bug #19478 : Incorrect indent detection in PEAR standard
- Thanks to Shane Auckland for the patch
- Fixed bug #19483 : Blame Reports fail with space in directory name
1.3.4 - 2012-05-17
- Added missing package.xml entries for new Generic FixmeSniff
- Thanks to Jaroslav Hanslík for the patch
- Expected indents for PEAR ScopeClosingBraceSniff and FunctionCallSignatureSniff can now be set in ruleset files
- Both sniffs use a variable called "indent"
- Thanks to Thomas Despoix for the patch
- Standards designed to be installed in the PHPCS Standards dir will now work outside this dir as well
- In particular, allows the Drupal CS to work without needing to symlink it into the PHPCS install
- Thanks to Peter Philipp for the patch
- Rule references for standards, directories and specific sniffs can now be relative in ruleset.xml files
- For example:
ref="../MyStandard/Sniffs/Commenting/DisallowHashCommentsSniff.php"
- For example:
- Symlinked standards now work correctly, allowing aliasing of installed standards (request #19417)
- Thanks to Tom Klingenberg for the patch
- Squiz ObjectInstantiationSniff now allows objects to be returned without assigning them to a variable
- Added Squiz.Commenting.FileComment.MissingShort error message for file comments that only contains tags
- Also stops undefined index errors being generated for these comments
- Debug option -vv now shows tokenizer status for CSS files
- Added support for new gjslint error formats
- Thanks to Meck for the patch
- Generic ScopeIndentSniff now allows comment indents to not be exact even if the exact flag is set
- The start of the comment is still checked for exact indentation as normal
- Fixed an issue in AbstractPatternSniff where comments were not being ignored in some cases
- Fixed an issue in Zend ClosingTagSniff where the closing tag was not always being detected correctly
- Thanks to Jonathan Robson for the patch
- Fixed an issue in Generic FunctionCallArgumentSpacingSniff where closures could cause incorrect errors
- Fixed an issue in Generic UpperCaseConstantNameSniff where errors were incorrectly reported on goto statements
- Thanks to Tom Klingenberg for the patch
- PEAR FileCommentSniff and ClassCommentSniff now support author emails with a single character in the local part
- E.g.,
a@me.com - Thanks to Denis Shapkin for the patch
- E.g.,
- Fixed bug #19290 : Generic indent sniffer fails for anonymous functions
- Fixed bug #19324 : Setting show_warnings configuration option does not work
- Fixed bug #19354 : Not recognizing references passed to method
- Fixed bug #19361 : CSS tokenizer generates errors when PHP embedded in CSS file
- Fixed bug #19374 : HEREDOC/NOWDOC Indentation problems
- Fixed bug #19381 : traits and indentations in traits are not handled properly
- Fixed bug #19394 : Notice in NonExecutableCodeSniff
- Fixed bug #19402 : Syntax error when executing phpcs on Windows with parens in PHP path
- Thanks to Tom Klingenberg for the patch
- Fixed bug #19411 : magic method error on __construct()
- The fix required a rewrite of AbstractScopeSniff, so please test any sniffs that extend this class
- Fixed bug #19412 : Incorrect error about assigning objects to variables when inside inline IF
- Fixed bug #19413 : PHP_CodeSniffer thinks I haven't used a parameter when I have
- Fixed bug #19414 : PHP_CodeSniffer seems to not track variables correctly in heredocs
1.3.3 - 2012-02-07
- Added new Generic FixmeSniff that shows error messages for all FIXME comments left in your code
- Thanks to Sam Graham for the contribution
- The maxPercentage setting in the Squiz CommentedOutCodeSniff can now be overridden in a ruleset.xml file
- Thanks to Volker Dusch for the patch
- The Checkstyle and XML reports now use XMLWriter
- Only change in output is that empty file tags are no longer produced for files with no violations
- Thanks to Sebastian Bergmann for the patch
- Added PHP_CodeSniffer_Tokens::$bracketTokens to give sniff writers fast access to open and close bracket tokens
- Fixed an issue in AbstractPatternSniff where EOL tokens were not being correctly checked in some cases
- PHP_CodeSniffer_File::getTokensAsString() now detects incorrect length value (request #19313)
- Fixed bug #19114 : CodeSniffer checks extension even for single file
- Fixed bug #19171 : Show sniff codes option is ignored by some report types
- Thanks to Dominic Scheirlinck for the patch
- Fixed bug #19188 : Lots of PHP Notices when analyzing the Symfony framework
- First issue was list-style.. lines in CSS files not properly adjusting open/close bracket positions
- Second issue was notices caused by bug #19137
- Fixed bug #19208 : UpperCaseConstantName reports class members
- Was also a problem with LowerCaseConstantName as well
- Fixed bug #19256 : T_DOC_COMMENT in CSS files breaks ClassDefinitionNameSpacingSniff
- Thanks to Klaus Purer for the patch
- Fixed bug #19264 : Squiz.PHP.NonExecutableCode does not handle RETURN in CASE without BREAK
- Fixed bug #19270 : DuplicateClassName does not handle namespaces correctly
- Fixed bug #19283 : CSS @media rules cause false positives
- Thanks to Klaus Purer for the patch
1.3.2 - 2011-12-01
- Added Generic JSHintSniff to run jshint.js over a JS file and report warnings
- Set jshint path using phpcs --config-set jshint_path /path/to/jshint-rhino.js
- Set rhino path using phpcs --config-set rhino_path /path/to/rhino
- Thanks to Alexander Weiß for the contribution
- Nowdocs are now tokenized using PHP_CodeSniffer specific T_NOWDOC tokens for easier identification
- Generic UpperCaseConstantNameSniff no longer throws errors for namespaces
- Thanks to Jaroslav Hanslík for the patch
- Squiz NonExecutableCodeSniff now detects code after thrown exceptions
- Thanks to Jaroslav Hanslík for the patch
- Squiz OperatorSpacingSniff now ignores references
- Thanks to Jaroslav Hanslík for the patch
- Squiz FunctionCommentSniff now reports a missing function comment if it finds a standard code comment instead
- Squiz FunctionCommentThrownTagSniff no longer reports errors if it can't find a function comment
- Fixed unit tests not running under Windows
- Thanks to Jaroslav Hanslík for the patch
- Fixed bug #18964 : "$stackPtr must be of type T_VARIABLE" on heredocs and nowdocs
- Fixed bug #18973 : phpcs is looking for variables in a nowdoc
- Fixed bug #18974 : Blank line causes "Multi-line function call not indented correctly"
- Adds new error message to ban empty lines in multi-line function calls
- Fixed bug #18975 : "Closing parenthesis must be on a line by itself" also causes indentation error
- All report file command line arguments now work with relative paths (request #17240)
- The extensions command line argument now supports multi-part file extensions (request #17227)
- Added report type --report=hgblame to show number of errors/warnings committed by authors in a Mercurial repository
- Has the same functionality as the svnblame report
- Thanks to Ben Selby for the patch
- Added T_BACKTICK token type to make detection of backticks easier (request #18799)
- Added pattern matching support to Generic ForbiddenFunctionsSniff
- If you are extending it and overriding register() or addError() you will need to review your sniff
- Namespaces are now recognised as scope openers, although they do not require braces (request #18043)
- Added new ByteOrderMarkSniff to Generic standard (request #18194)
- Throws an error if a byte order mark is found in any PHP file
- Thanks to Piotr Karas for the contribution
- PHP_Timer output is no longer included in reports when being written to a file (request #18252)
- Also now shown for all report types if nothing is being printed to the screen
- Generic DeprecatedFunctionSniff now reports functions as deprecated and not simply forbidden (request #18288)
- PHPCS now accepts file contents from STDIN (request #18447)
- Example usage:
cat temp.php | phpcs [options]-OR-phpcs [options] < temp.php - Not every sniff will work correctly due to the lack of a valid file path
- Example usage:
- PHP_CodeSniffer_Exception no longer extends PEAR_Exception (request #18483)
- PEAR_Exception added a requirement that PEAR had to be installed
- PHP_CodeSniffer is not used as a library, so unlikely to have any impact
- PEAR FileCommentSniff now allows GIT IDs in the version tag (request #14874)
- AbstractVariableSniff now supports heredocs
- Also includes some variable detection fixes
- Thanks to Sam Graham for the patch
- Squiz FileCommentSniff now enforces rule that package names cannot start with the word Squiz
- MySource AssignThisSniff now allows "this" to be assigned to the private var _self
- PEAR ClassDeclaration sniff now supports indentation checks when using the alternate namespace syntax
- PEAR.Classes.ClassDeclaration.SpaceBeforeBrace message now contains 2 variables instead of 1
- Sniff allows overriding of the default indent level, which is set to 4
- Fixes bug #18933 : Alternative namespace declaration syntax confuses scope sniffs
- Fixed issue in Squiz FileCommentSniff where suggested package name was the same as the incorrect package name
- Fixed some issues with Squiz ArrayDeclarationSniff when using function calls in array values
- Fixed doc generation so it actually works again
- Also now works when being run from an SVN checkout as well as when installed as a PEAR package
- Should fix bug #18949 : Call to private method from static
- Fixed bug #18465 : "self::" does not work in lambda functions
- Also corrects conversion of T_FUNCTION tokens to T_CLOSURE, which was not fixing token condition arrays
- Fixed bug #18543 : CSS Tokenizer deletes too many #
- Fixed bug #18624 : @throws namespace problem
- Thanks to Gavin Davies for the patch
- Fixed bug #18628 : Generic.Files.LineLength gives incorrect results with Windows line-endings
- Fixed bug #18633 : CSS Tokenizer doesn't replace T_LIST tokens inside some styles
- Fixed bug #18657 : anonymous functions wrongly indented
- Fixed bug #18670 : UpperCaseConstantNameSniff fails on dynamic retrieval of class constant
- Fixed bug #18709 : Code sniffer sniffs file even if it's in --ignore
- Thanks to Artem Lopata for the patch
- Fixed bug #18762 : Incorrect handling of define and constant in UpperCaseConstantNameSniff
- Thanks to Thomas Baker for the patch
- Fixed bug #18769 : CSS Tokenizer doesn't replace T_BREAK tokens inside some styles
- Fixed bug #18835 : Unreachable errors of inline returns of closure functions
- Thanks to Patrick Schmidt for the patch
- Fixed bug #18839 : Fix miscount of warnings in
AbstractSniffUnitTest.php- Thanks to Sam Graham for the patch
- Fixed bug #18844 : Generic_Sniffs_CodeAnalysis_UnusedFunctionParameterSniff with empty body
- Thanks to Dmitri Medvedev for the patch
- Fixed bug #18847 : Running Squiz_Sniffs_Classes_ClassDeclarationSniff results in PHP notice
- Fixed bug #18868 : jslint+rhino: errors/warnings not detected
- Thanks to Christian Weiske for the patch
- Fixed bug #18879 : phpcs-svn-pre-commit requires escapeshellarg
- Thanks to Bjorn Katuin for the patch
- Fixed bug #18951 : weird behaviour with closures and multi-line use () params
- Add a new token T_CLOSURE that replaces T_FUNCTION if the function keyword is anonymous
- Many Squiz sniffs no longer report errors when checking closures; they are now ignored
- Fixed some error messages in PEAR MultiLineConditionSniff that were not using placeholders for message data
- AbstractVariableSniff now correctly finds variable names wrapped with curly braces inside double quoted strings
- PEAR FunctionDeclarationSniff now ignores arrays in argument default values when checking multi-line declarations
- Fixed bug #18200 : Using custom named ruleset file as standard no longer works
- Fixed bug #18196 : PEAR MultiLineCondition.SpaceBeforeOpenBrace not consistent with newline chars
- Fixed bug #18204 : FunctionCommentThrowTag picks wrong exception type when throwing function call
- Fixed bug #18222 : Add __invoke method to PEAR standard
- Fixed bug #18235 : Invalid error generation in Squiz.Commenting.FunctionCommentThrowTag
- Fixed bug #18250 : --standard with relative path skips Standards' "implicit" sniffs
- Fixed bug #18274 : Multi-line IF and function call indent rules conflict
- Fixed bug #18282 : Squiz doesn't handle final keyword before function comments
- Thanks to Dave Perrett for the patch
- Fixed bug #18336 : Function isUnderscoreName gives PHP notices
- You can now print multiple reports for each run and print each to the screen or a file (request #12434)
- Format is
--report-[report][=file](e.g.,--report-xml=out.xml) - Printing to screen is done by leaving
[file]empty (e.g.,--report-xml) - Multiple reports can be specified in this way (e.g.,
--report-summary --report-xml=out.xml) - The standard
--reportand--report-filecommand line arguments are unchanged
- Format is
- Added
-dcommand line argument to setphp.inisettings while running (request #17244)- Usage is:
phpcs -d memory_limit=32M -d ... - Thanks to Ben Selby for the patch
- Usage is:
- Added -p command line argument to show progress during a run
- Dot means pass, E means errors found, W means only warnings found and S means skipped file
- Particularly good for runs where you are checking more than 100 files
- Enable by default with --config-set show_progress 1
- Will not print anything if you are already printing verbose output
- This has caused a big change in the way PHP_CodeSniffer processes files (API changes around processing)
- You can now add exclude rules for individual sniffs or error messages (request #17903)
- Only available when using a ruleset.xml file to specify rules
- Uses the same exclude-pattern tags as normal but allows them inside rule tags
- Using the -vvv option will now print a list of sniffs executed for each file and how long they took to process
- Added Generic ClosureLinterSniff to run Google's gjslint over your JS files
- The XML and CSV reports now include the severity of the error (request #18165)
- The Severity column in the CSV report has been renamed to Type, and a new Severity column added for this
- Fixed issue with Squiz FunctionCommentSniff reporting incorrect type hint when default value uses namespace
- Thanks to Anti Veeranna for the patch
- Generic FileLengthSniff now uses iconv_strlen to check line length if an encoding is specified (request #14237)
- Generic UnnecessaryStringConcatSniff now allows strings to be combined to form a PHP open or close tag
- Squiz SwitchDeclarationSniff no longer reports indentation errors for BREAK statements inside IF conditions
- Interactive mode now always prints the full error report (ignores command line)
- Improved regular expression detection in JavaScript files
- Added new T_TYPEOF token that can be used to target the typeof JS operator
- Fixes bug #17611 : Regular expression tokens not recognised
- Squiz ScopeIndentSniff removed
- Squiz standard no longer requires additional indents between ob_* methods
- Also removed Squiz OutputBufferingIndentSniff that was checking the same thing
- PHP_CodeSniffer_File::getMemberProperties() performance improved significantly
- Improves performance of Squiz ValidVariableNameSniff significantly
- Squiz OperatorSpacingSniff performance improved significantly
- Squiz NonExecutableCodeSniff performance improved significantly
- Will throw duplicate errors in some cases now, but these should be rare
- MySource IncludeSystemSniff performance improved significantly
- MySource JoinStringsSniff no longer reports an error when using join() on a named JS array
- Warnings are now reported for each file when they cannot be opened instead of stopping the script
- Hide warnings with the -n command line argument
- Can override the warnings using the code Internal.DetectLineEndings
- Fixed bug #17693 : issue with pre-commit hook script with filenames that start with v
- Fixed bug #17860 : isReference function fails with references in array
- Thanks to Lincoln Maskey for the patch
- Fixed bug #17902 : Cannot run tests when tests are symlinked into tests dir
- Thanks to Matt Button for the patch
- Fixed bug #17928 : Improve error message for Generic_Sniffs_PHP_UpperCaseConstantSniff
- Thanks to Stefano Kowalke for the patch
- Fixed bug #18039 : JS Tokenizer crash when ] is last character in file
- Fixed bug #18047 : Incorrect handling of namespace aliases as constants
- Thanks to Dmitri Medvedev for the patch
- Fixed bug #18072 : Impossible to exclude path from processing when symlinked
- Fixed bug #18073 : Squiz.PHP.NonExecutableCode fault
- Fixed bug #18117 : PEAR coding standard: Method constructor not sniffed as a function
- Fixed bug #18135 : Generic FunctionCallArgumentSpacingSniff reports function declaration errors
- Fixed bug #18140 : Generic scope indent in exact mode: strange expected/found values for switch
- Fixed bug #18145 : Sniffs are not loaded for custom ruleset file
- Thanks to Scott McCammon for the patch
- Fixed bug #18152 : While and do-while with AbstractPatternSniff
- Fixed bug #18191 : Squiz.PHP.LowercasePHPFunctions does not work with new Date()
- Fixed bug #18193 : CodeSniffer doesn't reconize CR (\r) line endings
- Added exclude pattern support to ruleset.xml file so you can specify ignore patterns in a standard (request #17683)
- Use new exclude-pattern tags to include the ignore rules into your ruleset.xml file
- See CodeSniffer/Standards/PHPCS/ruleset.xml for an example
- Added new --encoding command line argument to specify the encoding of the files being checked
- When set to utf-8, stops the XML-based reports from double-encoding
- When set to something else, helps the XML-based reports encode to utf-8
- Default value is iso-8859-1 but can be changed with
--config-set encoding [value]
- The report is no longer printed to screen when using the --report-file command line option (request #17467)
- If you want to print it to screen as well, use the -v command line argument
- The SVN and GIT blame reports now also show percentage of reported errors per author (request #17606)
- Thanks to Ben Selby for the patch
- Updated the SVN pre-commit hook to work with the new severity levels feature
- Generic SubversionPropertiesSniff now allows properties to have NULL values (request #17682)
- A null value indicates that the property should exist but the value should not be checked
- Generic UpperCaseConstantName Sniff now longer complains about the PHPUnit_MAIN_METHOD constant (request #17798)
- Squiz FileComment sniff now checks JS files as well as PHP files
- Squiz FunctionCommentSniff now supports namespaces in type hints
- Fixed a problem in Squiz OutputBufferingIndentSniff where block comments were reported as not indented
- Fixed bug #17092 : Problems with utf8_encode and htmlspecialchars with non-ascii chars
- Use the new --encoding=utf-8 command line argument if your files are utf-8 encoded
- Fixed bug #17629 : PHP_CodeSniffer_Tokens::$booleanOperators missing T_LOGICAL_XOR
- Thanks to Matthew Turland for the patch
- Fixed bug #17699 : Fatal error generating code coverage with PHPUnit 5.3.0RC1
- Fixed bug #17718 : Namespace 'use' statement: used global class name is recognized as constant
- Fixed bug #17734 : Generic SubversionPropertiesSniff complains on non SVN files
- Fixed bug #17742 : EmbeddedPhpSniff reacts negatively to file without closing PHP tag
- Fixed bug #17823 : Notice: Please no longer include
PHPUnit/Framework.php
- All
CodingStandard.phpfiles have been replaced byruleset.xmlfiles- Custom standards will need to be converted over to this new format to continue working
- You can specify a path to your own custom ruleset.xml file by using the --standard command line arg
- e.g., phpcs --standard=/path/to/my/ruleset.xml
- Added a new report type --report=gitblame to show how many errors and warnings were committed by each author
- Has the same functionality as the svnblame report
- Thanks to Ben Selby for the patch
- A new token type T_DOLLAR has been added to allow you to sniff for variable variables (feature request #17095)
- Thanks to Ian Young for the patch
- JS tokenizer now supports T_POWER (^) and T_MOD_EQUAL (%=) tokens (feature request #17441)
- If you have PHP_Timer installed, you'll now get a time/memory summary at the end of a script run
- Only happens when printing reports that are designed to be read on the command line
- Added Generic DeprecatedFunctionsSniff to warn about the use of deprecated functions (feature request #16694)
- Thanks to Sebastian Bergmann for the patch
- Added Squiz LogicalOperatorSniff to ensure that logical operators are surrounded by single spaces
- Added MySource ChannelExceptionSniff to ensure action files only throw ChannelException
- Added new method getClassProperties() for sniffs to use to determine if a class is abstract and/or final
- Thanks to Christian Kaps for the patch
- Generic UpperCaseConstantSniff no longer throws errors about namespaces
- Thanks to Christian Kaps for the patch
- Squiz OperatorBracketSniff now correctly checks value assignments in arrays
- Squiz LongConditionClosingCommentSniff now requires a comment for long CASE statements that use curly braces
- Squiz LongConditionClosingCommentSniff now requires an exact comment match on the brace
- MySource IncludeSystemSniff now ignores DOMDocument usage
- MySource IncludeSystemSniff no longer requires inclusion of systems that are being implemented
- Removed found and expected messages from Squiz ConcatenationSpacingSniff because they were messy and not helpful
- Fixed a problem where Generic CodeAnalysisSniff could show warnings if checking multi-line strings
- Fixed error messages in Squiz ArrayDeclarationSniff reporting incorrect number of found and expected spaces
- Fixed bug #17048 : False positive in Squiz_WhiteSpace_ScopeKeywordSpacingSniff
- Fixed bug #17054 : phpcs more strict than PEAR CS regarding function parameter spacing
- Fixed bug #17096 : Notice: Undefined index:
scope_conditioninScopeClosingBraceSniff.php- Moved PEAR.Functions.FunctionCallArgumentSpacing to Generic.Functions.FunctionCallArgumentSpacing
- Fixed bug #17144 : Deprecated: Function eregi() is deprecated
- Fixed bug #17236 : PHP Warning due to token_get_all() in DoubleQuoteUsageSniff
- Fixed bug #17243 : Alternate Switch Syntax causes endless loop of Notices in SwitchDeclaration
- Fixed bug #17313 : Bug with switch case structure
- Fixed bug #17331 : Possible parse error: interfaces may not include member vars
- Fixed bug #17337 : CSS tokenizer fails on quotes urls
- Fixed bug #17420 : Uncaught exception when comment before function brace
- Fixed bug #17503 : closures formatting is not supported
- The core PHP_CodeSniffer_File methods now understand the concept of closures (feature request #16866)
- Thanks to Christian Kaps for the sample code
- Sniffs can now specify violation codes for each error and warning they add
- Future versions will allow you to override messages and severities using these codes
- Specifying a code is optional, but will be required if you wish to support overriding
- All reports have been broken into separate classes
- Command line usage and report output remains the same
- Thanks to Gabriele Santini for the patch
- Added an interactive mode that can be enabled using the -a command line argument
- Scans files and stops when it finds a file with errors
- Waits for user input to recheck the file (hopefully you fixed the errors) or skip the file
- Useful for very large code bases where full rechecks take a while
- The reports now show the correct number of errors and warnings found
- The isCamelCaps method now allows numbers in class names
- The JS tokenizer now correctly identifies boolean and bitwise AND and OR tokens
- The JS tokenizer now correctly identifies regular expressions used in conditions
- PEAR ValidFunctionNameSniff now ignores closures
- Squiz standard now uses the PEAR setting of 85 chars for LineLengthSniff
- Squiz ControlStructureSpacingSniff now ensure there are no spaces around parentheses
- Squiz LongConditionClosingCommentSniff now checks for comments at the end of try/catch statements
- Squiz LongConditionClosingCommentSniff now checks validity of comments for short structures if they exist
- Squiz IncrementDecrementUsageSniff now has better checking to ensure it only looks at simple variable assignments
- Squiz PostStatementCommentSniff no longer throws errors for end function comments
- Squiz InlineCommentSniff no longer throws errors for end function comments
- Squiz OperatorBracketSniff now allows simple arithmetic operations in SWITCH conditions
- Squiz ValidFunctionNameSniff now ignores closures
- Squiz MethodScopeSniff now ignores closures
- Squiz ClosingDeclarationCommentSniff now ignores closures
- Squiz GlobalFunctionSniff now ignores closures
- Squiz DisallowComparisonAssignmentSniff now ignores the assigning of arrays
- Squiz DisallowObjectStringIndexSniff now allows indexes that contain dots and reserved words
- Squiz standard now throws nesting level and cyclomatic complexity errors at much higher levels
- Squiz CommentedOutCodeSniff now ignores common comment framing characters
- Squiz ClassCommentSniff now ensures the open comment tag is the only content on the first line
- Squiz FileCommentSniff now ensures the open comment tag is the only content on the first line
- Squiz FunctionCommentSniff now ensures the open comment tag is the only content on the first line
- Squiz VariableCommentSniff now ensures the open comment tag is the only content on the first line
- Squiz NonExecutableCodeSniff now warns about empty return statements that are not required
- Removed ForbiddenStylesSniff from Squiz standard
- It is now in the MySource standard as BrowserSpecificStylesSniff
- New BrowserSpecificStylesSniff ignores files with browser-specific suffixes
- MySource IncludeSystemSniff no longer throws errors when extending the Exception class
- MySource IncludeSystemSniff no longer throws errors for the abstract widget class
- MySource IncludeSystemSniff and UnusedSystemSniff now allow includes inside IF statements
- MySource IncludeSystemSniff no longer throws errors for included widgets inside methods
- MySource GetRequestDataSniff now throws errors for using $_FILES
- MySource CreateWidgetTypeCallbackSniff now allows return statements in nested functions
- MySource DisallowSelfActionsSniff now ignores abstract classes
- Fixed a problem with the SVN pre-commit hook for PHP versions without vertical whitespace regex support
- Fixed bug #16740 : False positives for heredoc strings and unused parameter sniff
- Fixed bug #16794 : ValidLogicalOperatorsSniff doesn't report operators not in lowercase
- Fixed bug #16804 : Report filename is shortened too much
- Fixed bug #16821 : Bug in Squiz_Sniffs_WhiteSpace_OperatorSpacingSniff
- Thanks to Jaroslav Hanslík for the patch
- Fixed bug #16836 : Notice raised when using semicolon to open case
- Fixed bug #16855 : Generic standard sniffs incorrectly for define() method
- Fixed bug #16865 : Two bugs in Squiz_Sniffs_WhiteSpace_OperatorSpacingSniff
- Thanks to Jaroslav Hanslík for the patch
- Fixed bug #16902 : Inline If Declaration bug
- Fixed bug #16960 : False positive for late static binding in Squiz/ScopeKeywordSpacingSniff
- Thanks to Jakub Tománek for the patch
- Fixed bug #16976 : The phpcs attempts to process symbolic links that don't resolve to files
- Fixed bug #17017 : Including one file in the files sniffed alters errors reported for another file
- Added a new report type --report=svnblame to show how many errors and warnings were committed by each author
- Also shows the percentage of their code that are errors and warnings
- Requires you to have the SVN command in your path
- Make sure SVN is storing usernames and passwords (if required) or you will need to enter them for each file
- You can also use the -s command line argument to see the different types of errors authors are committing
- You can use the -v command line argument to see all authors, even if they have no errors or warnings
- Added a new command line argument --report-width to allow you to set the column width of screen reports
- Reports won't accept values less than 70 or else they get too small
- Can also be set via a config var: phpcs --config-set report_width 100
- You can now get PHP_CodeSniffer to ignore a whole file by adding @codingStandardsIgnoreFile in the content
- If you put it in the first two lines the file won't even be tokenized, so it will be much quicker
- Reports now print their file lists in alphabetical order
- PEAR FunctionDeclarationSniff now reports error for incorrect closing bracket placement in multi-line definitions
- Added Generic CallTimePassByReferenceSniff to prohibit the passing of variables into functions by reference
- Thanks to Florian Grandel for the contribution
- Added Squiz DisallowComparisonAssignmentSniff to ban the assignment of comparison values to a variable
- Added Squiz DuplicateStyleDefinitionSniff to check for duplicate CSS styles in a single class block
- Squiz ArrayDeclarationSniff no longer checks the case of array indexes because that is not its job
- Squiz PostStatementCommentSniff now allows end comments for class member functions
- Squiz InlineCommentSniff now supports the checking of JS files
- MySource CreateWidgetTypeCallbackSniff now allows the callback to be passed to another function
- MySource CreateWidgetTypeCallbackSniff now correctly ignores callbacks used inside conditions
- Generic MultipleStatementAlignmentSniff now enforces a single space before equals sign if max padding is reached
- Fixed a problem in the JS tokenizer where regular expressions containing // were not converted correctly
- Fixed a problem tokenizing CSS files where multiple ID targets on a line would look like comments
- Fixed a problem tokenizing CSS files where class names containing a colon looked like style definitions
- Fixed a problem tokenizing CSS files when style statements had empty url() calls
- Fixed a problem tokenizing CSS colours with the letter E in first half of the code
- Squiz ColonSpacingSniff now ensures it is only checking style definitions in CSS files and not class names
- Squiz DisallowComparisonAssignmentSniff no longer reports errors when assigning the return value of a function
- CSS tokenizer now correctly supports multi-line comments
- When only the case of var names differ for function comments, the error now indicates the case is different
- Fixed an issue with Generic UnnecessaryStringConcatSniff where it incorrectly suggested removing a concat
- Fixed bug #16530 : ScopeIndentSniff reports false positive
- Fixed bug #16533 : Duplicate errors and warnings
- Fixed bug #16563 : Check file extensions problem in phpcs-svn-pre-commit
- Thanks to Kaijung Chen for the patch
- Fixed bug #16592 : Object operator indentation incorrect when first operator is on a new line
- Fixed bug #16641 : Notice output
- Fixed bug #16682 : Squiz_Sniffs_Strings_DoubleQuoteUsageSniff reports string "\0" as invalid
- Fixed bug #16683 : Typing error in PHP_CodeSniffer_CommentParser_AbstractParser
- Fixed bug #16684 : Bug in Squiz_Sniffs_PHP_NonExecutableCodeSniff
- Fixed bug #16692 : Spaces in paths in Squiz_Sniffs_Debug_JavaScriptLintSniff
- Thanks to Jaroslav Hanslík for the patch
- Fixed bug #16696 : Spelling error in MultiLineConditionSniff
- Fixed bug #16697 : MultiLineConditionSniff incorrect result with inline IF
- Fixed bug #16698 : Notice in JavaScript Tokenizer
- Fixed bug #16736 : Multi-files sniffs aren't processed when FILE is a single directory
- Thanks to Alexey Shein for the patch
- Fixed bug #16792 : Bug in Generic_Sniffs_PHP_ForbiddenFunctionsSniff
- Installed standards are now favoured over custom standards when using the cmd line arg with relative paths
- Unit tests now use a lot less memory while running
- Squiz standard now uses Generic EmptyStatementSniff but throws errors instead of warnings
- Squiz standard now uses Generic UnusedFunctionParameterSniff
- Removed unused ValidArrayIndexNameSniff from the Squiz standard
- Fixed bug #16424 : SubversionPropertiesSniff print PHP Warning
- Fixed bug #16450 : Constant
PHP_CODESNIFFER_VERBOSITYalready defined (unit tests) - Fixed bug #16453 : function declaration long line splitted error
- Fixed bug #16482 : phpcs-svn-pre-commit ignores extensions parameter
- You can now use @codingStandardsIgnoreStart and @...End comments to suppress messages (feature request #14002)
- A warning is now included for files without any code when short_open_tag is set to Off (feature request #12952)
- You can now use relative paths to your custom standards with the --standard cmd line arg (feature request #14967)
- You can now override magic methods and functions in PEAR ValidFunctionNameSniff (feature request #15830)
- MySource IncludeSystemSniff now recognises widget action classes
- MySource IncludeSystemSniff now knows about unit test classes and changes rules accordingly
- Test suite can now be run using the full path to
AllTests.php(feature request #16179)
- Fixed bug #15980 : PHP_CodeSniffer change PHP current directory
- Thanks to Dolly Aswin Harahap for the patch
- Fixed bug #16001 : Notice triggered
- Fixed bug #16054 : phpcs-svn-pre-commit not showing any errors
- Fixed bug #16071 : Fatal error: Uncaught PHP_CodeSniffer_Exception
- Fixed bug #16170 : Undefined Offset -1 in
MultiLineConditionSniff.phpon line 68 - Fixed bug #16175 : Bug in Squiz-IncrementDecrementUsageSniff
- Reports that are output to a file now include a trailing newline at the end of the file
- Fixed sniff names not shown in -vvv token processing output
- Added Generic SubversionPropertiesSniff to check that specific svn props are set for files
- Thanks to Jack Bates for the contribution
- The PHP version check can now be overridden in classes that extend PEAR FileCommentSniff
- Thanks to Helgi Þormar Þorbjörnsson for the suggestion
- Added Generic ConstructorNameSniff to check for PHP4 constructor name usage
- Thanks to Leif Wickland for the contribution
- Squiz standard now supports multi-line function and condition sniffs from PEAR standard
- Squiz standard now uses Generic ConstructorNameSniff
- Added MySource GetRequestDataSniff to ensure REQUEST, GET and POST are not accessed directly
- Squiz OperatorBracketSniff now allows square brackets in simple unbracketed operations
- Fixed the incorrect tokenizing of multi-line block comments in CSS files
- Fixed bug #15383 : Uncaught PHP_CodeSniffer_Exception
- Fixed bug #15408 : An unexpected exception has been caught: Undefined offset: 2
- Fixed bug #15519 : Uncaught PHP_CodeSniffer_Exception
- Fixed bug #15624 : Pre-commit hook fails with PHP errors
- Fixed bug #15661 : Uncaught PHP_CodeSniffer_Exception
- Fixed bug #15722 : "declare(encoding = 'utf-8');" leads to "Missing file doc comment"
- Fixed bug #15910 : Object operator indention not calculated correctly
- PHP_CodeSniffer now has a CSS tokenizer for checking CSS files
- Added support for a new multi-file sniff that sniffs all processed files at once
- Added new output format --report=emacs to output errors using the emacs standard compile output format
- Thanks to Len Trigg for the contribution
- Reports can now be written to a file using the --report-file command line argument (feature request #14953)
- The report is also written to screen when using this argument
- The CheckStyle, CSV and XML reports now include a source for each error and warning (feature request #13242)
- A new report type --report=source can be used to show you the most common errors in your files
- Added new command line argument -s to show error sources in all reports
- Added new command line argument --sniffs to specify a list of sniffs to restrict checking to
- Uses the sniff source codes that are optionally displayed in reports
- Changed the max width of error lines from 80 to 79 chars to stop blank lines in the default windows cmd window
- PHP_CodeSniffer now has a token for an asperand (@ symbol) so sniffs can listen for them
- Thanks to Andy Brockhurst for the patch
- Added Generic DuplicateClassNameSniff that will warn if the same class name is used in multiple files
- Not currently used by any standard; more of a multi-file sniff sample than anything useful
- Added Generic NoSilencedErrorsSniff that warns if PHP errors are being silenced using the @ symbol
- Thanks to Andy Brockhurst for the contribution
- Added Generic UnnecessaryStringConcatSniff that checks for two strings being concatenated
- Added PEAR FunctionDeclarationSniff to enforce the new multi-line function declaration PEAR standard
- Added PEAR MultiLineAssignmentSniff to enforce the correct indentation of multi-line assignments
- Added PEAR MultiLineConditionSniff to enforce the new multi-line condition PEAR standard
- Added PEAR ObjectOperatorIndentSniff to enforce the new chained function call PEAR standard
- Added MySource DisallowSelfActionSniff to ban the use of self::method() calls in Action classes
- Added MySource DebugCodeSniff to ban the use of Debug::method() calls
- Added MySource CreateWidgetTypeCallback sniff to check callback usage in widget type create methods
- Added Squiz DisallowObjectStringIndexSniff that forces object dot notation in JavaScript files
- Thanks to Sertan Danis for the contribution
- Added Squiz DiscouragedFunctionsSniff to warn when using debug functions
- Added Squiz PropertyLabelSniff to check whitespace around colons in JS property and label declarations
- Added Squiz DuplicatePropertySniff to check for duplicate property names in JS classes
- Added Squiz ColonSpacingSniff to check for spacing around colons in CSS style definitions
- Added Squiz SemicolonSpacingSniff to check for spacing around semicolons in CSS style definitions
- Added Squiz IndentationSniff to check for correct indentation of CSS files
- Added Squiz ColourDefinitionSniff to check that CSS colours are defined in uppercase and using shorthand
- Added Squiz EmptyStyleDefinitionSniff to check for CSS style definitions without content
- Added Squiz EmptyClassDefinitionSniff to check for CSS class definitions without content
- Added Squiz ClassDefinitionOpeningBraceSpaceSniff to check for spaces around opening brace of CSS class definitions
- Added Squiz ClassDefinitionClosingBraceSpaceSniff to check for a single blank line after CSS class definitions
- Added Squiz ClassDefinitionNameSpacingSniff to check for a blank lines inside CSS class definition names
- Added Squiz DisallowMultipleStyleDefinitionsSniff to check for multiple style definitions on a single line
- Added Squiz DuplicateClassDefinitionSniff to check for duplicate CSS class blocks that can be merged
- Added Squiz ForbiddenStylesSniff to check for usage of browser specific styles
- Added Squiz OpacitySniff to check for incorrect opacity values in CSS
- Added Squiz LowercaseStyleDefinitionSniff to check for styles that are not defined in lowercase
- Added Squiz MissingColonSniff to check for style definitions where the colon has been forgotten
- Added Squiz MultiLineFunctionDeclarationSniff to check that multi-line declarations contain one param per line
- Added Squiz JSLintSniff to check for JS errors using the jslint.js script through Rhino
- Set jslint path using phpcs --config-set jslint_path /path/to/jslint.js
- Set rhino path using phpcs --config-set rhino_path /path/to/rhino
- Added Generic TodoSniff that warns about comments that contain the word TODO
- Removed MultipleStatementAlignmentSniff from the PEAR standard as alignment is now optional
- Generic ForbiddenFunctionsSniff now has protected member var to specify if it should use errors or warnings
- Generic MultipleStatementAlignmentSniff now has correct error message if assignment is on a new line
- Generic MultipleStatementAlignmentSniff now has protected member var to allow it to ignore multi-line assignments
- Generic LineEndingsSniff now supports checking of JS files
- Generic LineEndingsSniff now supports checking of CSS files
- Generic DisallowTabIndentSniff now supports checking of CSS files
- Squiz DoubleQuoteUsageSniff now bans the use of variables in double quoted strings in favour of concatenation
- Squiz SuperfluousWhitespaceSniff now supports checking of JS files
- Squiz SuperfluousWhitespaceSniff now supports checking of CSS files
- Squiz DisallowInlineIfSniff now supports checking of JS files
- Squiz SemicolonSpacingSniff now supports checking of JS files
- Squiz PostStatementCommentSniff now supports checking of JS files
- Squiz FunctionOpeningBraceSpacingSniff now supports checking of JS files
- Squiz FunctionClosingBraceSpacingSniff now supports checking of JS files
- Empty JS functions must have their opening and closing braces next to each other
- Squiz ControlStructureSpacingSniff now supports checking of JS files
- Squiz LongConditionClosingCommentSniff now supports checking of JS files
- Squiz OperatorSpacingSniff now supports checking of JS files
- Squiz SwitchDeclarationSniff now supports checking of JS files
- Squiz CommentedOutCodeSniff now supports checking of CSS files
- Squiz DisallowSizeFunctionsInLoopsSniff now supports checking of JS files for the use of object.length
- Squiz DisallowSizeFunctionsInLoopsSniff no longer complains about size functions outside of the FOR condition
- Squiz ControlStructureSpacingSniff now bans blank lines at the end of a control structure
- Squiz ForLoopDeclarationSniff no longer throws errors for JS FOR loops without semicolons
- Squiz MultipleStatementAlignmentSniff no longer throws errors if a statement would take more than 8 spaces to align
- Squiz standard now uses Generic TodoSniff
- Squiz standard now uses Generic UnnecessaryStringConcatSniff
- Squiz standard now uses PEAR MultiLineAssignmentSniff
- Squiz standard now uses PEAR MultiLineConditionSniff
- Zend standard now uses OpeningFunctionBraceBsdAllmanSniff (feature request #14647)
- MySource JoinStringsSniff now bans the use of inline array joins and suggests the + operator
- Fixed incorrect errors that can be generated from abstract scope sniffs when moving to a new file
- Core tokenizer now matches orphaned curly braces in the same way as square brackets
- Whitespace tokens at the end of JS files are now added to the token stack
- JavaScript tokenizer now identifies properties and labels as new token types
- JavaScript tokenizer now identifies object definitions as a new token type and matches curly braces for them
- JavaScript tokenizer now identifies DIV_EQUAL and MUL_EQUAL tokens
- Improved regular expression detection in the JavaScript tokenizer
- Improve AbstractPatternSniff support so it can listen for any token type, not just weighted tokens
- Fixed Squiz DoubleQuoteUsageSniff so it works correctly with short_open_tag=Off
- Fixed bug #14409 : Output of warnings to log file
- Fixed bug #14520 : Notice: Undefined offset: 1 in
CodeSniffer/File.phpon line - Fixed bug #14637 : Call to processUnknownArguments() misses second parameter $pos
- Thanks to Peter Buri for the patch
- Fixed bug #14889 : Lack of clarity: licence or license
- Fixed bug #15008 : Nested Parentheses in Control Structure Sniffs
- Fixed bug #15091 : pre-commit hook attempts to sniff folders
- Thanks to Bruce Weirdan for the patch
- Fixed bug #15124 :
AbstractParser.phpuses deprecatedsplit()function- Thanks to Sebastian Bergmann for the patch
- Fixed bug #15188 : PHPCS vs HEREDOC strings
- Fixed bug #15231 : Notice: Uninitialized string offset: 0 in
FileCommentSniff.phpon line 555 - Fixed bug #15336 : Notice: Undefined offset: 2 in
CodeSniffer/File.phpon line
- PEAR FileCommentSniff now allows tag orders to be overridden in child classes
- Thanks to Jeff Hodsdon for the patch
- Added Generic DisallowMultipleStatementsSniff to ensure there is only one statement per line
- Squiz standard now uses DisallowMultipleStatementsSniff
- Fixed error in Zend ValidVariableNameSniff when checking vars in form: $class->{$var}
- Fixed bug #14077 : Fatal error: Uncaught PHP_CodeSniffer_Exception: $stackPtr is not a class member
- Fixed bug #14168 : Global Function -> Static Method and __autoload()
- Fixed bug #14238 : Line length not checked at last line of a file
- Fixed bug #14249 : wrong detection of scope_opener
- Fixed bug #14250 : ArrayDeclarationSniff emit warnings at malformed array
- Fixed bug #14251 : --extensions option doesn't work
- PEAR FileCommentSniff now allows tag orders to be overridden in child classes
- Thanks to Jeff Hodsdon for the patch
- Added Generic DisallowMultipleStatementsSniff to ensure there is only one statement per line
- Squiz standard now uses DisallowMultipleStatementsSniff
- Fixed error in Zend ValidVariableNameSniff when checking vars in form: $class->{$var}
- Fixed bug #14077 : Fatal error: Uncaught PHP_CodeSniffer_Exception: $stackPtr is not a class member
- Fixed bug #14168 : Global Function -> Static Method and __autoload()
- Fixed bug #14238 : Line length not checked at last line of a file
- Fixed bug #14249 : wrong detection of scope_opener
- Fixed bug #14250 : ArrayDeclarationSniff emit warnings at malformed array
- Fixed bug #14251 : --extensions option doesn't work
- Permission denied errors now stop script execution but still display current errors (feature request #14076)
- Added Squiz ValidArrayIndexNameSniff to ensure array indexes do not use camel case
- Squiz ArrayDeclarationSniff now ensures arrays are not declared with camel case index values
- PEAR ValidVariableNameSniff now alerts about a possible parse error for member vars inside an interface
- Fixed bug #13921 : js parsing fails for comments on last line of file
- Fixed bug #13922 : crash in case of malformed (but tokenized) PHP file
- PEAR and Squiz ClassDeclarationSniff now throw warnings for possible parse errors
- Squiz ValidClassNameSniff now throws warning for possible parse errors
- Squiz ClosingDeclarationCommentSniff now throws additional warnings for parse errors
- Added support for multiple tokenizers so PHP_CodeSniffer can check more than just PHP files
- PHP_CodeSniffer now has a JS tokenizer for checking JavaScript files
- Sniffs need to be updated to work with additional tokenizers, or new sniffs written for them
- phpcs now exits with status 2 if the tokenizer extension has been disabled (feature request #13269)
- Added scripts/phpcs-svn-pre-commit that can be used as an SVN pre-commit hook
- Also reworked the way the phpcs script works to make it easier to wrap it with other functionality
- Thanks to Jack Bates for the contribution
- Fixed error in phpcs error message when a supplied file does not exist
- Fixed a cosmetic error in AbstractPatternSniff where the "found" string was missing some content
- Added sniffs that implement part of the PMD rule catalog to the Generic standard
- Thanks to Manuel Pichler for the contribution of all these sniffs.
- Squiz FunctionCommentThrowTagSniff no longer throws errors for function that only throw variables
- Generic ScopeIndentSniff now has private member to enforce exact indent matching
- Replaced Squiz DisallowCountInLoopsSniff with Squiz DisallowSizeFunctionsInLoopsSniff
- Thanks to Jan Miczaika for the sniff
- Squiz BlockCommentSniff now checks inline doc block comments
- Squiz InlineCommentSniff now checks inline doc block comments
- Squiz BlockCommentSniff now checks for no blank line before first comment in a function
- Squiz DocCommentAlignmentSniff now ignores inline doc block comments
- Squiz ControlStructureSpacingSniff now ensures no blank lines at the start of control structures
- Squiz ControlStructureSpacingSniff now ensures no blank lines between control structure closing braces
- Squiz IncrementDecrementUsageSniff now ensures inc/dec ops are bracketed in string concats
- Squiz IncrementDecrementUsageSniff now ensures inc/dec ops are not used in arithmetic operations
- Squiz FunctionCommentSniff no longer throws errors if return value is mixed but function returns void somewhere
- Squiz OperatorBracketSniff no allows function call brackets to count as operator brackets
- Squiz DoubleQuoteUsageSniff now supports \x \f and \v (feature request #13365)
- Squiz ComparisonOperatorUsageSniff now supports JS files
- Squiz ControlSignatureSniff now supports JS files
- Squiz ForLoopDeclarationSniff now supports JS files
- Squiz OperatorBracketSniff now supports JS files
- Squiz InlineControlStructureSniff now supports JS files
- Generic LowerCaseConstantSniff now supports JS files
- Generic DisallowTabIndentSniff now supports JS files
- Generic MultipleStatementAlignmentSniff now supports JS files
- Added Squiz ObjectMemberCommaSniff to ensure the last member of a JS object is not followed by a comma
- Added Squiz ConstantCaseSniff to ensure the PHP constants are uppercase and JS lowercase
- Added Squiz JavaScriptLintSniff to check JS files with JSL
- Set path using phpcs --config-set jsl_path /path/to/jsl
- Added MySource FirebugConsoleSniff to ban the use of "console" for JS variable and function names
- Added MySource JoinStringsSniff to enforce the use of join() to concatenate JS strings
- Added MySource AssignThisSniff to ensure this is only assigned to a var called self
- Added MySource DisallowNewWidgetSniff to ban manual creation of widget objects
- Removed warning shown in Zend CodeAnalyzerSniff when the ZCA path is not set
- Fixed error in Squiz ValidVariableNameSniff when checking vars in the form $obj->$var
- Fixed error in Squiz DisallowMultipleAssignmentsSniff when checking vars in the form $obj->$var
- Fixed error in Squiz InlineCommentSniff where comments for class constants were seen as inline
- Fixed error in Squiz BlockCommentSniff where comments for class constants were not ignored
- Fixed error in Squiz OperatorBracketSniff where negative numbers were ignored during comparisons
- Fixed error in Squiz FunctionSpacingSniff where functions after member vars reported incorrect spacing
- Fixed bug #13062 : Interface comments aren't handled in PEAR standard
- Thanks to Manuel Pichler for the path
- Fixed bug #13119 : PHP minimum requirement need to be fix
- Fixed bug #13156 : Bug in Squiz_Sniffs_PHP_NonExecutableCodeSniff
- Fixed bug #13158 : Strange behaviour in AbstractPatternSniff
- Fixed bug #13169 : Undefined variables
- Fixed bug #13178 : Catch exception in
File.php - Fixed bug #13254 : Notices output in checkstyle report causes XML issues
- Fixed bug #13446 : crash with src of phpMyAdmin
- Thanks to Manuel Pichler for the path
- Fixed error in PEAR ValidClassNameSniff when checking class names with double underscores
- Moved Squiz InlineControlStructureSniff into Generic standard
- PEAR standard now throws warnings for inline control structures
- Squiz OutputBufferingIndentSniff now ignores the indentation of inline HTML
- MySource IncludeSystemSniff now ignores usage of ZipArchive
- Removed "function" from error messages for Generic function brace sniffs (feature request #13820)
- Generic UpperCaseConstantSniff no longer throws errors for declare(ticks = ...)
- Thanks to Josh Snyder for the patch
- Squiz ClosingDeclarationCommentSniff and AbstractVariableSniff now throw warnings for possible parse errors
- Fixed bug #13827 : AbstractVariableSniff throws "undefined index"
- Fixed bug #13846 : Bug in Squiz.NonExecutableCodeSniff
- Fixed bug #13849 : infinite loop in PHP_CodeSniffer_File::findNext()
- Squiz ArrayDeclarationSniff now throws error if the array keyword is followed by a space
- Squiz ArrayDeclarationSniff now throws error for empty multi-line arrays
- Squiz ArrayDeclarationSniff now throws error for multi-line arrays with a single value
- Squiz DocCommentAlignmentSniff now checks for a single space before tags inside docblocks
- Squiz ForbiddenFunctionsSniff now disallows is_null() to force use of (=== NULL) instead
- Squiz VariableCommentSniff now continues throwing errors after the first one is found
- Squiz SuperfluousWhitespaceSniff now throws errors for multiple blank lines inside functions
- MySource IncludedSystemSniff now checks extended class names
- MySource UnusedSystemSniff now checks extended and implemented class names
- MySource IncludedSystemSniff now supports includeWidget()
- MySource UnusedSystemSniff now supports includeWidget()
- Added PEAR ValidVariableNameSniff to check that only private member vars are prefixed with an underscore
- Added Squiz DisallowCountInLoopsSniff to check for the use of count() in FOR and WHILE loop conditions
- Added MySource UnusedSystemSniff to check for included classes that are never used
- Fixed a problem that caused the parentheses map to sometimes contain incorrect values
- Fixed bug #12767 : Cant run phpcs from dir with PEAR subdir
- Fixed bug #12773 : Reserved variables are not detected in strings
- Thanks to Wilfried Loche for the patch
- Fixed bug #12832 : Tab to space conversion does not work
- Fixed bug #12888 : extra space indentation = Notice: Uninitialized string offset...
- Fixed bug #12909 : Default generateDocs function does not work under linux
- Thanks to Paul Smith for the patch
- Fixed bug #12957 : PHP 5.3 magic method __callStatic
- Thanks to Manuel Pichler for the patch
- You can now specify the full path to a coding standard on the command line (feature request #11886)
- This allows you to use standards that are stored outside of PHP_CodeSniffer's own Standard dir
- You can also specify full paths in the
CodingStandard.phpinclude and exclude methods - Classes, dirs and files need to be names as if the standard was part of PHP_CodeSniffer
- Thanks to Dirk Thomas for the doc generator patch and testing
- Modified the scope map to keep checking after 3 lines for some tokens (feature request #12561)
- Those tokens that must have an opener (like T_CLASS) now keep looking until EOF
- Other tokens (like T_FUNCTION) still stop after 3 lines for performance
- You can now escape commas in ignore patterns so they can be matched in file names
- Thanks to Carsten Wiedmann for the patch
- Config data is now cached in a global var so the file system is not hit so often
- You can also set config data temporarily for the script if you are using your own external script
- Pass TRUE as the third argument to PHP_CodeSniffer::setConfigData()
- PEAR ClassDeclarationSniff no longer throws errors for multi-line class declarations
- Squiz ClassDeclarationSniff now ensures there is one blank line after a class closing brace
- Squiz ClassDeclarationSniff now throws errors for a missing end PHP tag after the end class tag
- Squiz IncrementDecrementUsageSniff no longer throws errors when -= and += are being used with vars
- Squiz SwitchDeclarationSniff now throws errors for switch statements that do not contain a case statement
- Thanks to Sertan Danis for the patch
- MySource IncludeSystemSniff no longer throws errors for the Util package
- Fixed bug #12621 : "space after AS" check is wrong
- Thanks to Satoshi Oikawa for the patch
- Fixed bug #12645 : error message is wrong
- Thanks to Satoshi Oikawa for the patch
- Fixed bug #12651 : Increment/Decrement Operators Usage at -1
- Added new command line argument --tab-width that will convert tabs to spaces before testing
- This allows you to use the existing sniffs that check for spaces even when you use tabs
- Can also be set via a config var: phpcs --config-set tab_width 4
- A value of zero (the default) tells PHP_CodeSniffer not to replace tabs with spaces
- You can now change the default report format from "full" to something else
- Run: phpcs
--config-set report_format [format]
- Run: phpcs
- Improved performance by optimising the way the scope map is created during tokenizing
- Added new Squiz DisallowInlineIfSniff to disallow the usage of inline IF statements
- Fixed incorrect errors being thrown for nested switches in Squiz SwitchDeclarationSniff
- PEAR FunctionCommentSniff no longer complains about missing comments for @throws tags
- PEAR FunctionCommentSniff now throws error for missing exception class name for @throws tags
- PHP_CodeSniffer_File::isReference() now correctly returns for functions that return references
- Generic LineLengthSniff no longer warns about @version lines with CVS or SVN id tags
- Generic LineLengthSniff no longer warns about @license lines with long URLs
- Squiz FunctionCommentThrowTagSniff no longer complains about throwing variables
- Squiz ComparisonOperatorUsageSniff no longer throws incorrect errors for inline IF statements
- Squiz DisallowMultipleAssignmentsSniff no longer throws errors for assignments in inline IF statements
- Fixed bug #12455 : CodeSniffer treats content inside heredoc as PHP code
- Fixed bug #12471 : Checkstyle report is broken
- Fixed bug #12476 : PHP4 destructors are reported as error
- Fixed bug #12513 : Checkstyle XML messages need to be utf8_encode()d
- Thanks to Sebastian Bergmann for the patch.
- Fixed bug #12517 : getNewlineAfter() and dos files
- Added a new Checkstyle report format
- Like the current XML format but modified to look like Checkstyle output
- Thanks to Manuel Pichler for helping get the format correct
- You can now hide warnings by default
- Run: phpcs --config-set show_warnings 0
- If warnings are hidden by default, use the new -w command line argument to override
- Added new command line argument --config-delete to delete a config value and revert to the default
- Improved overall performance by optimising tokenizing and next/prev methods (feature request #12421)
- Thanks to Christian Weiske for the patch
- Added FunctionCallSignatureSniff to Squiz standard
- Added @subpackage support to file and class comment sniffs in PEAR standard (feature request #12382)
- Thanks to Carsten Wiedmann for the patch
- An error is now displayed if you use a PHP version less than 5.1.0 (feature request #12380)
- Thanks to Carsten Wiedmann for the patch
- phpcs now exits with status 2 if it receives invalid input (feature request #12380)
- This is distinct from status 1, which indicates errors or warnings were found
- Added new Squiz LanguageConstructSpacingSniff to throw errors for additional whitespace after echo etc.
- Removed Squiz ValidInterfaceNameSniff
- PEAR FunctionCommentSniff no longer complains about unknown tags
- Fixed incorrect errors about missing function comments in PEAR FunctionCommentSniff
- Fixed incorrect function docblock detection in Squiz FunctionCommentSniff
- Fixed incorrect errors for list() in Squiz DisallowMultipleAssignmentsSniff
- Errors no longer thrown if control structure is followed by a CASE's BREAK in Squiz ControlStructureSpacingSniff
- Fixed bug #12368 : Autoloader cannot be found due to include_path override
- Thanks to Richard Quadling for the patch
- Fixed bug #12378 : equal sign alignments problem with while()
- Main phpcs script can now be run from a CVS checkout without installing the package
- Added a new CSV report format
- Header row indicates what position each element is in
- Always use the header row to determine positions rather than assuming the format, as it may change
- XML and CSV report formats now contain information about which column the error occurred at
- Useful if you want to highlight the token that caused the error in a custom application
- Square bracket tokens now have bracket_opener and bracket_closer set
- Added new Squiz SemicolonSpacingSniff to throw errors if whitespace is found before a semicolon
- Added new Squiz ArrayBracketSpacingSniff to throw errors if whitespace is found around square brackets
- Added new Squiz ObjectOperatorSpacingSniff to throw errors if whitespace is found around object operators
- Added new Squiz DisallowMultipleAssignmentsSniff to throw errors if multiple assignments are on the same line
- Added new Squiz ScopeKeywordSpacingSniff to throw errors if there is not a single space after a scope modifier
- Added new Squiz ObjectInstantiationSniff to throw errors if new objects are not assigned to a variable
- Added new Squiz FunctionDuplicateArgumentSniff to throw errors if argument is declared multiple times in a function
- Added new Squiz FunctionOpeningBraceSpaceSniff to ensure there are no blank lines after a function open brace
- Added new Squiz CommentedOutCodeSniff to warn about comments that looks like they are commented out code blocks
- Added CyclomaticComplexitySniff to Squiz standard
- Added NestingLevelSniff to Squiz standard
- Squiz ForbiddenFunctionsSniff now recommends echo() instead of print()
- Squiz ValidLogicalOperatorsSniff now recommends ^ instead of xor
- Squiz SwitchDeclarationSniff now contains more checks
- A single space is required after the case keyword
- No space is allowed before the colon in a case or default statement
- All switch statements now require a default case
- Default case must contain a break statement
- Empty default case must contain a comment describing why the default is ignored
- Empty case statements are not allowed
- Case and default statements must not be followed by a blank line
- Break statements must be followed by a blank line or the closing brace
- There must be no blank line before a break statement
- Squiz standard is now using the PEAR IncludingFileSniff
- PEAR ClassCommentSniff no longer complains about unknown tags
- PEAR FileCommentSniff no longer complains about unknown tags
- PEAR FileCommentSniff now accepts multiple @copyright tags
- Squiz BlockCommentSniff now checks that comment starts with a capital letter
- Squiz InlineCommentSniff now has better checking to ensure comment starts with a capital letter
- Squiz ClassCommentSniff now checks that short and long comments start with a capital letter
- Squiz FunctionCommentSniff now checks that short, long and param comments start with a capital letter
- Squiz VariableCommentSniff now checks that short and long comments start with a capital letter
- Fixed error with multi-token array indexes in Squiz ArrayDeclarationSniff
- Fixed error with checking shorthand IF statements without a semicolon in Squiz InlineIfDeclarationSniff
- Fixed error where constants used as default values in function declarations were seen as type hints
- Fixed bug #12316 : PEAR is no longer the default standard
- Fixed bug #12321 : wrong detection of missing function docblock