Skip to content

Releases: PHPCSStandards/PHP_CodeSniffer

2.2.0 - 2015-01-21

08 Nov 05:14
Compare
Choose a tag to compare

PHPCS Config File

If PHP_CodeSniffer is not given a list of files to check and is not given a standard to use, it will now look for a phpcs.xml file in the current directory to figure out what it should do. The phpcs.xml file has the exact same format as a normal ruleset.xml file, so it can also be used as your primary standard. But it should also specify some files and/or directories to process using the new ruleset <file> tags.

Having one of these phpcs.xml files allows you to run the phpcs or phpcbf commands without specifying any command line options and still have them check or fix an entire codebase.

If you are using the phpcs.xml file as your primary standard, the files and directories you specify in there will be ignored if any files or directories are specified on the command line. So you can run phpcs like this:

$ phpcs

Or you can use phpcs.xml as a normal standard:

$ phpcs --standard=phpcs.xml /path/to/file

Auto-Sizing Reports

PHP_CodeSniffer has always allowed you to set a report width so that you can see more output in the screen-based reports. From version 2.2.0, you can tell PHP_CodeSniffer to use as much space as it can by using the --report-width=auto command line argument.

When using auto width, PHP_CodeSniffer will use the entire width of your terminal window to produce report output. If the report doesn't need all that width, PHP_CodeSniffer will only use as much as it needs to print the report without wrapping. Use the command phpcs --config-set report_width auto to use auto-sizing by default, or configure it in your ruleset.

PSR2 Tab Width

The PSR2 standard now includes a tab-width setting of 4 in the ruleset.xml file. PSR2 requires 4 spaces for indenting, so running that standard over tab indented code will now detect, and optionally fix, those tab indents correctly without you needing to specify the --tab-width=4 command line argument.

Other Changes

  • Added (hopefully) tastefully used colors to report and progress output for the phpcs command
    • Use the --colors command line argument to use colors in output
    • Use the command "phpcs --config-set colors true" to turn colors on by default
    • Use the --no-colors command line argument to turn colors off when the config value is set
  • Added support for using the full terminal width for report output
    • Use the --report-width=auto command line argument to auto-size the reports
    • Use the command "phpcs --config-set report_width auto" to use auto-sizing by default
  • Reports will now size to fit inside the report width setting instead of always using padding to fill the space
  • If no files or standards are specified, PHPCS will now look for a phpcs.xml file in the current directory
    • This file has the same format as a standard ruleset.xml file
    • The phpcs.xml file should specify (at least) files to process and a standard/sniffs to use
    • Useful for running the phpcs and phpcbf commands without any arguments at the top of a repository
  • Default file paths can now be specified in a ruleset.xml file using the "file" tag
    • File paths are only processed if no files were specified on the command line
  • Extensions specified on the CLI are now merged with those set in ruleset.xml files
    • Previously, the ruleset.xml file setting replaced the CLI setting completely
  • Squiz coding standard now requires lowercase PHP constants (true, false and null)
    • Removed Squiz.NamingConventions.ConstantCase sniff as the rule is now consistent across PHP and JS files
  • Squiz FunctionOpeningBraceSpaceSniff no longer does additional checks for JS functions
    • PHP and JS functions and closures are now treated the same way
  • Squiz MultiLineFunctionDeclarationSniff now supports JS files
  • Interactive mode no longer breaks if you also specify a report type on the command line
  • PEAR InlineCommentSniff now fixes the Perl-style comments that it finds (request #375)
  • PSR2 standard no longer fixes the placement of docblock open tags as comments are excluded from this standard
  • PSR2 standard now sets a default tab width of 4 spaces
  • Generic DocCommentSniff now only disallows lowercase letters at the start of a long/short comment (request #377)
    • All non-letter characters are now allowed, including markdown special characters and numbers
  • Generic DisallowMultipleStatementsSniff now allows multiple open/close tags on the same line (request #423)
  • Generic CharacterBeforePHPOpeningTagSniff now only checks the first PHP tag it finds (request #423)
  • Generic CharacterBeforePHPOpeningTagSniff now allows a shebang line at the start of the file (request #20481)
  • Generic InlineHTMLUnitTest now allows a shebang line at the start of the file (request #20481)
  • PEAR ObjectOperatorIndentSniff now only checks object operators at the start of a line
  • PEAR FileComment and ClassComment sniffs no longer have @ in their error codes
    • E.g., PEAR.Commenting.FileComment.Missing@categoryTag becomes PEAR.Commenting.FileComment.MissingCategoryTag
    • Thanks to Grzegorz Rygielski for the patch
  • Squiz ControlStructureSpacingSniff no longer enforces a blank line before CATCH statements
  • Squiz FunctionCommentSniff now fixes the return type in the @return tag (request #392)
  • Squiz BlockCommentSniff now only disallows lowercase letters at the start of the comment
  • Squiz InlineCommentSniff now only disallows lowercase letters at the start of the comment
  • Squiz OperatorSpacingSniff now has a setting to ignore newline characters around operators (request #348)
    • Default remains FALSE, so newlines are not allowed
    • Override the "ignoreNewlines" setting in a ruleset.xml file to change
  • PSR2 ControlStructureSpacingSniff now checks for, and fixes, newlines after the opening parenthesis
  • Added a markdown document generator (--generator=markdown to use)
    • Thanks to Stefano Kowalke for the contribution
  • Fixed bug #379 : Squiz.Arrays.ArrayDeclaration.NoCommaAfterLast incorrectly detects comments
  • Fixed bug #382 : JS tokenizer incorrect for inline conditionally created immediately invoked anon function
  • Fixed bug #383 : Squiz.Arrays.ArrayDeclaration.ValueNoNewline incorrectly detects nested arrays
  • Fixed bug #386 : Undefined offset in Squiz.FunctionComment sniff when param has no comment
  • Fixed bug #390 : Indentation of non-control structures isn't adjusted when containing structure is fixed
  • Fixed bug #400 : InlineControlStructureSniff fails to fix when statement has no semicolon
  • Fixed bug #401 : PHPCBF no-patch option shows an error when there are no fixable violations in a file
  • Fixed bug #405 : The "Squiz.WhiteSpace.FunctionSpacing" sniff removes class "}" during fixing
  • Fixed bug #407 : PEAR.ControlStructures.MultiLineCondition doesn't account for comments at the end of lines
  • Fixed bug #410 : The "Squiz.WhiteSpace.MemberVarSpacing" not respecting "var"
  • Fixed bug #411 : Generic.WhiteSpace.ScopeIndent.Incorrect - false positive with multiple arrays in argument list
  • Fixed bug #412 : PSR2 multi-line detection doesn't work for inline IF and string concats
  • Fixed bug #414 : Squiz.WhiteSpace.MemberVarSpacing - inconsistent checking of member vars with comment
  • Fixed bug #433 : Wrong detection of Squiz.Arrays.ArrayDeclaration.KeyNotAligned when key contains space
  • Fixed bug #434 : False positive for spacing around "=>" in inline array within foreach
  • Fixed bug #452 : Ruleset exclude-pattern for specific sniff code ignored when using CLI --ignore option
  • Fixed bug #20482 : Scope indent sniff can get into infinite loop when processing a parse error

2.1.0 - 2014-12-18

08 Nov 05:12
Compare
Choose a tag to compare
  • Time and memory output is now shown if progress information is also shown (request #335)
  • A tilde can now be used to reference a user's home directory in a path to a standard (request #353)
  • Added PHP_CodeSniffer_File::findStartOfStatement() to find the first non-whitespace token in a statement
    • Possible alternative for code using PHP_CodeSniffer_File::findPrevious() with the local flag set
  • Added PHP_CodeSniffer_File::findEndOfStatement() to find the last non-whitespace token in a statement
    • Possible alternative for code using PHP_CodeSniffer_File::findNext() with the local flag set
  • Generic opening function brace sniff now ensure the opening brace is the last content on the line
    • Affects OpeningFunctionBraceBsdAllmanSniff and OpeningFunctionBraceKernighanRitchieSniff
    • Also enforced in PEAR FunctionDeclarationSniff and Squiz MultiLineFunctionDeclarationSniff
  • Generic DisallowTabIndentSniff now replaces tabs everywhere it finds them, except in strings and here/now docs
  • Generic EmptyStatementSniff error codes now contain the type of empty statement detected (request #314)
    • All messages generated by this sniff are now errors (empty CATCH was previously a warning)
    • Message code Generic.CodeAnalysis.EmptyStatement.NotAllowed has been removed
    • Message code Generic.CodeAnalysis.EmptyStatement.NotAllowedWarning has been removed
    • New message codes have the format Generic.CodeAnalysis.EmptyStatement.Detected[TYPE]
    • Example code is Generic.CodeAnalysis.EmptyStatement.DetectedCATCH
    • You can now use a custom ruleset to change messages to warnings and to exclude them
  • PEAR and Squiz FunctionCommentSniffs no longer ban @return tags for constructors and destructors
    • Removed message PEAR.Commenting.FunctionComment.ReturnNotRequired
    • Removed message Squiz.Commenting.FunctionComment.ReturnNotRequired
    • Change initiated by request #324 and request #369
  • Squiz EmptyStatementSniff has been removed
    • Squiz standard now includes Generic EmptyStatementSniff and turns off the empty CATCH error
  • Squiz ControlSignatureSniff fixes now retain comments between the closing parenthesis and open brace
  • Squiz SuperfluousWhitespaceSniff now checks for extra blank lines inside closures
    • Thanks to Sertan Danis for the patch
  • Squiz ArrayDeclarationSniff now skips function calls while checking multi-line arrays
  • Fixed bug #337 : False positive with anonymous functions in Generic_Sniffs_WhiteSpace_ScopeIndentSniff
  • Fixed bug #339 : reformatting brace location can result in broken code
  • Fixed bug #342 : Nested ternary operators not tokenized correctly
  • Fixed bug #345 : Javascript regex not tokenized when inside array
  • Fixed bug #346 : PHP path can't be determined in some cases in "phpcs.bat" (on Windows XP)
  • Fixed bug #358 : False positives for Generic_Sniffs_WhiteSpace_ScopeIndentSniff
  • Fixed bug #361 : Sniff-specific exclude patterns don't work for Windows
  • Fixed bug #364 : Don't interpret "use function" as declaration
  • Fixed bug #366 : phpcbf with PSR2 errors on control structure alternative syntax
  • Fixed bug #367 : Nested Anonymous Functions Causing False Negative
  • Fixed bug #371 : Shorthand binary cast causes tokenizer errors
    • New token T_BINARY_CAST added for the b"string" cast format (the 'b' is the T_BINARY_CAST token)
  • Fixed bug #372 : phpcbf parse problem, wrong brace placement for inline IF
  • Fixed bug #373 : Double quote usage fix removing too many double quotes
  • Fixed bug #20196 : 1.5.2 breaks scope_closer position

2.0.0 - 2014-12-05

08 Nov 05:10
Compare
Choose a tag to compare
  • JS tokenizer now sets functions as T_CLOSUREs if the function is anonymous
  • JS tokenizer now sets all objects to T_OBJECT
    • Object end braces are set to a new token T_CLOSE_OBJECT
    • T_OBJECT tokens no longer act like scopes; i.e., they have no condition/opener/closer
    • T_PROPERTY tokens no longer act like scopes; i.e., they have no condition/opener/closer
    • T_OBJECT tokens have a bracket_closer instead, which can be used to find the ending
    • T_CLOSE_OBJECT tokens have a bracket_opener
  • Improved regular expression detection in the JS tokenizer
  • 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
  • PHPCBF now prints output when it is changing into directories
  • Improved conflict detection during auto fixing
  • The -vvv command line argument will now output the current file content for each loop during fixing
  • Generic ScopeIndentSniff now checks that open/close PHP tags are aligned to the correct column
  • PEAR FunctionCallSignatureSniff now checks indent of closing parenthesis even if it is not on a line by itself
  • PEAR FunctionCallSignatureSniff now supports JS files
  • PEAR MultiLineConditionSniff now supports JS files
  • Squiz DocCommentAlignmentSniff now supports JS files
  • Fixed a problem correcting the closing brace line in Squiz ArrayDeclarationSniff
  • Fixed a problem auto-fixing the Squiz.WhiteSpace.FunctionClosingBraceSpace.SpacingBeforeNestedClose error
  • Squiz EmbeddedPhpSniff no longer reports incorrect alignment of tags when they are not on new lines
  • Squiz EmbeddedPhpSniff now aligns open tags correctly when moving them onto a new line
  • Improved fixing of arrays with multiple values in Squiz ArrayDeclarationSniff
  • Improved detection of function comments in Squiz FunctionCommentSpacingSniff
  • Improved fixing of lines after cases statements in Squiz SwitchDeclarationSniff
  • Fixed bug #311 : Suppression of function prototype breaks checking of lines within function
  • Fixed bug #320 : Code sniffer indentation issue
  • Fixed bug #333 : Nested ternary operators causing problems