Skip to content

Releases: PHPCSStandards/PHP_CodeSniffer

3.11.3 - 2025-01-23

23 Jan 17:38
3.11.3
ba05f99
Compare
Choose a tag to compare

Changed

  • Generic.ControlStructures.InlineControlStructure no longer unnecessarily listens for T_SWITCH tokens. #595
  • Squiz.Functions.FunctionDeclarationArgumentSpacing: improvements to error message for SpaceBeforeComma error. #783
  • The following sniff(s) have received efficiency improvements:
  • Various housekeeping, including improvements to the tests and documentation.

Fixed

  • Fixed bug #620 : Squiz.Functions.FunctionDeclarationArgumentSpacing: newlines after type will now be handled by the fixer. This also prevents a potential fixer conflict.
  • Fixed bug #782 : Tokenizer/PHP: prevent an "Undefined array key" notice during live coding for unfinished arrow functions.
  • Fixed bug #783 : Squiz.Functions.FunctionDeclarationArgumentSpacing: new line after reference token was not flagged nor fixed.
  • Fixed bug #783 : Squiz.Functions.FunctionDeclarationArgumentSpacing: new line after variadic token was not flagged nor fixed.
  • Fixed bug #783 : Squiz.Functions.FunctionDeclarationArgumentSpacing: new line before/after the equal sign for default values was not flagged nor fixed when equalsSpacing was set to 0.
  • Fixed bug #783 : Squiz.Functions.FunctionDeclarationArgumentSpacing: fixer conflict when a new line is found before/after the equal sign for default values and equalsSpacing was set to 1.
  • Fixed bug #783 : Squiz.Functions.FunctionDeclarationArgumentSpacing: fixer for spacing before/after equal sign could inadvertently remove comment.
  • Fixed bug #783 : Squiz.Functions.FunctionDeclarationArgumentSpacing: fixer will now handle comments between the end of a parameter and a comma more cleanly.
  • Fixed bug #784 : Squiz.WhiteSpace.FunctionSpacing: prevent fixer conflict when a multi-line docblock would start on the same line as the function close curly being examined.

Statistics

Closed: 0 issues
Merged: 14 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!

3.11.2 - 2024-12-11

11 Dec 17:15
3.11.2
1368f4a
Compare
Choose a tag to compare

Changed

  • Generators/HTML + Markdown: the output will now be empty (no page header/footer) when there are no docs to display. #687
    • This is in line with the Text Generator which already didn't produce output if there are no docs.
    • Thanks to Juliette Reinders Folmer for the patch.
  • Generators/HTML: only display a Table of Contents when there is more than one sniff with documentation. #697
  • Generators/HTML: improved handling of line breaks in <standard> blocks. #723
  • Generators/Markdown: improved compatibility with the variety of available markdown parsers. #722
  • Generators/Markdown: improved handling of line breaks in <standard> blocks. #737
    • This prevents additional paragraphs from being displayed as code blocks.
    • Thanks to Juliette Reinders Folmer for the patch.
  • Generic.NamingConventions.UpperCaseConstantName: the exact token containing the non-uppercase constant name will now be identified with more accuracy. #665
  • Generic.Functions.OpeningFunctionBraceKernighanRitchie: minor improvement to the error message wording. #736
  • Various housekeeping, including improvements to the tests and documentation.

Fixed

  • Fixed bug #527 : Squiz.Arrays.ArrayDeclaration: short lists within a foreach condition should be ignored.
  • Fixed bug #665 : Generic.NamingConventions.UpperCaseConstantName: false positives and false negatives when code uses unconventional spacing and comments when calling define().
  • Fixed bug #665 : Generic.NamingConventions.UpperCaseConstantName: false positive when a constant named DEFINE is encountered.
  • Fixed bug #665 : Generic.NamingConventions.UpperCaseConstantName: false positive for attribute class called define.
  • Fixed bug #665 : Generic.NamingConventions.UpperCaseConstantName: false positive when handling the instantiation of a class named define.
  • Fixed bug #688 : Generators/Markdown could leave error_reporting in an incorrect state.
  • Fixed bug #698 : Generators/Markdown : link in the documentation footer would not parse as a link.
  • Fixed bug #738 : Generators/Text: stray blank lines after code sample titles.
  • Fixed bug #739 : Generators/HTML + Markdown: multi-space whitespace within a code sample title was folded into a single space.

Other

  • On December 1st, one year after the repo was abandoned and revived, a retrospective of the past year was published for funders.
    • This retrospective is publicly available and also provides some insights into what's to come in the new year.

Statistics

Closed: 2 issues
Merged: 52 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!

3.11.1 - 2024-11-16

16 Nov 12:35
3.11.1
19473c3
Compare
Choose a tag to compare

Changed

Fixed

  • Fixed bug #674 : Generic.WhiteSpace.HereNowdocIdentifierSpacing broken XML documentation
  • Fixed bug #675 : InvalidArgumentException when a ruleset includes a sniff by file name and the included sniff does not comply with the PHPCS naming conventions.
    • Notwithstanding this fix, it is strongly recommended to ensure custom sniff classes comply with the PHPCS naming conventions.
    • Thanks to Juliette Reinders Folmer for the patch.

New Contributors

The PHP_CodeSniffer project is happy to welcome the following new contributors:
@MatmaRex

Statistics

Closed: 1 issue
Merged: 11 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!

3.11.0 - 2024-11-12

12 Nov 11:46
3.11.0
70c08f8
Compare
Choose a tag to compare

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!

3.10.3 - 2024-09-18

18 Sep 11:15
3.10.3
62d3299
Compare
Choose a tag to compare

Changed

Fixed

  • Fixed bug #553 : Squiz.Classes.SelfMemberReference: false negative(s) when namespace operator was encountered between the namespace declaration and the OO declaration.
  • Fixed bug #579 : AbstractPatternSniff: potential PHP notice during live coding.
  • Fixed bug #580 : Squiz.Formatting.OperatorBracket: potential PHP notice during live coding.
  • Fixed bug #581 : PSR12.ControlStructures.ControlStructureSpacing: prevent fixer conflict by correctly handling multiple empty newlines before the first condition in a multi-line control structure.
  • Fixed bug #585 : Tokenizer not applying tab replacement in heredoc/nowdoc openers.
  • Fixed bug #588 : Squiz.PHP.EmbeddedPhp false positive when checking spaces after a PHP short open tag.
  • Fixed bug #597 : Generic.PHP.LowerCaseKeyword did not flag nor fix non-lowercase anonymous class keywords.
  • Fixed bug #598 : Squiz.PHP.DisallowMultipleAssignments: false positive on assignments to variable property on object stored in array.
  • Fixed bug #608 : Squiz.Functions.MultiLineFunctionDeclaration did not take (parameter) attributes into account when checking for one parameter per line.

Other


New Contributors

The PHP_CodeSniffer project is happy to welcome the following new contributors:
@maryo

Statistics

Closed: 4 issues
Merged: 19 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!

3.10.2 - 2024-07-22

22 Jul 00:00
3.10.2
86e5f5d
Compare
Choose a tag to compare

Changed

Fixed

  • Fixed bug #513 : Generic.Functions.FunctionCallArgumentSpacing did not ignore the body of a match expressions passed as a function argument, which could lead to false positives.
  • Fixed bug #533 : Generic.WhiteSpace.DisallowTabIndent: tab indentation for heredoc/nowdoc closers will no longer be auto-fixed to prevent parse errors. The issue will still be reported.
    • The error code for heredoc/nowdoc indentation using tabs has been made more specific - TabsUsedHeredocCloser - to allow for selectively excluding the indentation check for heredoc/nowdoc closers.
    • Thanks to Juliette Reinders Folmer for the patch
  • Fixed bug #534 : Generic.WhiteSpace.DisallowSpaceIndent did not report on space indentation for PHP 7.3 flexible heredoc/nowdoc closers.
    • Closers using space indentation will be reported with a dedicated error code: SpacesUsedHeredocCloser.
    • Thanks to Juliette Reinders Folmer for the patch
  • Fixed bug #537 : Squiz.PHP.DisallowMultipleAssignments false positive for list assignments at the start of a new PHP block after an embedded PHP statement.
  • Fixed bug #551 : Squiz.PHP.DisallowMultipleAssignments prevent false positive for function parameters during live coding.
  • Fixed bug #554 : Generic.CodeAnalysis.UselessOverridingMethod edge case false negative when the call to the parent method would end on a PHP close tag.
  • Fixed bug #555 : Squiz.Classes.SelfMemberReference edge case false negative when the namespace declaration would end on a PHP close tag.

New Contributors

The PHP_CodeSniffer project is happy to welcome the following new contributor:
@biinari (with a whopping 9 merged PRs!)

We also welcome @klausi back to the project.

Furthermore, the project is happy to welcome @JetBrains as a corporate funder for the project, joining @Automattic, @humanmade and @godaddy.

Statistics

Closed: 2 issues
Merged: 30 pull requests

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

3.10.1 - 2024-05-22

22 May 22:11
3.10.1
8f90f7a
Compare
Choose a tag to compare

Added

  • Documentation for the following sniffs:
    • Generic.Commenting.DocComment
    • Thanks to Rodrigo Primo for the patch.

Changed

  • The following have received efficiency improvements:
  • Various housekeeping, including improvements to the tests and documentation.

Fixed

  • Fixed bug #110, #437, #475: File::findStartOfStatement(): the start of statement/expression determination for tokens in parentheses/short array brackets/others scopes, nested within match expressions, was incorrect in most cases.
    The trickle down effect of the bug fixes made to the File::findStartOfStatement() method, is that the Generic.WhiteSpace.ScopeIndent and the PEAR.WhiteSpace.ScopeIndent sniffs should now be able to correctly determine and fix the indent for match expressions containing nested expressions.
    These fixes also fix an issue with the Squiz.Arrays.ArrayDeclaration sniff and possibly other, unreported bugs.
  • Fixed bug #504: The tokenizer could inadvertently mistake the last parameter in a function call using named arguments for a DNF type.
  • Fixed bug #508: Tokenizer/PHP: extra hardening against handling parse errors in the type handling layer.

Statistics

Closed: 5 issues
Merged: 7 pull requests

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

Full Changelog: 3.10.0...3.10.1

3.10.0 - 2024-05-20

20 May 09:11
3.10.0
57e0980
Compare
Choose a tag to compare

Added

  • Tokenizer support for PHP 8.2 Disjunctive Normal Form (DNF) types. #3731, #387, #461
    • Includes new T_TYPE_OPEN_PARENTHESIS and T_TYPE_CLOSE_PARENTHESIS tokens to represent the parentheses in DNF types.
    • These new tokens, like other parentheses, will have the parenthesis_opener and parenthesis_closer token array indexes set and the tokens between them will have the nested_parenthesis index.
    • The File::getMethodProperties(), File::getMethodParameters() and File::getMemberProperties() methods now all support DNF types. #471, #472, #473
    • Additionally, the following sniff has been updated to support DNF types:
      • Generic.PHP.LowerCaseType #478
    • Thanks to Juliette Reinders Folmer for the patches.
  • Documentation for the following sniffs:
    • Squiz.WhiteSpace.FunctionClosingBraceSpace
    • Thanks to Przemek Hernik for the patch.

Changed

Fixed

  • Fixed bug #466 : Generic.Functions.CallTimePassByReference was not flagging call-time pass-by-reference in class instantiations using the self/parent/static keywords.
  • Fixed bug #494 : edge case bug in tokenization of an empty block comment.
  • Fixed bug #494 : edge case bug in tokenization of an empty single-line DocBlock.
  • Fixed bug #499 : Generic.ControlStructures.InlineControlStructure now handles statements with a comment between else and if correctly.

New Contributors

The PHP_CodeSniffer project is happy to welcome the following new contributors:
@przemekhernik

Statistics

Closed: 2 issues
Merged: 26 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!

Full Changelog: 3.9.2...3.10.0

3.9.2 - 2024-04-24

23 Apr 20:59
3.9.2
aac1f6f
Compare
Choose a tag to compare

Changed

  • The Generic.ControlStructures.DisallowYodaConditions sniff no longer listens for the null coalesce operator. #458
  • Various housekeeping, including improvements to the tests and documentation.

Fixed

  • Fixed bug #381 : Squiz.Commenting.ClosingDeclarationComment could throw the wrong error when the close brace being examined is at the very end of a file.
  • Fixed bug #385 : Generic.CodeAnalysis.JumbledIncrementer improved handling of parse errors/live coding.
  • Fixed bug #394 : Generic.Functions.CallTimePassByReference was not flagging call-time pass-by-reference in anonymous class instantiations
  • Fixed bug #420 : PEAR.Functions.FunctionDeclaration could run into a blocking PHP notice while fixing code containing a parse error.
  • Fixed bug #421 : File::getMethodProperties() small performance improvement & more defensive coding.
  • Fixed bug #423 : PEAR.WhiteSpace.ScopeClosingBrace would have a fixer conflict with itself when a close tag was preceded by non-empty inline HTML.
  • Fixed bug #424 : PSR2.Classes.ClassDeclaration using namespace relative interface names in the extends/implements part of a class declaration would lead to a fixer conflict.
  • Fixed bug #427 : Squiz.Operators.OperatorSpacing would have a fixer conflict with itself when an operator was preceeded by a new line and the previous line ended in a comment.
  • Fixed bug #430 : Squiz.ControlStructures.ForLoopDeclaration: fixed potential undefined array index notice
  • Fixed bug #431 : PSR2.Classes.ClassDeclaration will no longer try to auto-fix multi-line interface implements statements if these are interlaced with comments on their own line. This prevents a potential fixer conflict.
  • Fixed bug #453 : Arrow function tokenization was broken when the return type was a stand-alone true or false; or contained true or false as part of a union type.

Other

  • ESLint 9.0 has been released and changes the supported configuration file format.
    The (deprecated) Generic.Debug.ESLint sniff only supports the "old" configuration file formats and when using the sniff to run ESLint, the ESLINT_USE_FLAT_CONFIG=false environment variable will need to be set when using ESLint >= 9.0.
    For more information, see #436.

Statistics

Closed: 0 issues
Merged: 22 pull requests

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

If you like what you see, please consider funding the PHP_CodeSniffer project. If you already do so: thank you!

3.9.1 - 2024-03-31

31 Mar 21:44
3.9.1
267a440
Compare
Choose a tag to compare

Added

  • Documentation for the following sniffs:
    • Generic.PHP.RequireStrictTypes
    • Squiz.WhiteSpace.MemberVarSpacing
    • Squiz.WhiteSpace.ScopeClosingBrace
    • Squiz.WhiteSpace.SuperfluousWhitespace
    • Thanks to Jay McPartland and Rodrigo Primo for the patches.

Changed

  • The following sniffs have received performance related improvements:
    • Generic.CodeAnalysis.UselessOverridingMethod
    • Generic.Files.ByteOrderMark
    • Thanks to Rodrigo Primo for the patches.
  • Performance improvement for the "Diff" report. Should be most notable for Windows users. #355
  • The test suite has received some performance improvements. Should be most notable for contributors using Windows. #351
    • External standards with sniff tests using the PHP_CodeSniffer native test framework will also benefit from these changes.
    • Thanks to Juliette Reinders Folmer for the patch.
  • Various housekeeping, including improvements to the tests and documentation.

Fixed

  • Fixed bug #289 : Squiz.WhiteSpace.OperatorSpacing and PSR12.Operators.OperatorSpacing : improved fixer conflict protection by more strenuously avoiding handling operators in declare statements.
  • Fixed bug #366 : Generic.CodeAnalysis.UselessOverridingMethod : prevent false negative when the declared method name and the called method name do not use the same case.
  • Fixed bug #368 : Squiz.Arrays.ArrayDeclaration fixer did not handle static closures correctly when moving array items to their own line.
  • Fixed bug #404 : Test framework : fixed PHP 8.4 deprecation notice.

New Contributors

The PHP_CodeSniffer project is happy to welcome the following new contributors:
@jaymcp @jpoliveira08

Statistics

Closed: 2 issues
Merged: 52 pull requests

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