github PHPCSStandards/PHP_CodeSniffer 3.11.0
3.11.0 - 2024-11-12

one day ago

Added

  • Runtime support for PHP 8.4. All known PHP 8.4 deprecation notices have been fixed.
    • Syntax support for new PHP 8.4 features will follow in a future release.
    • If you find any PHP 8.4 deprecation notices which were missed, please report them.
    • Thanks to Juliette Reinders Folmer for the patches.
  • Tokenizer support for PHP 8.3 "yield from" expressions with a comment between the keywords. #529, #647
    • Sniffs explicitly handling T_YIELD_FROM tokens may need updating. The PR description contains example code for use by sniff developers.
    • Additionally, the following sniff has been updated to support "yield from" expressions with comments:
      • Generic.WhiteSpace.LanguageConstructSpacing
    • Thanks to Juliette Reinders Folmer for the patch.
  • New Generic.WhiteSpace.HereNowdocIdentifierSpacing sniff. #586, #637
    • Forbid whitespace between the <<< and the identifier string in heredoc/nowdoc start tokens.
    • Thanks to Juliette Reinders Folmer for the patch.
  • New Generic.Strings.UnnecessaryHeredoc sniff. #633
    • Warns about heredocs without interpolation or expressions in the body text and can auto-fix these to nowdocs.
    • Thanks to Juliette Reinders Folmer for the patch.
  • Documentation for the following sniffs:

Changed

  • The Common::getSniffCode() method will now throw an InvalidArgumentException exception if an invalid $sniffClass is passed. #524, #625
  • Documentation generated using the --generator=... feature will now always be presented in natural order based on the sniff name(s). #668
  • Minor improvements to the display of runtime information. #658
  • Squiz.Commenting.PostStatementComment: trailing annotations in PHP files will now be reported under a separate, non-auto-fixable error code AnnotationFound. #560, #627
    • This prevents (tooling related) annotations from taking on a different meaning when moved by the fixer.
    • The separate error code also allows for selectively excluding it to prevent the sniff from triggering on trailing annotations, while still forbidding other trailing comments.
    • Thanks to Rodrigo Primo for the patch.
  • Squiz.ControlStructures.ForEachLoopDeclaration: the SpacingAfterOpen error code has been replaced by the SpaceAfterOpen error code. The latter is a pre-existing code. The former appears to have been a typo. #582
  • The following sniff(s) have received efficiency improvements:
  • Various housekeeping, including improvements to the tests and documentation.

Fixed

  • Fixed bug #3808 : Generic.WhiteSpace.ScopeIndent would throw false positive for tab indented multi-token yield from expression.
  • Fixed bug #630 : The tokenizer could inadvertently transform "normal" parentheses to DNF parentheses, when a function call was preceded by a switch-case / alternative syntax control structure colon.
  • Fixed bug #645 : On PHP 5.4, if yield was used as the declaration name for a function declared to return by reference, the function name would incorrectly be tokenized as T_YIELD instead of T_STRING.
  • Fixed bug #647 : Tokenizer not applying tab replacement in single token "yield from" keywords.
  • Fixed bug #647 : Generic.WhiteSpace.DisallowSpaceIndent did not flag space indentation in multi-line yield from.
  • Fixed bug #647 : Generic.WhiteSpace.DisallowTabIndent did not flag tabs inside yield from.
  • Fixed bug #652 : Generic.NamingConventions.ConstructorName: false positives for PHP-4 style calls to PHP-4 style parent constructor when a method with the same name as the parent class was called on another class.
  • Fixed bug #652 : Generic.NamingConventions.ConstructorName: false negatives for PHP-4 style calls to parent constructor for function calls with whitespace and comments in unconventional places.
  • Fixed bug #653 : Generic.Classes.DuplicateClassName : the sniff did not skip namespace keywords used as operators, which could lead to false positives.
  • Fixed bug #653 : Generic.Classes.DuplicateClassName : sniff going into an infinite loop during live coding.
  • Fixed bug #653 : Generic.Classes.DuplicateClassName : false positives/negatives when a namespace declaration contained whitespace or comments in unconventional places.
  • Fixed bug #653 : Generic.Classes.DuplicateClassName : namespace for a file going in/out of PHP was not remembered/applied correctly.

Statistics

Closed: 4 issues
Merged: 42 pull requests

If you like to stay informed about releases and more, follow @phpcs on Mastodon or @PHP_CodeSniffer on X.

Please consider funding the PHP_CodeSniffer project. If you already do so: thank you!

Don't miss a new PHP_CodeSniffer release

NewReleases is sending notifications on new releases.