3.7.0
PHP 8.1 Language Feature Support
PHP_CodeSniffer has run correctly under PHP 8.1 since PHP 8 support was added, but it has not supported new 8.1 language features until this release. Version 3.7.0 adds support for the following PHP 8.1 language features:
- Enums
- Explicit octal notation
- Readonly properties
- Intersection types
- The
nevertype
Note: 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.1 explicit octal notation
- This new syntax has been backfilled for PHP versions less than 8.1
- Thanks to Mark Baker (@MarkBaker) for the patch
- Thanks to Juliette Reinders Folmer (@jrfnl) for additional fixes
- Added support for PHP 8.1 enums
- Added support for the PHP 8.1 readonly token
- Tokenzing of the readonly keyword has been backfilled for PHP versions less than 8.1
- Thanks to Jaroslav Hanslík (@kukulich) for the patch
- Added support for PHP 8.1 intersection types
- Includes a new
T_TYPE_INTERSECTIONtoken to represent the ampersand character inside intersection types - Thanks to Jaroslav Hanslík (@kukulich) for the patch
- Includes a new
File::getMethodParametersnow supports the new PHP 8.1 readonly token- When constructor property promotion is used, a new
property_readonlyarray index is included in the return value- This is a boolean value indicating if the property is readonly
- If the readonly token is detected, a new
readonly_tokenarray index is included in the return value- This contains the token index of the readonly keyword
- Thanks to Juliette Reinders Folmer (@jrfnl) for the patch
- When constructor property promotion is used, a new
- Support for new PHP 8.1 readonly keyword has been added to the following sniffs:
Generic.PHP.LowerCaseKeywordPSR2.Classes.PropertyDeclarationSquiz.Commenting.BlockCommentSquiz.Commenting.DocCommentAlignmentSquiz.Commenting.VariableCommentSquiz.WhiteSpace.ScopeKeywordSpacing- Thanks to Juliette Reinders Folmer (@jrfnl) for the patches
- The parallel feature is now more efficient and runs faster in some situations due to improved process management
- Thanks to Sergei Morozov (@morozov) for the patch
- The list of installed coding standards now has consistent ordering across all platforms
- Thanks to Juliette Reinders Folmer (@jrfnl) for the patch
Generic.PHP.UpperCaseConstantandGeneric.PHP.LowerCaseConstantnow ignore type declarations- These sniffs now only report errors for
true/false/nullwhen used as values - Thanks to Juliette Reinders Folmer (@jrfnl) for the patch
- These sniffs now only report errors for
Generic.PHP.LowerCaseTypenow supports the PHP 8.1nevertype- Thanks to Jaroslav Hanslík (@kukulich) for the patch
- Fixed bug #3502 : A match statement within an array produces Squiz.Arrays.ArrayDeclaration.NoKeySpecified
- Fixed bug #3503 : Squiz.Commenting.FunctionComment.ThrowsNoFullStop false positive when one line
@throw - Fixed bug #3505 : The nullsafe operator is not counted in Generic.Metrics.CyclomaticComplexity
- Thanks to Mark Baker (@MarkBaker) for the patch
- Fixed bug #3526 : PSR12.Properties.ConstantVisibility false positive when using public final const syntax
- Thanks to Juliette Reinders Folmer (@jrfnl) for the patch
- Fixed bug #3530 : Line indented incorrectly false positive when using match-expression inside switch case
- Fixed bug #3534 : Name of typed enum tokenized as
T_GOTO_LABEL- Thanks to Juliette Reinders Folmer (@jrfnl) for the patch
- Fixed bug #3546 : Tokenizer/PHP: bug fix - parent/static keywords in class instantiations
- Thanks to Juliette Reinders Folmer (@jrfnl) for the patch
- Fixed bug #3550 : False positive from PSR2.ControlStructures.SwitchDeclaration.TerminatingComment when using trailing comment
- Thanks to Juliette Reinders Folmer (@jrfnl) for the patch
- Fixed bug #3575: Squiz.Scope.MethodScope misses visibility keyword on previous line
- Thanks to Juliette Reinders Folmer (@jrfnl) for the patch
- Fixed bug #3604: Tokenizer/PHP: bug fix for double quoted strings using
${- Thanks to Juliette Reinders Folmer (@jrfnl) for the patch