Releases: PHPCSStandards/PHP_CodeSniffer
3.12.0 - 2025-03-18
Added
- Added support for PHP 8.4 final properties to File::getMemberProperties() through a new
is_final
array index in the return value. #834- Thanks to Daniel Scherzer for the patch.
- Generators/HTML: each section title now has a unique anchor link, which can be copied when hovering over a title. #859
- This should make sharing a link to a specific section of the documentation more straight-forward.
- Thanks to Juliette Reinders Folmer for the patch.
- Documentation for the following sniffs:
- Squiz.Classes.ClassFileName
- Squiz.Classes.ValidClassName
- Thanks to Brian Dunne for the patches.
Changed
- PHPCBF: the messaging when no fixable errors are found will now distinguish between "No violations" (at all) versus "No fixable errors". #806
- Thanks to Peter Wilson for the patch.
- The
-h
(Help) option now contains a more extensive list of "config" options which can be set. #809- Thanks to Juliette Reinders Folmer for the patch.
- Improved error message when invalid sniff codes are supplied to
--sniffs
or--exclude
command line arguments. #344- Thanks to Dan Wallis for the patch.
- Improved error message when an invalid generator name is supplied to the
--generator
command line argument. #709, #771- The generator name will now also always be handled case-insensitively, independently of the OS used.
- Thanks to Rodrigo Primo for the patch.
- The user will be shown an informative error message for sniffs missing one of the required methods. #873
- Previously this would result in a fatal error.
- Thanks to Juliette Reinders Folmer for the patch.
- Ruleset processing will now be allowed to run to its conclusion - barring critical errors - before displaying all ruleset errors in one go. #857
- Previously an error in a ruleset would cause PHPCS to exit immediately and show only one error at a time.
- Thanks to Juliette Reinders Folmer for the patch.
- Generators: XML documentation files which don't contain any actual documentation will now silently be ignored. #755
- Thanks to Juliette Reinders Folmer for the patch.
- Generators: when the
title
attribute is missing, the documentation generation will now fall back to the sniff name as the title. #820- Thanks to Juliette Reinders Folmer for the patch.
- Generators: cleaner output based on the elements of the documentation which are available. #819, #821
- Thanks to Juliette Reinders Folmer for the patch.
- Generators/HTML: improved display of code tables by using semantic HTML. #854
- Thanks to Juliette Reinders Folmer for the patch.
- Squiz.Classes.ClassFileName: recommend changing the file name instead of changing the class name. #845
- This prevents unactionable recommendations due to the file name not translating to a valid PHP symbol name.
- Thanks to Juliette Reinders Folmer for the patch.
- Squiz.Functions.FunctionDeclarationArgumentSpacing: incorrect spacing after a comma followed by a promoted property has an improved error message and will now be flagged with the
SpacingBeforePropertyModifier
orNoSpaceBeforePropertyModifier
error codes. #792- This was previously already flagged, but using either the
SpacingBeforeHint
orNoSpaceBeforeHint
error code, which was misleading. - Thanks to Juliette Reinders Folmer for the patch.
- This was previously already flagged, but using either the
- Squiz.Functions.FunctionDeclarationArgumentSpacing: the sniff will now also check the spacing after property modifiers for promoted properties in constructor methods. #792
- Thanks to Juliette Reinders Folmer for the patch.
- Squiz.WhiteSpace.ScopeKeywordSpacing: the sniff will now also check the spacing after the
final
andabstract
modifier keywords. #604- Thanks to Klaus Purer for the patch.
- The following sniff(s) have received efficiency improvements:
- Squiz.WhiteSpace.ScopeKeywordSpacing
- Thanks to Juliette Reinders Folmer for the patches.
- Incorrectly set inline properties (in test case files) will be silently ignored again. #884
- This removes the
Internal.PropertyDoesNotExist
error code. - Thanks to Juliette Reinders Folmer for the patch.
- This removes the
- The AbstractMethodUnitTest class will now flag duplicate test case markers in a test case file. #773
- Thanks to Juliette Reinders Folmer for the patch.
- Various housekeeping, including improvements to the tests and documentation.
- Thanks to Asis Pattisahusiwa, Dan Wallis, Rodrigo Primo and Juliette Reinders Folmer for their contributions.
Deprecated
All deprecation are slated for removal in PHP_CodeSniffer 4.0.
- Support for sniffs not implementing the PHPCS
Sniff
interface. See #694.- Thanks to Juliette Reinders Folmer for the patch.
- Support for including sniffs which don't comply with the PHPCS naming conventions (by referencing the sniff file directly). See #689.
- Thanks to Juliette Reinders Folmer for the patch.
- Support for external standards named "Internal". See #799.
- Thanks to Juliette Reinders Folmer for the patch.
- The following Generator methods are now (soft) deprecated. See #755:
PHP_CodeSniffer\Generators\Text::printTitle()
in favour ofPHP_CodeSniffer\Generators\Text::getFormattedTitle()
PHP_CodeSniffer\Generators\Text::printTextBlock()
in favour ofPHP_CodeSniffer\Generators\Text::getFormattedTextBlock()
PHP_CodeSniffer\Generators\Text::printCodeComparisonBlock()
in favour ofPHP_CodeSniffer\Generators\Text::getFormattedCodeComparisonBlock()
PHP_CodeSniffer\Generators\Markdown::printHeader()
in favour ofPHP_CodeSniffer\Generators\Markdown::getFormattedHeader()
PHP_CodeSniffer\Generators\Markdown::printFooter()
in favour ofPHP_CodeSniffer\Generators\Markdown::getFormattedFooter()
PHP_CodeSniffer\Generators\Markdown::printTextBlock()
in favour ofPHP_CodeSniffer\Generators\Markdown::getFormattedTextBlock()
PHP_CodeSniffer\Generators\Markdown::printCodeComparisonBlock()
in favour ofPHP_CodeSniffer\Generators\Markdown::getFormattedCodeComparisonBlock()
PHP_CodeSniffer\Generators\HTML::printHeader()
in favour ofPHP_CodeSniffer\Generators\HTML::getFormattedHeader()
PHP_CodeSniffer\Generators\HTML::printToc()
in favour ofPHP_CodeSniffer\Generators\HTML::getFormattedToc()
PHP_CodeSniffer\Generators\HTML::printFooter()
in favour ofPHP_CodeSniffer\Generators\HTML::getFormattedFooter()
PHP_CodeSniffer\Generators\HTML::printTextBlock()
in favour ofPHP_CodeSniffer\Generators\HTML::getFormattedTextBlock()
PHP_CodeSniffer\Generators\HTML::printCodeComparisonBlock()
in favour ofPHP_CodeSniffer\Generators\HTML::getFormattedCodeComparisonBlock()
- Thanks to Juliette Reinders Folmer for the patch.
Fixed
- Fixed bug #794 : Generators: prevent fatal error when the XML documentation does not comply with the expected format.
- It is recommended to validate XML documentation files against the XSD file: https://phpcsstandards.github.io/PHPCSDevTools/phpcsdocs.xsd
- Thanks to Juliette Reinders Folmer for the patch.
- Fixed bug #814 : Generic.NamingConventions.ConstructorName: prevent potential fatal errors during live coding.
- Thanks to Juliette Reinders Folmer for the patch.
- Fixed bug #816 : File::getDeclarationName(): prevent incorrect result for unfinished closures during live coding.
- Thanks to Juliette Reinders Folmer for the patch.
- Fixed bug #817 : Squiz.Classes.ValidClassName: ignore comments when determining the name to be validated.
- Thanks to Juliette Reinders Folmer for the patch.
- Fixed bug #825 : Squiz.Classes.ClassDeclaration: false positives when the next thing after a class was a function with an attribute attached.
- Thanks to Juliette Reinders Folmer for the patch.
- Fixed bug #826 : Squiz.WhiteSpace.FunctionSpacing: prevent incorrect some results when attributes are attached to a function.
- Thanks to Juliette Reinders Folmer for the patch.
- Fixed bug #827 : PEAR.Functions.FunctionDeclaration: fixer conflict over an unfinished closure during live coding.
- Thanks to Juliette Reinders Folmer for the patch.
- Fixed bug #828 : Squiz.WhiteSpace.MemberVarSpacing: allow for
readonly
properties.- Thanks to Juliette Reinders Folmer for the patch.
- Fixed bug #832 : Squiz.WhiteSpace.MemberVarSpacing: prevent potential fixer conflict during live coding.
- Thanks to Juliette Reinders Folmer for the patch.
- Fixed bug #833 : Squiz.PHP.EmbeddedPhp: fixer conflict when a PHP open tag for a multi-line snippet is found on the same line as a single-line embedded PHP snippet.
- Thanks to Juliette Reinders Folmer for the patch.
- Fixed bug #833 : Squiz.PHP.EmbeddedPhp: incorrect indent calculation in certain specific situa...
3.11.3 - 2025-01-23
Changed
- Generic.ControlStructures.InlineControlStructure no longer unnecessarily listens for T_SWITCH tokens. #595
- Thanks to Rodrigo Primo for the patch.
- Squiz.Functions.FunctionDeclarationArgumentSpacing: improvements to error message for
SpaceBeforeComma
error. #783- Thanks to Juliette Reinders Folmer for the patch.
- The following sniff(s) have received efficiency improvements:
- Squiz.Functions.FunctionDeclarationArgumentSpacing
- Thanks to Dan Wallis and Juliette Reinders Folmer for the patches.
- Various housekeeping, including improvements to the tests and documentation.
- Thanks to Michał Bundyra, Rodrigo Primo and Juliette Reinders Folmer for their contributions.
Fixed
- Fixed bug #620 : Squiz.Functions.FunctionDeclarationArgumentSpacing: newlines after type will now be handled by the fixer. This also prevents a potential fixer conflict.
- Thanks to Dan Wallis for the patch.
- Fixed bug #782 : Tokenizer/PHP: prevent an "Undefined array key" notice during live coding for unfinished arrow functions.
- Thanks to Juliette Reinders Folmer for the patch.
- Fixed bug #783 : Squiz.Functions.FunctionDeclarationArgumentSpacing: new line after reference token was not flagged nor fixed.
- Thanks to Juliette Reinders Folmer for the patch.
- Fixed bug #783 : Squiz.Functions.FunctionDeclarationArgumentSpacing: new line after variadic token was not flagged nor fixed.
- Thanks to Juliette Reinders Folmer for the patch.
- 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 to0
.- Thanks to Juliette Reinders Folmer for the patch.
- 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 to1
.- Thanks to Juliette Reinders Folmer for the patch.
- Fixed bug #783 : Squiz.Functions.FunctionDeclarationArgumentSpacing: fixer for spacing before/after equal sign could inadvertently remove comment.
- Thanks to Juliette Reinders Folmer for the patch.
- Fixed bug #783 : Squiz.Functions.FunctionDeclarationArgumentSpacing: fixer will now handle comments between the end of a parameter and a comma more cleanly.
- Thanks to Juliette Reinders Folmer for the patch.
- 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.
- Thanks to Klaus Purer for the patch
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
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
- Thanks to Juliette Reinders Folmer for the patch.
- Generators/HTML: improved handling of line breaks in
<standard>
blocks. #723- Thanks to Juliette Reinders Folmer for the patch.
- Generators/Markdown: improved compatibility with the variety of available markdown parsers. #722
- Thanks to Juliette Reinders Folmer for the patch.
- 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
- Thanks to Rodrigo Primo for the patch.
- Generic.Functions.OpeningFunctionBraceKernighanRitchie: minor improvement to the error message wording. #736
- Thanks to Juliette Reinders Folmer for the patch.
- Various housekeeping, including improvements to the tests and documentation.
- Thanks to Rodrigo Primo and Juliette Reinders Folmer for their contributions.
Fixed
- Fixed bug #527 : Squiz.Arrays.ArrayDeclaration: short lists within a foreach condition should be ignored.
- Thanks to Rodrigo Primo for the patch.
- Fixed bug #665 : Generic.NamingConventions.UpperCaseConstantName: false positives and false negatives when code uses unconventional spacing and comments when calling
define()
.- Thanks to Rodrigo Primo for the patch.
- Fixed bug #665 : Generic.NamingConventions.UpperCaseConstantName: false positive when a constant named
DEFINE
is encountered.- Thanks to Rodrigo Primo for the patch.
- Fixed bug #665 : Generic.NamingConventions.UpperCaseConstantName: false positive for attribute class called
define
.- Thanks to Rodrigo Primo for the patch.
- Fixed bug #665 : Generic.NamingConventions.UpperCaseConstantName: false positive when handling the instantiation of a class named
define
.- Thanks to Rodrigo Primo for the patch.
- Fixed bug #688 : Generators/Markdown could leave error_reporting in an incorrect state.
- Thanks to Juliette Reinders Folmer for the patch.
- Fixed bug #698 : Generators/Markdown : link in the documentation footer would not parse as a link.
- Thanks to Juliette Reinders Folmer for the patch.
- Fixed bug #738 : Generators/Text: stray blank lines after code sample titles.
- Thanks to Juliette Reinders Folmer for the patch.
- Fixed bug #739 : Generators/HTML + Markdown: multi-space whitespace within a code sample title was folded into a single space.
- Thanks to Juliette Reinders Folmer for the patch.
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
Changed
- Output from the
--generator=...
feature will respect the OS-expected EOL char in more places. #671- Thanks to Juliette Reinders Folmer for the patch.
- Various housekeeping, including improvements to the tests and documentation.
- Thanks to Bartosz Dziewoński and Juliette Reinders Folmer for their contributions.
Fixed
- Fixed bug #674 : Generic.WhiteSpace.HereNowdocIdentifierSpacing broken XML documentation
- Thanks to Juliette Reinders Folmer for the patch.
- 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
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.
- Forbid whitespace between the
- 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:
- Generic.Arrays.ArrayIndent
- Squiz.PHP.Heredoc
- Thanks to Rodrigo Primo and Juliette Reinders Folmer for the patches.
Changed
- The Common::getSniffCode() method will now throw an InvalidArgumentException exception if an invalid
$sniffClass
is passed. #524, #625- Thanks to Juliette Reinders Folmer for the patch.
- Documentation generated using the
--generator=...
feature will now always be presented in natural order based on the sniff name(s). #668- Thanks to Juliette Reinders Folmer for the patch.
- Minor improvements to the display of runtime information. #658
- Thanks to Juliette Reinders Folmer for the patch.
- 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 theSpaceAfterOpen
error code. The latter is a pre-existing code. The former appears to have been a typo. #582- Thanks to Dan Wallis for the patch.
- The following sniff(s) have received efficiency improvements:
- Generic.Classes.DuplicateClassName
- Generic.NamingConventions.ConstructorName
- Thanks to Rodrigo Primo and Juliette Reinders Folmer for the patches.
- Various housekeeping, including improvements to the tests and documentation.
- Thanks to Rodrigo Primo and Juliette Reinders Folmer for their contributions.
Fixed
- Fixed bug #3808 : Generic.WhiteSpace.ScopeIndent would throw false positive for tab indented multi-token yield from expression.
- Thanks to Juliette Reinders Folmer for the patch
- 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.
- Thanks to Juliette Reinders Folmer for the patch
- 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.
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug #647 : Tokenizer not applying tab replacement in single token "yield from" keywords.
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug #647 : Generic.WhiteSpace.DisallowSpaceIndent did not flag space indentation in multi-line yield from.
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug #647 : Generic.WhiteSpace.DisallowTabIndent did not flag tabs inside yield from.
- Thanks to Juliette Reinders Folmer for the patch
- 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.
- Thanks to Juliette Reinders Folmer for the patch
- 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.
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug #653 : Generic.Classes.DuplicateClassName : the sniff did not skip namespace keywords used as operators, which could lead to false positives.
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug #653 : Generic.Classes.DuplicateClassName : sniff going into an infinite loop during live coding.
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug #653 : Generic.Classes.DuplicateClassName : false positives/negatives when a namespace declaration contained whitespace or comments in unconventional places.
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug #653 : Generic.Classes.DuplicateClassName : namespace for a file going in/out of PHP was not remembered/applied correctly.
- Thanks to Juliette Reinders Folmer for the patch
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
Changed
- Various housekeeping, including improvements to the tests and documentation.
- Thanks to Rodrigo Primo and Juliette Reinders Folmer for their contributions.
Fixed
- Fixed bug #553 : Squiz.Classes.SelfMemberReference: false negative(s) when namespace operator was encountered between the namespace declaration and the OO declaration.
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug #579 : AbstractPatternSniff: potential PHP notice during live coding.
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug #580 : Squiz.Formatting.OperatorBracket: potential PHP notice during live coding.
- Thanks to Juliette Reinders Folmer for the patch
- 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.
- Thanks to Dan Wallis for the patch.
- Fixed bug #585 : Tokenizer not applying tab replacement in heredoc/nowdoc openers.
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug #588 : Squiz.PHP.EmbeddedPhp false positive when checking spaces after a PHP short open tag.
- Thanks to Rodrigo Primo for the patch.
- Fixed bug #597 : Generic.PHP.LowerCaseKeyword did not flag nor fix non-lowercase anonymous class keywords.
- Thanks to Marek Štípek for the patch.
- Fixed bug #598 : Squiz.PHP.DisallowMultipleAssignments: false positive on assignments to variable property on object stored in array.
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug #608 : Squiz.Functions.MultiLineFunctionDeclaration did not take (parameter) attributes into account when checking for one parameter per line.
- Thanks to Juliette Reinders Folmer for the patch
Other
- The provenance of PHAR files associated with a release can now be verified via GitHub Artifact Attestations using the GitHub CLI tool with the following command:
gh attestation verify [phpcs|phpcbf].phar -o PHPCSStandards
. #574- Thanks to Juliette Reinders Folmer for the patch.
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
Changed
- The following sniff(s) have received efficiency improvements:
- Generic.Functions.FunctionCallArgumentSpacing
- Thanks to Juliette Reinders Folmer for the patch.
- The array format of the information passed to the
Reports::generateFileReport()
method is now documented in the Reports interface. #523- Thanks to Juliette Reinders Folmer for the patch.
- Various housekeeping, including improvements to the tests and documentation.
- Thanks to Bill Ruddock, Dan Wallis, Klaus Purer, Rodrigo Primo and Juliette Reinders Folmer for their contributions.
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.
- Thanks to Juliette Reinders Folmer for the patch
- 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
- The error code for heredoc/nowdoc indentation using tabs has been made more specific -
- 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
- Closers using space indentation will be reported with a dedicated error code:
- Fixed bug #537 : Squiz.PHP.DisallowMultipleAssignments false positive for list assignments at the start of a new PHP block after an embedded PHP statement.
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug #551 : Squiz.PHP.DisallowMultipleAssignments prevent false positive for function parameters during live coding.
- Thanks to Rodrigo Primo for the patch.
- Fixed bug #554 : Generic.CodeAnalysis.UselessOverridingMethod edge case false negative when the call to the parent method would end on a PHP close tag.
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug #555 : Squiz.Classes.SelfMemberReference edge case false negative when the namespace declaration would end on a PHP close tag.
- Thanks to Juliette Reinders Folmer for the patch
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
Added
- Documentation for the following sniffs:
- Generic.Commenting.DocComment
- Thanks to Rodrigo Primo for the patch.
Changed
- The following have received efficiency improvements:
- Type handling in the PHP Tokenizer
- Thanks to Juliette Reinders Folmer for the patch.
- Various housekeeping, including improvements to the tests and documentation.
- Thanks to Juliette Reinders Folmer for their contributions.
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 theFile::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 theSquiz.Arrays.ArrayDeclaration
sniff and possibly other, unreported bugs.- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug #504: The tokenizer could inadvertently mistake the last parameter in a function call using named arguments for a DNF type.
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug #508: Tokenizer/PHP: extra hardening against handling parse errors in the type handling layer.
- Thanks to Juliette Reinders Folmer for the patch
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
Added
- Tokenizer support for PHP 8.2 Disjunctive Normal Form (DNF) types. #3731, #387, #461
- Includes new
T_TYPE_OPEN_PARENTHESIS
andT_TYPE_CLOSE_PARENTHESIS
tokens to represent the parentheses in DNF types. - These new tokens, like other parentheses, will have the
parenthesis_opener
andparenthesis_closer
token array indexes set and the tokens between them will have thenested_parenthesis
index. - The
File::getMethodProperties()
,File::getMethodParameters()
andFile::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.
- Includes new
- Documentation for the following sniffs:
- Squiz.WhiteSpace.FunctionClosingBraceSpace
- Thanks to Przemek Hernik for the patch.
Changed
- The help screens have received a face-lift for improved usability and readability. #447
- Thanks to Juliette Reinders Folmer for the patch and thanks to Colin Stewart, Gary Jones and @mbomb007 for reviewing.
- The Squiz.Commenting.ClosingDeclarationComment sniff will now also examine and flag closing comments for traits. #442
- Thanks to Rodrigo Primo for the patch.
- The following sniff(s) have efficiency improvements:
- Generic.Arrays.ArrayIndent
- Thanks to Rodrigo Primo for the patch.
- The autoloader will now always return a boolean value indicating whether it has loaded a class or not. #479
- Thanks to Juliette Reinders Folmer for the patch.
- Various housekeeping, including improvements to the tests and documentation.
- Thanks to Dan Wallis, Danny van der Sluijs, Rodrigo Primo and Juliette Reinders Folmer for their contributions.
Fixed
- Fixed bug #466 : Generic.Functions.CallTimePassByReference was not flagging call-time pass-by-reference in class instantiations using the self/parent/static keywords.
- Thanks to Rodrigo Primo for the patch.
- Fixed bug #494 : edge case bug in tokenization of an empty block comment.
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug #494 : edge case bug in tokenization of an empty single-line DocBlock.
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug #499 : Generic.ControlStructures.InlineControlStructure now handles statements with a comment between
else
andif
correctly.- Thanks to Rodrigo Primo for the patch.
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
Changed
- The Generic.ControlStructures.DisallowYodaConditions sniff no longer listens for the null coalesce operator. #458
- Thanks to Rodrigo Primo for the patch.
- Various housekeeping, including improvements to the tests and documentation.
- Thanks to Dan Wallis, Rodrigo Primo and Juliette Reinders Folmer for their contributions.
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.
- Thanks to Rodrigo Primo for the patch.
- Fixed bug #385 : Generic.CodeAnalysis.JumbledIncrementer improved handling of parse errors/live coding.
- Thanks to Rodrigo Primo for the patch.
- Fixed bug #394 : Generic.Functions.CallTimePassByReference was not flagging call-time pass-by-reference in anonymous class instantiations
- Thanks to Rodrigo Primo for the patch.
- Fixed bug #420 : PEAR.Functions.FunctionDeclaration could run into a blocking PHP notice while fixing code containing a parse error.
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug #421 : File::getMethodProperties() small performance improvement & more defensive coding.
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug #423 : PEAR.WhiteSpace.ScopeClosingBrace would have a fixer conflict with itself when a close tag was preceded by non-empty inline HTML.
- Thanks to Juliette Reinders Folmer for the patch
- 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.
- Thanks to Juliette Reinders Folmer for the patch
- 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.
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug #430 : Squiz.ControlStructures.ForLoopDeclaration: fixed potential undefined array index notice
- Thanks to Juliette Reinders Folmer for the patch
- 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.
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug #453 : Arrow function tokenization was broken when the return type was a stand-alone
true
orfalse
; or containedtrue
orfalse
as part of a union type.- Thanks to Juliette Reinders Folmer for the patch
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, theESLINT_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!