3.6.0
版本发布时间: 2021-04-09 09:27:47
squizlabs/PHP_CodeSniffer最新发布版本:3.7.2(2023-02-23 07:13:42)
PHP 8 Language Feature Support
PHP_CodeSniffer has run under PHP 8 for some time, but it has not supported all new language features until this release. Version 3.6.0 adds support for all new PHP 8 language features, including:
- Attributes
- Constructor property promotion
- Named arguments
- Union types
- Match expressions
- Static and Mixed return types
Note: All standards and sniffs included with PHP_CodeSniffer have been updated to support these language features, but external standards and sniffs may need updating before they are able to detect them correctly.
Changelog
- Added support for PHP 8.0 union types
- A new
T_TYPE_UNION
token is available to represent the pipe character -
File::getMethodParameters()
,getMethodProperties()
, andgetMemberProperties()
will now return union types - Thanks to Juliette Reinders Folmer for the patch
- A new
- Added support for PHP 8.0 named function call arguments
- A new
T_PARAM_NAME
token is available to represent the label with the name of the function argument in it - Thanks to Juliette Reinders Folmer for the patch
- A new
- Added support for PHP 8.0 attributes
- The PHP-supplied
T_ATTRIBUTE
token marks the start of an attribute - A new
T_ATTRIBUTE_END
token is available to mark the end of an attribute - New
attribute_owner
andattribute_closer
indexes are available in the tokens array for all tokens inside an attribute - Tokenizing of attributes has been backfilled for older PHP versions
- The following sniffs have been updated to support attributes:
-
PEAR.Commenting.ClassComment
-
PEAR.Commenting.FileComment
-
PSR1.Files.SideEffects
-
PSR12.Files.FileHeader
-
Squiz.Commenting.ClassComment
-
Squiz.Commenting.FileComment
-
Squiz.WhiteSpace.FunctionSpacing
- Thanks to Vadim Borodavko for the patch
-
- Thanks to Alessandro Chitolina for the patch
- The PHP-supplied
- Added support for PHP 8.0 dereferencing of text strings with interpolated variables
- Thanks to Juliette Reinders Folmer for the patch
- Added support for PHP 8.0 match expressions
- Match expressions are now tokenised with parenthesis and scope openers and closers
- Sniffs can listen for the
T_MATCH
token to process match expressions - Note that the case and default statements inside match expressions do not have scopes set
- Sniffs can listen for the
- A new
T_MATCH_ARROW
token is available to represent the arrows in match expressions - A new
T_MATCH_DEFAULT
token is available to represent the default keyword in match expressions - All tokenizing of match expressions has been backfilled for older PHP versions
- The following sniffs have been updated to support match expressions:
-
Generic.CodeAnalysis.AssignmentInCondition
-
Generic.CodeAnalysis.EmptyPHPStatement
- Thanks to Vadim Borodavko for the patch
-
Generic.CodeAnalysis.EmptyStatement
-
Generic.PHP.LowerCaseKeyword
-
PEAR.ControlStructures.ControlSignature
-
PSR12.ControlStructures.BooleanOperatorPlacement
-
Squiz.Commenting.LongConditionClosingComment
-
Squiz.Commenting.PostStatementComment
-
Squiz.ControlStructures.LowercaseDeclaration
-
Squiz.ControlStructures.ControlSignature
-
Squiz.Formatting.OperatorBracket
-
Squiz.PHP.DisallowMultipleAssignments
-
Squiz.Objects.ObjectInstantiation
-
Squiz.WhiteSpace.ControlStructureSpacing
-
- Thanks to Juliette Reinders Folmer for the patch
- Match expressions are now tokenised with parenthesis and scope openers and closers
- The value of the
T_FN_ARROW
token has changed from "T_FN_ARROW" to "PHPCS_T_FN_ARROW" to avoid package conflicts- This will have no impact on custom sniffs unless they are specifically looking at the value of the
T_FN_ARROW
constant - If sniffs are just using constant to find arrow functions, they will continue to work without modification
- Thanks to Juliette Reinders Folmer for the patch
- This will have no impact on custom sniffs unless they are specifically looking at the value of the
-
File::findStartOfStatement()
now works correctly when passed the last token in a statement -
File::getMethodParameters()
now supports PHP 8.0 constructor property promotion- Returned method params now include a
property_visibility
andvisibility_token
index if property promotion is detected - Thanks to Juliette Reinders Folmer for the patch
- Returned method params now include a
-
File::getMethodProperties()
now includes areturn_type_end_token
index in the return value- This indicates the last token in the return type, which is helpful when checking union types
- Thanks to Juliette Reinders Folmer for the patch
- Include patterns are now ignored when processing STDIN
- Previously, checks using include patterns were excluded when processing STDIN when no file path was provided via
--stdin-path
- Now, all include and exclude rules are ignored when no file path is provided, allowing all checks to run
- If you want include and exclude rules enforced when checking STDIN, use
--stdin-path
to set the file path - Thanks to Juliette Reinders Folmer for the patch
- Previously, checks using include patterns were excluded when processing STDIN when no file path was provided via
- Spaces are now correctly escaped in the paths to external on Windows
- Thanks to Juliette Reinders Folmer for the patch
- Added
Generic.NamingConventions.AbstractClassNamePrefix
to enforce that class names are prefixed with "Abstract"- Thanks to Anna Borzenko for the contribution
- Added
Generic.NamingConventions.InterfaceNameSuffix
to enforce that interface names are suffixed with "Interface"- Thanks to Anna Borzenko for the contribution
- Added
Generic.NamingConventions.TraitNameSuffix
to enforce that trait names are suffixed with "Trait"- Thanks to Anna Borzenko for the contribution
-
Generic.CodeAnalysis.UnusedFunctionParameter
can now be configured to ignore variable usage for specific type hints- This allows you to suppress warnings for some variables that are not required, but leave warnings for others
- Set the
ignoreTypeHints
array property to a list of type hints to ignore - Thanks to Petr Bugyík for the patch
-
Generic.Formatting.MultipleStatementAlignment
can now align statements at the start of the assignment token- Previously, the sniff enforced that the values were aligned, even if this meant the assignment tokens were not
- Now, the sniff can enforce that the assignment tokens are aligned, even if this means the values are not
- Set the
alignAtEnd
sniff property tofalse
to align the assignment tokens - The default remains at
true
, so the assigned values are aligned - Thanks to John P. Bloch for the patch
-
Generic.PHP.LowerCaseType
now supports checking of typed properties- Thanks to Juliette Reinders Folmer for the patch
-
Generic.PHP.LowerCaseType
now supports checking of union types- Thanks to Juliette Reinders Folmer for the patch
-
PEAR.Commenting.FunctionComment
andSquiz.Commenting.FunctionComment
sniffs can now ignore private and protected methods- Set the
minimumVisibility
sniff property toprotected
to ignore private methods - Set the
minimumVisibility
sniff property topublic
to ignore both private and protected methods - The default remains at
private
, so all methods are checked - Thanks to Vincent Langlet for the patch
- Set the
-
PEAR.Commenting.FunctionComment
andSquiz.Commenting.FunctionComment
sniffs can now ignore return tags in any method- Previously, only
__construct
and__destruct
were ignored - Set the list of method names to ignore in the
specialMethods
sniff property - The default remains at
__construct
and__destruct
only - Thanks to Vincent Langlet for the patch
- Previously, only
-
PSR2.ControlStructures.SwitchDeclaration
now supports nested switch statements where every branch terminates- Previously, if a
CASE
only contained aSWITCH
and no direct terminating statement, a fall-through error was displayed - Now, the error is suppressed if every branch of the
SWITCH
has a terminating statement - Thanks to Vincent Langlet for the patch
- Previously, if a
- The
PSR2.Methods.FunctionCallSignature.SpaceBeforeCloseBracket
error message is now reported on the closing parenthesis token- Previously, the error was being reported on the function keyword, leading to confusing line numbers in the error report
-
Squiz.Commenting.FunctionComment
is now able to ignore function comments that are only inheritdoc statements- Set the
skipIfInheritdoc
sniff property totrue
to skip checking function comments if the content is only{@inhertidoc}
- The default remains at
false
, so these comments will continue to report errors - Thanks to Jess Myrbo for the patch
- Set the
-
Squiz.Commenting.FunctionComment
now supports the PHP 8 mixed type- Thanks to Vadim Borodavko for the patch
-
Squiz.PHP.NonExecutableCode
now has improved handling of syntax errors- Thanks to Thiemo Kreuz for the patch
-
Squiz.WhiteSpace.ScopeKeywordSpacing
now checks spacing when using PHP 8.0 constructor property promotion- Thanks to Juliette Reinders Folmer for the patch
- Fixed an issue that could occur when checking files on network drives, such as with WSL2 on Windows 10
- This works around a long-standing PHP bug with
is_readable()
- Thanks to Michael S for the patch
- This works around a long-standing PHP bug with
- Fixed a number of false positives in the
Squiz.PHP.DisallowMultipleAssignments
sniff- Sniff no longer errors for default value assignments in arrow functions
- Sniff no longer errors for assignments on first line of closure
- Sniff no longer errors for assignments after a goto label
- Thanks to Jaroslav Hanslík for the patch
- Fixed bug #2913 : Generic.WhiteSpace.ScopeIndent false positive when opening and closing tag on same line inside conditional
- Fixed bug #2992 : Enabling caching using a ruleset produces invalid cache files when using --sniffs and --exclude CLI args
- Fixed bug #3003 : Squiz.Formatting.OperatorBracket autofix incorrect when assignment used with null coalescing operator
- Fixed bug #3145 : Autoloading of sniff fails when multiple classes declared in same file
- Fixed bug #3157 : PSR2.ControlStructures.SwitchDeclaration.BreakIndent false positive when case keyword is not indented
- Fixed bug #3163 : Undefined index error with pre-commit hook using husky on PHP 7.4
- Thanks to Ismo Vuorinen for the patch
- Fixed bug #3165 : Squiz.PHP.DisallowComparisonAssignment false positive when comparison inside closure
- Fixed bug #3167 : Generic.WhiteSpace.ScopeIndent false positive when using PHP 8.0 constructor property promotion
- Fixed bug #3170 : Squiz.WhiteSpace.OperatorSpacing false positive when using negation with string concat
- This also fixes the same issue in the PSR12.Operators.OperatorSpacing sniff
- Fixed bug #3177 : Incorrect tokenization of GOTO statements in mixed PHP/HTML files
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug #3184 : PSR2.Namespace.NamespaceDeclaration false positive on namespace operator
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug #3188 : Squiz.WhiteSpace.ScopeKeywordSpacing false positive for static return type
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug #3192 : findStartOfStatement doesn't work correctly inside switch
- Thanks to Vincent Langlet for the patch
- Fixed bug #3195 : Generic.WhiteSpace.ScopeIndent confusing message when combination of tabs and spaces found
- Fixed bug #3197 : Squiz.NamingConventions.ValidVariableName does not use correct error code for all member vars
- Fixed bug #3219 : Generic.Formatting.MultipleStatementAlignment false positive for empty anonymous classes and closures
- Fixed bug #3258 : Squiz.Formatting.OperatorBracket duplicate error messages for unary minus
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug #3273 : Squiz.Functions.FunctionDeclarationArgumentSpacing reports line break as 0 spaces between parenthesis
- Fixed bug #3277 : Nullable static return typehint causes whitespace error
- Fixed bug #3284 : Unused parameter false positive when using array index in arrow function
1、 phpcbf.phar 1.26MB
2、 phpcbf.phar.asc 587B
3、 phpcs.phar 1.26MB
4、 phpcs.phar.asc 587B