github PHPCSStandards/PHP_CodeSniffer 3.7.0
3.7.0 - 2022-06-13

latest releases: 3.11.0, 3.10.3, 3.10.2...
12 months ago

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 never type

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
    • This new syntax has been backfilled for PHP versions less than 8.1
    • Includes a new T_ENUM_CASE token to represent the case statements inside an enum
    • Thanks to Jaroslav Hanslík (@kukulich) for the patch
    • Thanks to Juliette Reinders Folmer (@jrfnl) for additional core and sniff support
  • 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_INTERSECTION token to represent the ampersand character inside intersection types
    • Thanks to Jaroslav Hanslík (@kukulich) for the patch
  • File::getMethodParameters now supports the new PHP 8.1 readonly token
    • When constructor property promotion is used, a new property_readonly array 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_token array 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
  • Support for new PHP 8.1 readonly keyword has been added to the following sniffs:
    • Generic.PHP.LowerCaseKeyword
    • PSR2.Classes.PropertyDeclaration
    • Squiz.Commenting.BlockComment
    • Squiz.Commenting.DocCommentAlignment
    • Squiz.Commenting.VariableComment
    • Squiz.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.UpperCaseConstant and Generic.PHP.LowerCaseConstant now ignore type declarations
    • These sniffs now only report errors for true/false/null when used as values
    • Thanks to Juliette Reinders Folmer (@jrfnl) for the patch
  • Generic.PHP.LowerCaseType now supports the PHP 8.1 never type
    • 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
  • 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

Don't miss a new PHP_CodeSniffer release

NewReleases is sending notifications on new releases.