PHPCSStandards/composer-installer
### [`v0.7.2`](https://togithub.com/PHPCSStandards/composer-installer/releases/tag/v0.7.2)
[Compare Source](https://togithub.com/PHPCSStandards/composer-installer/compare/v0.7.1...v0.7.2)
#### What's Changed
- Add details regarding QA automation in CONTRIBUTING.md file. by [@Potherca](https://togithub.com/Potherca) in [https://github.com/PHPCSStandards/composer-installer/pull/133](https://togithub.com/PHPCSStandards/composer-installer/pull/133)
- Add mention of Composer and PHP compatibility to project README. by [@Potherca](https://togithub.com/Potherca) in [https://github.com/PHPCSStandards/composer-installer/pull/132](https://togithub.com/PHPCSStandards/composer-installer/pull/132)
- Composer: tweak PHPCS version constraint by [@jrfnl](https://togithub.com/jrfnl) in [https://github.com/PHPCSStandards/composer-installer/pull/152](https://togithub.com/PHPCSStandards/composer-installer/pull/152)
- CONTRIBUTING: remove duplicate code of conduct by [@jrfnl](https://togithub.com/jrfnl) in [https://github.com/PHPCSStandards/composer-installer/pull/148](https://togithub.com/PHPCSStandards/composer-installer/pull/148)
- Document release process by [@Potherca](https://togithub.com/Potherca) in [https://github.com/PHPCSStandards/composer-installer/pull/118](https://togithub.com/PHPCSStandards/composer-installer/pull/118)
- Plugin::loadInstalledPaths(): `config-show` always shows all by [@jrfnl](https://togithub.com/jrfnl) in [https://github.com/PHPCSStandards/composer-installer/pull/154](https://togithub.com/PHPCSStandards/composer-installer/pull/154)
- README: minor tweaks by [@jrfnl](https://togithub.com/jrfnl) in [https://github.com/PHPCSStandards/composer-installer/pull/149](https://togithub.com/PHPCSStandards/composer-installer/pull/149)
- README: update with information about Composer >= 2.2 by [@jrfnl](https://togithub.com/jrfnl) in [https://github.com/PHPCSStandards/composer-installer/pull/141](https://togithub.com/PHPCSStandards/composer-installer/pull/141)
- Replace deprecated Sensiolabs security checker by [@paras-malhotra](https://togithub.com/paras-malhotra) in [https://github.com/PHPCSStandards/composer-installer/pull/130](https://togithub.com/PHPCSStandards/composer-installer/pull/130)
- Stabilize a condition by [@jrfnl](https://togithub.com/jrfnl) in [https://github.com/PHPCSStandards/composer-installer/pull/127](https://togithub.com/PHPCSStandards/composer-installer/pull/127)
- Update copyright year by [@jrfnl](https://togithub.com/jrfnl) in [https://github.com/PHPCSStandards/composer-installer/pull/138](https://togithub.com/PHPCSStandards/composer-installer/pull/138)
- Various minor tweaks by [@jrfnl](https://togithub.com/jrfnl) in [https://github.com/PHPCSStandards/composer-installer/pull/151](https://togithub.com/PHPCSStandards/composer-installer/pull/151)
##### CI/CD
- Change YamlLint config to prevent "truthy" warning. by [@Potherca](https://togithub.com/Potherca) in [https://github.com/PHPCSStandards/composer-installer/pull/144](https://togithub.com/PHPCSStandards/composer-installer/pull/144)
- GH Actions: PHP 8.1 has been released by [@jrfnl](https://togithub.com/jrfnl) in [https://github.com/PHPCSStandards/composer-installer/pull/139](https://togithub.com/PHPCSStandards/composer-installer/pull/139)
- Travis: line length tweaks by [@jrfnl](https://togithub.com/jrfnl) in [https://github.com/PHPCSStandards/composer-installer/pull/128](https://togithub.com/PHPCSStandards/composer-installer/pull/128)
- CI: Switch to GH Actions by [@jrfnl](https://togithub.com/jrfnl) in [https://github.com/PHPCSStandards/composer-installer/pull/137](https://togithub.com/PHPCSStandards/composer-installer/pull/137)
- CI: various updates by [@jrfnl](https://togithub.com/jrfnl) in [https://github.com/PHPCSStandards/composer-installer/pull/140](https://togithub.com/PHPCSStandards/composer-installer/pull/140)
#### New Contributors
- [@paras-malhotra](https://togithub.com/paras-malhotra) made their first contribution in [https://github.com/PHPCSStandards/composer-installer/pull/130](https://togithub.com/PHPCSStandards/composer-installer/pull/130)
**Full Changelog**: https://github.com/PHPCSStandards/composer-installer/compare/v0.7.1...v0.7.2
### [`v0.7.1`](https://togithub.com/PHPCSStandards/composer-installer/releases/tag/v0.7.1)
[Compare Source](https://togithub.com/PHPCSStandards/composer-installer/compare/v0.7.0...v0.7.1)
#### What's Changed
- Fixed v4 constraint by [@GrahamCampbell](https://togithub.com/GrahamCampbell) in [https://github.com/PHPCSStandards/composer-installer/pull/115](https://togithub.com/PHPCSStandards/composer-installer/pull/115)
- Update code of conduct by [@Potherca](https://togithub.com/Potherca) in [https://github.com/PHPCSStandards/composer-installer/pull/117](https://togithub.com/PHPCSStandards/composer-installer/pull/117)
- Add remark configuration by [@Potherca](https://togithub.com/Potherca) in [https://github.com/PHPCSStandards/composer-installer/pull/122](https://togithub.com/PHPCSStandards/composer-installer/pull/122)
- Travis: add build against PHP 8.0 by [@jrfnl](https://togithub.com/jrfnl) in [https://github.com/PHPCSStandards/composer-installer/pull/124](https://togithub.com/PHPCSStandards/composer-installer/pull/124)
- Sort list of installed paths before saving for consistency by [@kevinfodness](https://togithub.com/kevinfodness) in [https://github.com/PHPCSStandards/composer-installer/pull/126](https://togithub.com/PHPCSStandards/composer-installer/pull/126)
- Order of `installed_paths` inconsistent between runs [#125](https://togithub.com/PHPCSStandards/composer-installer/issues/125)
- Maintaining this project and Admin rights [#113](https://togithub.com/PHPCSStandards/composer-installer/issues/113)
#### New Contributors
- [@GrahamCampbell](https://togithub.com/GrahamCampbell) made their first contribution in [https://github.com/PHPCSStandards/composer-installer/pull/115](https://togithub.com/PHPCSStandards/composer-installer/pull/115)
- [@kevinfodness](https://togithub.com/kevinfodness) made their first contribution in [https://github.com/PHPCSStandards/composer-installer/pull/126](https://togithub.com/PHPCSStandards/composer-installer/pull/126)
**Full Changelog**: https://github.com/PHPCSStandards/composer-installer/compare/v0.7.0...v0.7.1
PHPCompatibility/PHPCompatibilityWP
### [`v2.1.4`](https://togithub.com/PHPCompatibility/PHPCompatibilityWP/releases/tag/2.1.4): - 2022-10-24
[Compare Source](https://togithub.com/PHPCompatibility/PHPCompatibilityWP/compare/2.1.3...2.1.4)
- Composer: The package will now identify itself as a static analysis tool. Thanks [@GaryJones](https://togithub.com/GaryJones)!
- Other housekeeping and minor documentation updates.
### [`v2.1.3`](https://togithub.com/PHPCompatibility/PHPCompatibilityWP/releases/tag/2.1.3): - 2021-12-31
[Compare Source](https://togithub.com/PHPCompatibility/PHPCompatibilityWP/compare/2.1.2...2.1.3)
- Ruleset: Updated for compatibility with WordPress 5.9.
- README: Updated the installation instructions for compatibility with Composer >= 2.2.
- Minor housekeeping.
### [`v2.1.2`](https://togithub.com/PHPCompatibility/PHPCompatibilityWP/releases/tag/2.1.2): - 2021-07-21
[Compare Source](https://togithub.com/PHPCompatibility/PHPCompatibilityWP/compare/2.1.1...2.1.2)
- Ruleset: Updated for compatibility with WordPress 5.8.
- Documentation: improved installation instructions. Props [Andy Fragen](https://togithub.com/afragen).
### [`v2.1.1`](https://togithub.com/PHPCompatibility/PHPCompatibilityWP/releases/tag/2.1.1): - 2021-02-15
[Compare Source](https://togithub.com/PHPCompatibility/PHPCompatibilityWP/compare/2.1.0...2.1.1)
- The recommended version of the [Composer PHPCS plugin] is now `^0.7.0`, which offers compatibility with Composer 2.0.
- The ruleset is now also tested against PHP 7.4 and 8.0.
Note: full PHP 7.4 support is only available in combination with PHP_CodeSniffer >= 3.5.6.
Note: runtime PHP 8.0 support is only available in combination with PHP_CodeSniffer >= 3.5.7, full support is expected in PHP_CodeSniffer 3.6.0.
[Composer PHPCS plugin]: https://togithub.com/Dealerdirect/phpcodesniffer-composer-installer/
squizlabs/PHP_CodeSniffer
### [`v3.7.2`](https://togithub.com/squizlabs/PHP_CodeSniffer/releases/tag/3.7.2)
[Compare Source](https://togithub.com/squizlabs/PHP_CodeSniffer/compare/3.7.1...3.7.2)
- Newer versions of Composer will now suggest installing PHPCS using require-dev instead of require
- Thanks to Gary Jones ([@GaryJones](https://togithub.com/GaryJones)) for the patch
- A custom Out Of Memory error will now be shown if PHPCS or PHPCBF run out of memory during a run
- Error message provides actionable information about how to fix the problem and ensures the error is not silent
- Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) and Alain Schlesser ([@schlessera](https://togithub.com/schlessera)) for the patch
- Generic.PHP.LowerCaseType sniff now correctly examines types inside arrow functions
- Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) for the patch
- Squiz.Formatting.OperatorBracket no longer reports false positives in match() structures
- Fixed bug [#3616](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3616) : Squiz.PHP.DisallowComparisonAssignment false positive for PHP 8 match expression
- Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) for the patch
- Fixed bug [#3618](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3618) : Generic.WhiteSpace.ArbitraryParenthesesSpacing false positive for return new parent()
- Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) for the patch
- Fixed bug [#3632](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3632) : Short list not tokenized correctly in control structures without braces
- Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) for the patch
- Fixed bug [#3639](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3639) : Tokenizer not applying tab replacement to heredoc/nowdoc closers
- Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) for the patch
- Fixed bug [#3640](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3640) : Generic.WhiteSpace.DisallowTabIndent not reporting errors for PHP 7.3 flexible heredoc/nowdoc syntax
- Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) for the patch
- Fixed bug [#3645](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3645) : PHPCS can show 0 exit code when running in parallel even if child process has fatal error
- Thanks to Alex Panshin ([@enl](https://togithub.com/enl)) for the patch
- Fixed bug [#3653](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3653) : False positives for match() in OperatorSpacingSniff
- Thanks to Jaroslav Hanslík ([@kukulich](https://togithub.com/kukulich)) for the patch
- Fixed bug [#3666](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3666) : PEAR.Functions.FunctionCallSignature incorrect indent fix when checking mixed HTML/PHP files
- Fixed bug [#3668](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3668) : PSR12.Classes.ClassInstantiation.MissingParentheses false positive when instantiating parent classes
- Similar issues also fixed in Generic.Functions.FunctionCallArgumentSpacing and Squiz.Formatting.OperatorBracket
- Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) for the patch
- Fixed bug [#3672](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3672) : Incorrect ScopeIndent.IncorrectExact report for match inside array literal
- Fixed bug [#3694](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3694) : Generic.WhiteSpace.SpreadOperatorSpacingAfter does not ignore spread operator in PHP 8.1 first class callables
- Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) for the patch
### [`v3.7.1`](https://togithub.com/squizlabs/PHP_CodeSniffer/releases/tag/3.7.1)
[Compare Source](https://togithub.com/squizlabs/PHP_CodeSniffer/compare/3.7.0...3.7.1)
- Fixed bug [#3609](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3609): Methods/constants with name empty/isset/unset are always reported as error
- Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) for the patch
### [`v3.7.0`](https://togithub.com/squizlabs/PHP_CodeSniffer/releases/tag/3.7.0)
[Compare Source](https://togithub.com/squizlabs/PHP_CodeSniffer/compare/3.6.2...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 `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](https://togithub.com/MarkBaker)) for the patch
- Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/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](https://togithub.com/kukulich)) for the patch
- Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/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](https://togithub.com/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](https://togithub.com/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](https://togithub.com/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](https://togithub.com/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](https://togithub.com/morozov)) for the patch
- The list of installed coding standards now has consistent ordering across all platforms
- Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/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](https://togithub.com/jrfnl)) for the patch
- `Generic.PHP.LowerCaseType` now supports the PHP 8.1 `never` type
- Thanks to Jaroslav Hanslík ([@kukulich](https://togithub.com/kukulich)) for the patch
- Fixed bug [#3502](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3502) : A match statement within an array produces Squiz.Arrays.ArrayDeclaration.NoKeySpecified
- Fixed bug [#3503](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3503) : Squiz.Commenting.FunctionComment.ThrowsNoFullStop false positive when one line `@throw`
- Fixed bug [#3505](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3505) : The nullsafe operator is not counted in Generic.Metrics.CyclomaticComplexity
- Thanks to Mark Baker ([@MarkBaker](https://togithub.com/MarkBaker)) for the patch
- Fixed bug [#3526](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3526) : PSR12.Properties.ConstantVisibility false positive when using public final const syntax
- Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) for the patch
- Fixed bug [#3530](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3530) : Line indented incorrectly false positive when using match-expression inside switch case
- Fixed bug [#3534](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3534) : Name of typed enum tokenized as `T_GOTO_LABEL`
- Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) for the patch
- Fixed bug [#3546](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3546) : Tokenizer/PHP: bug fix - parent/static keywords in class instantiations
- Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) for the patch
- Fixed bug [#3550](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3550) : False positive from PSR2.ControlStructures.SwitchDeclaration.TerminatingComment when using trailing comment
- Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) for the patch
- Fixed bug [#3575](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3575): Squiz.Scope.MethodScope misses visibility keyword on previous line
- Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) for the patch
- Fixed bug [#3604](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3604): Tokenizer/PHP: bug fix for double quoted strings using `${`
- Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) for the patch
### [`v3.6.2`](https://togithub.com/squizlabs/PHP_CodeSniffer/releases/tag/3.6.2)
[Compare Source](https://togithub.com/squizlabs/PHP_CodeSniffer/compare/3.6.1...3.6.2)
- Processing large code bases that use tab indenting inside comments and strings will now be faster
- Thanks to Thiemo Kreuz ([@thiemowmde](https://togithub.com/thiemowmde)) for the patch
- Fixed bug [#3388](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3388) : phpcs does not work when run from WSL drives
- Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) and Graham Wharton ([@gwharton](https://togithub.com/gwharton)) for the patch
- Fixed bug [#3422](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3422) : Squiz.WhiteSpace.ScopeClosingBrace fixer removes HTML content when fixing closing brace alignment
- Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) for the patch
- Fixed bug [#3437](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3437) : PSR12 does not forbid blank lines at the start of the class body
- Added new PSR12.Classes.OpeningBraceSpace sniff to enforce this
- Fixed bug [#3440](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3440) : Squiz.WhiteSpace.MemberVarSpacing false positives when attributes used without docblock
- Thanks to Vadim Borodavko ([@javer](https://togithub.com/javer)) for the patch
- Fixed bug [#3448](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3448) : PHP 8.1 deprecation notice while generating running time value
- Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) and Andy Postnikov ([@andypost](https://togithub.com/andypost)) for the patch
- Fixed bug [#3456](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3456) : PSR12.Classes.ClassInstantiation.MissingParentheses false positive using attributes on anonymous class
- Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) for the patch
- Fixed bug [#3460](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3460) : Generic.Formatting.MultipleStatementAlignment false positive on closure with parameters
- Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) for the patch
- Fixed bug [#3468](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3468) : do/while loops are double-counted in Generic.Metrics.CyclomaticComplexity
- Thanks to Mark Baker ([@MarkBaker](https://togithub.com/MarkBaker)) for the patch
- Fixed bug [#3469](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3469) : Ternary Operator and Null Coalescing Operator are not counted in Generic.Metrics.CyclomaticComplexity
- Thanks to Mark Baker ([@MarkBaker](https://togithub.com/MarkBaker)) for the patch
- Fixed bug [#3472](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3472) : PHP 8 match() expression is not counted in Generic.Metrics.CyclomaticComplexity
- Thanks to Mark Baker ([@MarkBaker](https://togithub.com/MarkBaker)) for the patch
### [`v3.6.1`](https://togithub.com/squizlabs/PHP_CodeSniffer/releases/tag/3.6.1)
[Compare Source](https://togithub.com/squizlabs/PHP_CodeSniffer/compare/3.6.0...3.6.1)
- PHPCS annotations can now be specified using hash-style comments
- Previously, only slash-style and block-style comments could be used to do things like disable errors
- Thanks to Juliette Reinders Folmer for the patch
- Fixed an issue where some sniffs would not run on PHP files that only used the short echo tag
- The following sniffs were affected:
- `Generic.Files.ExecutableFile`
- `Generic.Files.LowercasedFilename`
- `Generic.Files.LineEndings`
- `Generic.Files.EndFileNewline`
- `Generic.Files.EndFileNoNewline`
- `Generic.PHP.ClosingPHPTag`
- `Generic.PHP.Syntax`
- `Generic.VersionControl.GitMergeConflict`
- `Generic.WhiteSpace.DisallowSpaceIndent`
- `Generic.WhiteSpace.DisallowTabIndent`
- Thanks to Juliette Reinders Folmer for the patch
- The new PHP 8.1 tokenisation for ampersands has been reverted to use the existing PHP_CodeSniffer method
- The PHP 8.1 tokens `T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG` and `T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG` are unsued
- Ampersands continue to be tokenized as `T_BITWISE_AND` for all PHP versions
- Thanks to Juliette Reinders Folmer and Anna Filina for the patch
- `File::getMethodParameters()` no longer incorrectly returns argument attributes in the type hint array index
- A new `has_attributes` array index is available and set to `TRUE` if the argument has attributes defined
- Thanks to Juliette Reinders Folmer for the patch
- `Generic.NamingConventions.ConstructorName` no longer throws deprecation notices on PHP 8.1
- Thanks to Juliette Reinders Folmer for the patch
- `Squiz.Commenting.BlockComment` now correctly applies rules for block comments after a short echo tag
- Thanks to Juliette Reinders Folmer for the patch
- Fixed false positives when using attributes in the following sniffs:
- `PEAR.Commenting.FunctionComment`
- `Squiz.Commenting.InlineComment`
- `Squiz.Commenting.BlockComment`
- `Squiz.Commenting.VariableComment`
- `Squiz.WhiteSpace.MemberVarSpacing`
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug [#3294](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3294) : Bug in attribute tokenization when content contains PHP end token or attribute closer on new line
- Thanks to Alessandro Chitolina for the patch
- Thanks to Juliette Reinders Folmer for the tests
- Fixed bug [#3296](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3296) : PSR2.ControlStructures.SwitchDeclaration takes phpcs:ignore as content of case body
- Fixed bug [#3297](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3297) : PSR2.ControlStructures.SwitchDeclaration.TerminatingComment does not handle try/finally blocks
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug [#3302](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3302) : PHP 8.0 | Tokenizer/PHP: bugfix for union types using namespace operator
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug [#3303](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3303) : findStartOfStatement() doesn't work with T_OPEN_TAG_WITH_ECHO
- Fixed bug [#3316](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3316) : Arrow function not tokenized correctly when using null in union type
- Fixed bug [#3317](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3317) : Problem with how phpcs handles ignored files when running in parallel
- Thanks to Emil Andersson for the patch
- Fixed bug [#3324](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3324) : PHPCS hangs processing some nested arrow functions inside a function call
- Fixed bug [#3326](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3326) : Generic.Formatting.MultipleStatementAlignment error with const DEFAULT
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug [#3333](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3333) : Squiz.Objects.ObjectInstantiation: null coalesce operators are not recognized as assignment
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug [#3340](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3340) : Ensure interface and trait names are always tokenized as T_STRING
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug [#3342](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3342) : PSR12/Squiz/PEAR standards all error on promoted properties with docblocks
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug [#3345](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3345) : IF statement with no braces and double catch turned into syntax error by auto-fixer
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug [#3352](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3352) : PSR2.ControlStructures.SwitchDeclaration can remove comments on the same line as the case statement while fixing
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug [#3357](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3357) : Generic.Functions.OpeningFunctionBraceBsdAllman removes return type when additional lines are present
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug [#3362](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3362) : Generic.WhiteSpace.ScopeIndent false positive for arrow functions inside arrays
- Fixed bug [#3384](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3384) : Squiz.Commenting.FileComment.SpacingAfterComment false positive on empty file
- Fixed bug [#3394](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3394) : Fix PHP 8.1 auto_detect_line_endings deprecation notice
- Fixed bug [#3400](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3400) : PHP 8.1: prevent deprecation notices about missing return types
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug [#3424](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3424) : PHPCS fails when using PHP 8 Constructor property promotion with attributes
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug [#3425](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3425) : PHP 8.1 | Runner::processChildProcs(): fix passing null to non-nullable bug
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug [#3445](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3445) : Nullable parameter after attribute incorrectly tokenized as ternary operator
- Thanks to Juliette Reinders Folmer for the patch
### [`v3.6.0`](https://togithub.com/squizlabs/PHP_CodeSniffer/releases/tag/3.6.0)
[Compare Source](https://togithub.com/squizlabs/PHP_CodeSniffer/compare/3.5.8...3.6.0)
#### PHP 8 Language Feature Support
PHP_CodeSniffer has run under PHP 8 for some time, but it has not supported all new language features until this release. Version 3.6.0 adds support for all new PHP 8 language features, including:
- Attributes
- Constructor property promotion
- Named arguments
- Union types
- Match expressions
- Static and Mixed return types
> Note: All 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.0 union types
- A new `T_TYPE_UNION` token is available to represent the pipe character
- `File::getMethodParameters()`, `getMethodProperties()`, and `getMemberProperties()` will now return union types
- Thanks to Juliette Reinders Folmer for the patch
- Added support for PHP 8.0 named function call arguments
- A new `T_PARAM_NAME` token is available to represent the label with the name of the function argument in it
- Thanks to Juliette Reinders Folmer for the patch
- Added support for PHP 8.0 attributes
- The PHP-supplied `T_ATTRIBUTE` token marks the start of an attribute
- A new `T_ATTRIBUTE_END` token is available to mark the end of an attribute
- New `attribute_owner` and `attribute_closer` indexes are available in the tokens array for all tokens inside an attribute
- Tokenizing of attributes has been backfilled for older PHP versions
- The following sniffs have been updated to support attributes:
- `PEAR.Commenting.ClassComment`
- `PEAR.Commenting.FileComment`
- `PSR1.Files.SideEffects`
- `PSR12.Files.FileHeader`
- `Squiz.Commenting.ClassComment`
- `Squiz.Commenting.FileComment`
- `Squiz.WhiteSpace.FunctionSpacing`
- Thanks to Vadim Borodavko for the patch
- Thanks to Alessandro Chitolina for the patch
- Added support for PHP 8.0 dereferencing of text strings with interpolated variables
- Thanks to Juliette Reinders Folmer for the patch
- Added support for PHP 8.0 match expressions
- Match expressions are now tokenised with parenthesis and scope openers and closers
- Sniffs can listen for the `T_MATCH` token to process match expressions
- Note that the case and default statements inside match expressions do not have scopes set
- A new `T_MATCH_ARROW` token is available to represent the arrows in match expressions
- A new `T_MATCH_DEFAULT` token is available to represent the default keyword in match expressions
- All tokenizing of match expressions has been backfilled for older PHP versions
- The following sniffs have been updated to support match expressions:
- `Generic.CodeAnalysis.AssignmentInCondition`
- `Generic.CodeAnalysis.EmptyPHPStatement`
- Thanks to Vadim Borodavko for the patch
- `Generic.CodeAnalysis.EmptyStatement`
- `Generic.PHP.LowerCaseKeyword`
- `PEAR.ControlStructures.ControlSignature`
- `PSR12.ControlStructures.BooleanOperatorPlacement`
- `Squiz.Commenting.LongConditionClosingComment`
- `Squiz.Commenting.PostStatementComment`
- `Squiz.ControlStructures.LowercaseDeclaration`
- `Squiz.ControlStructures.ControlSignature`
- `Squiz.Formatting.OperatorBracket`
- `Squiz.PHP.DisallowMultipleAssignments`
- `Squiz.Objects.ObjectInstantiation`
- `Squiz.WhiteSpace.ControlStructureSpacing`
- Thanks to Juliette Reinders Folmer for the patch
- The value of the `T_FN_ARROW` token has changed from "T_FN_ARROW" to "PHPCS_T_FN_ARROW" to avoid package conflicts
- This will have no impact on custom sniffs unless they are specifically looking at the value of the `T_FN_ARROW` constant
- If sniffs are just using constant to find arrow functions, they will continue to work without modification
- Thanks to Juliette Reinders Folmer for the patch
- `File::findStartOfStatement()` now works correctly when passed the last token in a statement
- `File::getMethodParameters()` now supports PHP 8.0 constructor property promotion
- Returned method params now include a `property_visibility` and `visibility_token` index if property promotion is detected
- Thanks to Juliette Reinders Folmer for the patch
- `File::getMethodProperties()` now includes a `return_type_end_token` index in the return value
- This indicates the last token in the return type, which is helpful when checking union types
- Thanks to Juliette Reinders Folmer for the patch
- Include patterns are now ignored when processing STDIN
- Previously, checks using include patterns were excluded when processing STDIN when no file path was provided via `--stdin-path`
- Now, all include and exclude rules are ignored when no file path is provided, allowing all checks to run
- If you want include and exclude rules enforced when checking STDIN, use `--stdin-path` to set the file path
- Thanks to Juliette Reinders Folmer for the patch
- Spaces are now correctly escaped in the paths to external on Windows
- Thanks to Juliette Reinders Folmer for the patch
- Added `Generic.NamingConventions.AbstractClassNamePrefix` to enforce that class names are prefixed with "Abstract"
- Thanks to Anna Borzenko for the contribution
- Added `Generic.NamingConventions.InterfaceNameSuffix` to enforce that interface names are suffixed with "Interface"
- Thanks to Anna Borzenko for the contribution
- Added `Generic.NamingConventions.TraitNameSuffix` to enforce that trait names are suffixed with "Trait"
- Thanks to Anna Borzenko for the contribution
- `Generic.CodeAnalysis.UnusedFunctionParameter` can now be configured to ignore variable usage for specific type hints
- This allows you to suppress warnings for some variables that are not required, but leave warnings for others
- Set the `ignoreTypeHints` array property to a list of type hints to ignore
- Thanks to Petr Bugyík for the patch
- `Generic.Formatting.MultipleStatementAlignment` can now align statements at the start of the assignment token
- Previously, the sniff enforced that the values were aligned, even if this meant the assignment tokens were not
- Now, the sniff can enforce that the assignment tokens are aligned, even if this means the values are not
- Set the `alignAtEnd` sniff property to `false` to align the assignment tokens
- The default remains at `true`, so the assigned values are aligned
- Thanks to John P. Bloch for the patch
- `Generic.PHP.LowerCaseType` now supports checking of typed properties
- Thanks to Juliette Reinders Folmer for the patch
- `Generic.PHP.LowerCaseType` now supports checking of union types
- Thanks to Juliette Reinders Folmer for the patch
- `PEAR.Commenting.FunctionComment` and `Squiz.Commenting.FunctionComment` sniffs can now ignore private and protected methods
- Set the `minimumVisibility` sniff property to `protected` to ignore private methods
- Set the `minimumVisibility` sniff property to `public` to ignore both private and protected methods
- The default remains at `private`, so all methods are checked
- Thanks to Vincent Langlet for the patch
- `PEAR.Commenting.FunctionComment` and `Squiz.Commenting.FunctionComment` sniffs can now ignore return tags in any method
- Previously, only `__construct` and `__destruct` were ignored
- Set the list of method names to ignore in the `specialMethods` sniff property
- The default remains at `__construct` and `__destruct` only
- Thanks to Vincent Langlet for the patch
- `PSR2.ControlStructures.SwitchDeclaration` now supports nested switch statements where every branch terminates
- Previously, if a `CASE` only contained a `SWITCH` and no direct terminating statement, a fall-through error was displayed
- Now, the error is suppressed if every branch of the `SWITCH` has a terminating statement
- Thanks to Vincent Langlet for the patch
- The `PSR2.Methods.FunctionCallSignature.SpaceBeforeCloseBracket` error message is now reported on the closing parenthesis token
- Previously, the error was being reported on the function keyword, leading to confusing line numbers in the error report
- `Squiz.Commenting.FunctionComment` is now able to ignore function comments that are only inheritdoc statements
- Set the `skipIfInheritdoc` sniff property to `true` to skip checking function comments if the content is only `{@inhertidoc}`
- The default remains at `false`, so these comments will continue to report errors
- Thanks to Jess Myrbo for the patch
- `Squiz.Commenting.FunctionComment` now supports the PHP 8 mixed type
- Thanks to Vadim Borodavko for the patch
- `Squiz.PHP.NonExecutableCode` now has improved handling of syntax errors
- Thanks to Thiemo Kreuz for the patch
- `Squiz.WhiteSpace.ScopeKeywordSpacing` now checks spacing when using PHP 8.0 constructor property promotion
- Thanks to Juliette Reinders Folmer for the patch
- Fixed an issue that could occur when checking files on network drives, such as with WSL2 on Windows 10
- This works around a long-standing PHP bug with `is_readable()`
- Thanks to Michael S for the patch
- Fixed a number of false positives in the `Squiz.PHP.DisallowMultipleAssignments` sniff
- Sniff no longer errors for default value assignments in arrow functions
- Sniff no longer errors for assignments on first line of closure
- Sniff no longer errors for assignments after a goto label
- Thanks to Jaroslav Hanslík for the patch
- Fixed bug [#2913](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/2913) : Generic.WhiteSpace.ScopeIndent false positive when opening and closing tag on same line inside conditional
- Fixed bug [#2992](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/2992) : Enabling caching using a ruleset produces invalid cache files when using --sniffs and --exclude CLI args
- Fixed bug [#3003](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3003) : Squiz.Formatting.OperatorBracket autofix incorrect when assignment used with null coalescing operator
- Fixed bug [#3145](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3145) : Autoloading of sniff fails when multiple classes declared in same file
- Fixed bug [#3157](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3157) : PSR2.ControlStructures.SwitchDeclaration.BreakIndent false positive when case keyword is not indented
- Fixed bug [#3163](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3163) : Undefined index error with pre-commit hook using husky on PHP 7.4
- Thanks to Ismo Vuorinen for the patch
- Fixed bug [#3165](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3165) : Squiz.PHP.DisallowComparisonAssignment false positive when comparison inside closure
- Fixed bug [#3167](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3167) : Generic.WhiteSpace.ScopeIndent false positive when using PHP 8.0 constructor property promotion
- Fixed bug [#3170](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3170) : Squiz.WhiteSpace.OperatorSpacing false positive when using negation with string concat
- This also fixes the same issue in the PSR12.Operators.OperatorSpacing sniff
- Fixed bug [#3177](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3177) : Incorrect tokenization of GOTO statements in mixed PHP/HTML files
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug [#3184](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3184) : PSR2.Namespace.NamespaceDeclaration false positive on namespace operator
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug [#3188](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3188) : Squiz.WhiteSpace.ScopeKeywordSpacing false positive for static return type
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug [#3192](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3192) : findStartOfStatement doesn't work correctly inside switch
- Thanks to Vincent Langlet for the patch
- Fixed bug [#3195](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3195) : Generic.WhiteSpace.ScopeIndent confusing message when combination of tabs and spaces found
- Fixed bug [#3197](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3197) : Squiz.NamingConventions.ValidVariableName does not use correct error code for all member vars
- Fixed bug [#3219](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3219) : Generic.Formatting.MultipleStatementAlignment false positive for empty anonymous classes and closures
- Fixed bug [#3258](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3258) : Squiz.Formatting.OperatorBracket duplicate error messages for unary minus
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug [#3273](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3273) : Squiz.Functions.FunctionDeclarationArgumentSpacing reports line break as 0 spaces between parenthesis
- Fixed bug [#3277](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3277) : Nullable static return typehint causes whitespace error
- Fixed bug [#3284](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3284) : Unused parameter false positive when using array index in arrow function
### [`v3.5.8`](https://togithub.com/squizlabs/PHP_CodeSniffer/releases/tag/3.5.8)
[Compare Source](https://togithub.com/squizlabs/PHP_CodeSniffer/compare/3.5.7...3.5.8)
- Reverted a change to the way include/exclude patterns are processed for STDIN content
- This change is not backwards compatible and will be re-introduced in version 3.6.0
### [`v3.5.7`](https://togithub.com/squizlabs/PHP_CodeSniffer/releases/tag/3.5.7)
[Compare Source](https://togithub.com/squizlabs/PHP_CodeSniffer/compare/3.5.6...3.5.7)
- The PHP 8.0 `T_NULLSAFE_OBJECT_OPERATOR` token has been made available for older versions
- Existing sniffs that check for `T_OBJECT_OPERATOR` have been modified to apply the same rules for the nullsafe object operator
- Thanks to Juliette Reinders Folmer for the patch
- The new method of PHP 8.0 tokenizing for namespaced names has been revert to the pre 8.0 method
- This maintains backwards compatible for existing sniffs on PHP 8.0
- This change will be removed in PHPCS 4.0 as the PHP 8.0 tokenizing method will be backported for pre 8.0 versions
- Thanks to Juliette Reinders Folmer for the patch
- Added support for changes to the way PHP 8.0 tokenizes hash comments
- The existing PHP 5-7 behaviour has been replicated for version 8, so no sniff changes are required
- Thanks to Juliette Reinders Folmer for the patch
- The autoloader has been changed to fix sniff class name detection issues that may occur when running on PHP 7.4+
- Thanks to Eloy Lafuente for the patch
- Running the unit tests now includes warnings in the found and fixable error code counts
- Thanks to Juliette Reinders Folmer for the patch
- `PSR12.ControlStructures.BooleanOperatorPlacement.FoundMixed` error message is now more accurate when using the allowOnly setting
- Thanks to Vincent Langlet for the patch
- `PSR12.Functions.NullableTypeDeclaration` now supports the PHP8 static return type
- Thanks to Juliette Reinders Folmer for the patch
- Fixed `Squiz.Formatting.OperatorBracket` false positive when exiting with a negative number
- Fixed `Squiz.PHP.DisallowComparisonAssignment` false positive for methods called on an object
- Fixed bug [#2882](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/2882) : Generic.Arrays.ArrayIndent can request close brace indent to be less than the statement indent level
- Fixed bug [#2883](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/2883) : Generic.WhiteSpace.ScopeIndent.Incorrect issue after NOWDOC
- Fixed bug [#2975](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/2975) : Undefined offset in PSR12.Functions.ReturnTypeDeclaration when checking function return type inside ternary
- Fixed bug [#2988](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/2988) : Undefined offset in Squiz.Strings.ConcatenationSpacing during live coding
- Thanks to Thiemo Kreuz for the patch
- Fixed bug [#2989](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/2989) : Incorrect auto-fixing in Generic.ControlStructures.InlineControlStructure during live coding
- Thanks to Thiemo Kreuz for the patch
- Fixed bug [#3007](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3007) : Directory exclude pattern improperly excludes directories with names that start the same
- Thanks to Steve Talbot for the patch
- Fixed bug [#3043](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3043) : Squiz.WhiteSpace.OperatorSpacing false positive for negation in arrow function
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug [#3049](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3049) : Incorrect error with arrow function and parameter passed as reference
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug [#3053](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3053) : PSR2 incorrect fix when multiple use statements on same line do not have whitespace between them
- Fixed bug [#3058](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3058) : Progress gets unaligned when 100% happens at the end of the available dots
- Fixed bug [#3059](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3059) : Squiz.Arrays.ArrayDeclaration false positive when using type casting
- Thanks to Sergei Morozov for the patch
- Fixed bug [#3060](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3060) : Squiz.Arrays.ArrayDeclaration false positive for static functions
- Thanks to Sergei Morozov for the patch
- Fixed bug [#3065](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3065) : Should not fix Squiz.Arrays.ArrayDeclaration.SpaceBeforeComma if comment between element and comma
- Thanks to Sergei Morozov for the patch
- Fixed bug [#3066](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3066) : No support for namespace operator used in type declarations
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug [#3075](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3075) : PSR12.ControlStructures.BooleanOperatorPlacement false positive when operator is the only content on line
- Fixed bug [#3099](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3099) : Squiz.WhiteSpace.OperatorSpacing false positive when exiting with negative number
- Thanks to Sergei Morozov for the patch
- Fixed bug [#3102](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3102) : PSR12.Squiz.OperatorSpacing false positive for default values of arrow functions
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug [#3124](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3124) : PSR-12 not reporting error for empty lines with only whitespace
- Fixed bug [#3135](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3135) : Ignore annotations are broken on PHP 8.0
- Thanks to Juliette Reinders Folmer for the patch
### [`v3.5.6`](https://togithub.com/squizlabs/PHP_CodeSniffer/releases/tag/3.5.6)
[Compare Source](https://togithub.com/squizlabs/PHP_CodeSniffer/compare/3.5.5...3.5.6)
- Added support for PHP 8.0 magic constant dereferencing
- Thanks to Juliette Reinders Folmer for the patch
- Added support for changes to the way PHP 8.0 tokenizes comments
- The existing PHP 5-7 behaviour has been replicated for version 8, so no sniff changes are required
- Thanks to Juliette Reinders Folmer for the patch
- `File::getMethodProperties()` now detects the PHP 8.0 static return type
- Thanks to Juliette Reinders Folmer for the patch
- The PHP 8.0 static return type is now supported for arrow functions
- Thanks to Juliette Reinders Folmer for the patch
- The cache is no longer used if the list of loaded PHP extensions changes
- Thanks to Juliette Reinders Folmer for the patch
- `Generic.NamingConventions.CamelCapsFunctionName` no longer reports `__serialize` and `__unserialize` as invalid names
- Thanks to Filip Š for the patch
- `PEAR.NamingConventions.ValidFunctionName` no longer reports `__serialize` and `__unserialize` as invalid names
- Thanks to Filip Š for the patch
- `Squiz.Scope.StaticThisUsage` now detects usage of `$this` inside closures and arrow functions
- Thanks to Michał Bundyra for the patch
- Fixed bug [#2877](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/2877) : PEAR.Functions.FunctionCallSignature false positive for array of functions
- Thanks to Vincent Langlet for the patch
- Fixed bug [#2888](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/2888) : PSR12.Files.FileHeader blank line error with multiple namespaces in one file
- Fixed bug [#2926](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/2926) : phpcs hangs when using arrow functions that return heredoc
- Fixed bug [#2943](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/2943) : Redundant semicolon added to a file when fixing PSR2.Files.ClosingTag.NotAllowed
- Fixed bug [#2967](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/2967) : Markdown generator does not output headings correctly
- Thanks to Petr Bugyík for the patch
- Fixed bug [#2977](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/2977) : File::isReference() does not detect return by reference for closures
- Thanks to Juliette Reinders Folmer for the patch
- Fixed bug [#2994](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/2994) : Generic.Formatting.DisallowMultipleStatements false positive for FOR loop with no body
- Fixed bug [#3033](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3033) : Error generated during tokenizing of goto statements on PHP 8
- Thanks to Juliette Reinders Folmer for the patch
Configuration
📅 Schedule: Branch creation - "before 3am on the first day of the month" (UTC), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
[ ] If you want to rebase/retry this PR, check this box
This PR has been generated by Mend Renovate. View repository job log here.
This PR contains the following updates:
0.7.1
->0.7.2
2.1.1
->2.1.4
3.5.8
->3.7.2
Release Notes
PHPCSStandards/composer-installer
### [`v0.7.2`](https://togithub.com/PHPCSStandards/composer-installer/releases/tag/v0.7.2) [Compare Source](https://togithub.com/PHPCSStandards/composer-installer/compare/v0.7.1...v0.7.2) #### What's Changed - Add details regarding QA automation in CONTRIBUTING.md file. by [@Potherca](https://togithub.com/Potherca) in [https://github.com/PHPCSStandards/composer-installer/pull/133](https://togithub.com/PHPCSStandards/composer-installer/pull/133) - Add mention of Composer and PHP compatibility to project README. by [@Potherca](https://togithub.com/Potherca) in [https://github.com/PHPCSStandards/composer-installer/pull/132](https://togithub.com/PHPCSStandards/composer-installer/pull/132) - Composer: tweak PHPCS version constraint by [@jrfnl](https://togithub.com/jrfnl) in [https://github.com/PHPCSStandards/composer-installer/pull/152](https://togithub.com/PHPCSStandards/composer-installer/pull/152) - CONTRIBUTING: remove duplicate code of conduct by [@jrfnl](https://togithub.com/jrfnl) in [https://github.com/PHPCSStandards/composer-installer/pull/148](https://togithub.com/PHPCSStandards/composer-installer/pull/148) - Document release process by [@Potherca](https://togithub.com/Potherca) in [https://github.com/PHPCSStandards/composer-installer/pull/118](https://togithub.com/PHPCSStandards/composer-installer/pull/118) - Plugin::loadInstalledPaths(): `config-show` always shows all by [@jrfnl](https://togithub.com/jrfnl) in [https://github.com/PHPCSStandards/composer-installer/pull/154](https://togithub.com/PHPCSStandards/composer-installer/pull/154) - README: minor tweaks by [@jrfnl](https://togithub.com/jrfnl) in [https://github.com/PHPCSStandards/composer-installer/pull/149](https://togithub.com/PHPCSStandards/composer-installer/pull/149) - README: update with information about Composer >= 2.2 by [@jrfnl](https://togithub.com/jrfnl) in [https://github.com/PHPCSStandards/composer-installer/pull/141](https://togithub.com/PHPCSStandards/composer-installer/pull/141) - Replace deprecated Sensiolabs security checker by [@paras-malhotra](https://togithub.com/paras-malhotra) in [https://github.com/PHPCSStandards/composer-installer/pull/130](https://togithub.com/PHPCSStandards/composer-installer/pull/130) - Stabilize a condition by [@jrfnl](https://togithub.com/jrfnl) in [https://github.com/PHPCSStandards/composer-installer/pull/127](https://togithub.com/PHPCSStandards/composer-installer/pull/127) - Update copyright year by [@jrfnl](https://togithub.com/jrfnl) in [https://github.com/PHPCSStandards/composer-installer/pull/138](https://togithub.com/PHPCSStandards/composer-installer/pull/138) - Various minor tweaks by [@jrfnl](https://togithub.com/jrfnl) in [https://github.com/PHPCSStandards/composer-installer/pull/151](https://togithub.com/PHPCSStandards/composer-installer/pull/151) ##### CI/CD - Change YamlLint config to prevent "truthy" warning. by [@Potherca](https://togithub.com/Potherca) in [https://github.com/PHPCSStandards/composer-installer/pull/144](https://togithub.com/PHPCSStandards/composer-installer/pull/144) - GH Actions: PHP 8.1 has been released by [@jrfnl](https://togithub.com/jrfnl) in [https://github.com/PHPCSStandards/composer-installer/pull/139](https://togithub.com/PHPCSStandards/composer-installer/pull/139) - Travis: line length tweaks by [@jrfnl](https://togithub.com/jrfnl) in [https://github.com/PHPCSStandards/composer-installer/pull/128](https://togithub.com/PHPCSStandards/composer-installer/pull/128) - CI: Switch to GH Actions by [@jrfnl](https://togithub.com/jrfnl) in [https://github.com/PHPCSStandards/composer-installer/pull/137](https://togithub.com/PHPCSStandards/composer-installer/pull/137) - CI: various updates by [@jrfnl](https://togithub.com/jrfnl) in [https://github.com/PHPCSStandards/composer-installer/pull/140](https://togithub.com/PHPCSStandards/composer-installer/pull/140) #### New Contributors - [@paras-malhotra](https://togithub.com/paras-malhotra) made their first contribution in [https://github.com/PHPCSStandards/composer-installer/pull/130](https://togithub.com/PHPCSStandards/composer-installer/pull/130) **Full Changelog**: https://github.com/PHPCSStandards/composer-installer/compare/v0.7.1...v0.7.2 ### [`v0.7.1`](https://togithub.com/PHPCSStandards/composer-installer/releases/tag/v0.7.1) [Compare Source](https://togithub.com/PHPCSStandards/composer-installer/compare/v0.7.0...v0.7.1) #### What's Changed - Fixed v4 constraint by [@GrahamCampbell](https://togithub.com/GrahamCampbell) in [https://github.com/PHPCSStandards/composer-installer/pull/115](https://togithub.com/PHPCSStandards/composer-installer/pull/115) - Update code of conduct by [@Potherca](https://togithub.com/Potherca) in [https://github.com/PHPCSStandards/composer-installer/pull/117](https://togithub.com/PHPCSStandards/composer-installer/pull/117) - Add remark configuration by [@Potherca](https://togithub.com/Potherca) in [https://github.com/PHPCSStandards/composer-installer/pull/122](https://togithub.com/PHPCSStandards/composer-installer/pull/122) - Travis: add build against PHP 8.0 by [@jrfnl](https://togithub.com/jrfnl) in [https://github.com/PHPCSStandards/composer-installer/pull/124](https://togithub.com/PHPCSStandards/composer-installer/pull/124) - Sort list of installed paths before saving for consistency by [@kevinfodness](https://togithub.com/kevinfodness) in [https://github.com/PHPCSStandards/composer-installer/pull/126](https://togithub.com/PHPCSStandards/composer-installer/pull/126) - Order of `installed_paths` inconsistent between runs [#125](https://togithub.com/PHPCSStandards/composer-installer/issues/125) - Maintaining this project and Admin rights [#113](https://togithub.com/PHPCSStandards/composer-installer/issues/113) #### New Contributors - [@GrahamCampbell](https://togithub.com/GrahamCampbell) made their first contribution in [https://github.com/PHPCSStandards/composer-installer/pull/115](https://togithub.com/PHPCSStandards/composer-installer/pull/115) - [@kevinfodness](https://togithub.com/kevinfodness) made their first contribution in [https://github.com/PHPCSStandards/composer-installer/pull/126](https://togithub.com/PHPCSStandards/composer-installer/pull/126) **Full Changelog**: https://github.com/PHPCSStandards/composer-installer/compare/v0.7.0...v0.7.1PHPCompatibility/PHPCompatibilityWP
### [`v2.1.4`](https://togithub.com/PHPCompatibility/PHPCompatibilityWP/releases/tag/2.1.4): - 2022-10-24 [Compare Source](https://togithub.com/PHPCompatibility/PHPCompatibilityWP/compare/2.1.3...2.1.4) - Composer: The package will now identify itself as a static analysis tool. Thanks [@GaryJones](https://togithub.com/GaryJones)! - Other housekeeping and minor documentation updates. ### [`v2.1.3`](https://togithub.com/PHPCompatibility/PHPCompatibilityWP/releases/tag/2.1.3): - 2021-12-31 [Compare Source](https://togithub.com/PHPCompatibility/PHPCompatibilityWP/compare/2.1.2...2.1.3) - Ruleset: Updated for compatibility with WordPress 5.9. - README: Updated the installation instructions for compatibility with Composer >= 2.2. - Minor housekeeping. ### [`v2.1.2`](https://togithub.com/PHPCompatibility/PHPCompatibilityWP/releases/tag/2.1.2): - 2021-07-21 [Compare Source](https://togithub.com/PHPCompatibility/PHPCompatibilityWP/compare/2.1.1...2.1.2) - Ruleset: Updated for compatibility with WordPress 5.8. - Documentation: improved installation instructions. Props [Andy Fragen](https://togithub.com/afragen). ### [`v2.1.1`](https://togithub.com/PHPCompatibility/PHPCompatibilityWP/releases/tag/2.1.1): - 2021-02-15 [Compare Source](https://togithub.com/PHPCompatibility/PHPCompatibilityWP/compare/2.1.0...2.1.1) - The recommended version of the [Composer PHPCS plugin] is now `^0.7.0`, which offers compatibility with Composer 2.0. - The ruleset is now also tested against PHP 7.4 and 8.0. Note: full PHP 7.4 support is only available in combination with PHP_CodeSniffer >= 3.5.6. Note: runtime PHP 8.0 support is only available in combination with PHP_CodeSniffer >= 3.5.7, full support is expected in PHP_CodeSniffer 3.6.0. [Composer PHPCS plugin]: https://togithub.com/Dealerdirect/phpcodesniffer-composer-installer/squizlabs/PHP_CodeSniffer
### [`v3.7.2`](https://togithub.com/squizlabs/PHP_CodeSniffer/releases/tag/3.7.2) [Compare Source](https://togithub.com/squizlabs/PHP_CodeSniffer/compare/3.7.1...3.7.2) - Newer versions of Composer will now suggest installing PHPCS using require-dev instead of require - Thanks to Gary Jones ([@GaryJones](https://togithub.com/GaryJones)) for the patch - A custom Out Of Memory error will now be shown if PHPCS or PHPCBF run out of memory during a run - Error message provides actionable information about how to fix the problem and ensures the error is not silent - Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) and Alain Schlesser ([@schlessera](https://togithub.com/schlessera)) for the patch - Generic.PHP.LowerCaseType sniff now correctly examines types inside arrow functions - Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) for the patch - Squiz.Formatting.OperatorBracket no longer reports false positives in match() structures - Fixed bug [#3616](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3616) : Squiz.PHP.DisallowComparisonAssignment false positive for PHP 8 match expression - Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) for the patch - Fixed bug [#3618](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3618) : Generic.WhiteSpace.ArbitraryParenthesesSpacing false positive for return new parent() - Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) for the patch - Fixed bug [#3632](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3632) : Short list not tokenized correctly in control structures without braces - Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) for the patch - Fixed bug [#3639](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3639) : Tokenizer not applying tab replacement to heredoc/nowdoc closers - Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) for the patch - Fixed bug [#3640](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3640) : Generic.WhiteSpace.DisallowTabIndent not reporting errors for PHP 7.3 flexible heredoc/nowdoc syntax - Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) for the patch - Fixed bug [#3645](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3645) : PHPCS can show 0 exit code when running in parallel even if child process has fatal error - Thanks to Alex Panshin ([@enl](https://togithub.com/enl)) for the patch - Fixed bug [#3653](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3653) : False positives for match() in OperatorSpacingSniff - Thanks to Jaroslav Hanslík ([@kukulich](https://togithub.com/kukulich)) for the patch - Fixed bug [#3666](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3666) : PEAR.Functions.FunctionCallSignature incorrect indent fix when checking mixed HTML/PHP files - Fixed bug [#3668](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3668) : PSR12.Classes.ClassInstantiation.MissingParentheses false positive when instantiating parent classes - Similar issues also fixed in Generic.Functions.FunctionCallArgumentSpacing and Squiz.Formatting.OperatorBracket - Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) for the patch - Fixed bug [#3672](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3672) : Incorrect ScopeIndent.IncorrectExact report for match inside array literal - Fixed bug [#3694](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3694) : Generic.WhiteSpace.SpreadOperatorSpacingAfter does not ignore spread operator in PHP 8.1 first class callables - Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) for the patch ### [`v3.7.1`](https://togithub.com/squizlabs/PHP_CodeSniffer/releases/tag/3.7.1) [Compare Source](https://togithub.com/squizlabs/PHP_CodeSniffer/compare/3.7.0...3.7.1) - Fixed bug [#3609](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3609): Methods/constants with name empty/isset/unset are always reported as error - Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) for the patch ### [`v3.7.0`](https://togithub.com/squizlabs/PHP_CodeSniffer/releases/tag/3.7.0) [Compare Source](https://togithub.com/squizlabs/PHP_CodeSniffer/compare/3.6.2...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 `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](https://togithub.com/MarkBaker)) for the patch - Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/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](https://togithub.com/kukulich)) for the patch - Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/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](https://togithub.com/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](https://togithub.com/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](https://togithub.com/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](https://togithub.com/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](https://togithub.com/morozov)) for the patch - The list of installed coding standards now has consistent ordering across all platforms - Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/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](https://togithub.com/jrfnl)) for the patch - `Generic.PHP.LowerCaseType` now supports the PHP 8.1 `never` type - Thanks to Jaroslav Hanslík ([@kukulich](https://togithub.com/kukulich)) for the patch - Fixed bug [#3502](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3502) : A match statement within an array produces Squiz.Arrays.ArrayDeclaration.NoKeySpecified - Fixed bug [#3503](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3503) : Squiz.Commenting.FunctionComment.ThrowsNoFullStop false positive when one line `@throw` - Fixed bug [#3505](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3505) : The nullsafe operator is not counted in Generic.Metrics.CyclomaticComplexity - Thanks to Mark Baker ([@MarkBaker](https://togithub.com/MarkBaker)) for the patch - Fixed bug [#3526](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3526) : PSR12.Properties.ConstantVisibility false positive when using public final const syntax - Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) for the patch - Fixed bug [#3530](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3530) : Line indented incorrectly false positive when using match-expression inside switch case - Fixed bug [#3534](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3534) : Name of typed enum tokenized as `T_GOTO_LABEL` - Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) for the patch - Fixed bug [#3546](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3546) : Tokenizer/PHP: bug fix - parent/static keywords in class instantiations - Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) for the patch - Fixed bug [#3550](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3550) : False positive from PSR2.ControlStructures.SwitchDeclaration.TerminatingComment when using trailing comment - Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) for the patch - Fixed bug [#3575](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3575): Squiz.Scope.MethodScope misses visibility keyword on previous line - Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) for the patch - Fixed bug [#3604](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3604): Tokenizer/PHP: bug fix for double quoted strings using `${` - Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) for the patch ### [`v3.6.2`](https://togithub.com/squizlabs/PHP_CodeSniffer/releases/tag/3.6.2) [Compare Source](https://togithub.com/squizlabs/PHP_CodeSniffer/compare/3.6.1...3.6.2) - Processing large code bases that use tab indenting inside comments and strings will now be faster - Thanks to Thiemo Kreuz ([@thiemowmde](https://togithub.com/thiemowmde)) for the patch - Fixed bug [#3388](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3388) : phpcs does not work when run from WSL drives - Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) and Graham Wharton ([@gwharton](https://togithub.com/gwharton)) for the patch - Fixed bug [#3422](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3422) : Squiz.WhiteSpace.ScopeClosingBrace fixer removes HTML content when fixing closing brace alignment - Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) for the patch - Fixed bug [#3437](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3437) : PSR12 does not forbid blank lines at the start of the class body - Added new PSR12.Classes.OpeningBraceSpace sniff to enforce this - Fixed bug [#3440](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3440) : Squiz.WhiteSpace.MemberVarSpacing false positives when attributes used without docblock - Thanks to Vadim Borodavko ([@javer](https://togithub.com/javer)) for the patch - Fixed bug [#3448](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3448) : PHP 8.1 deprecation notice while generating running time value - Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) and Andy Postnikov ([@andypost](https://togithub.com/andypost)) for the patch - Fixed bug [#3456](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3456) : PSR12.Classes.ClassInstantiation.MissingParentheses false positive using attributes on anonymous class - Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) for the patch - Fixed bug [#3460](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3460) : Generic.Formatting.MultipleStatementAlignment false positive on closure with parameters - Thanks to Juliette Reinders Folmer ([@jrfnl](https://togithub.com/jrfnl)) for the patch - Fixed bug [#3468](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3468) : do/while loops are double-counted in Generic.Metrics.CyclomaticComplexity - Thanks to Mark Baker ([@MarkBaker](https://togithub.com/MarkBaker)) for the patch - Fixed bug [#3469](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3469) : Ternary Operator and Null Coalescing Operator are not counted in Generic.Metrics.CyclomaticComplexity - Thanks to Mark Baker ([@MarkBaker](https://togithub.com/MarkBaker)) for the patch - Fixed bug [#3472](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3472) : PHP 8 match() expression is not counted in Generic.Metrics.CyclomaticComplexity - Thanks to Mark Baker ([@MarkBaker](https://togithub.com/MarkBaker)) for the patch ### [`v3.6.1`](https://togithub.com/squizlabs/PHP_CodeSniffer/releases/tag/3.6.1) [Compare Source](https://togithub.com/squizlabs/PHP_CodeSniffer/compare/3.6.0...3.6.1) - PHPCS annotations can now be specified using hash-style comments - Previously, only slash-style and block-style comments could be used to do things like disable errors - Thanks to Juliette Reinders Folmer for the patch - Fixed an issue where some sniffs would not run on PHP files that only used the short echo tag - The following sniffs were affected: - `Generic.Files.ExecutableFile` - `Generic.Files.LowercasedFilename` - `Generic.Files.LineEndings` - `Generic.Files.EndFileNewline` - `Generic.Files.EndFileNoNewline` - `Generic.PHP.ClosingPHPTag` - `Generic.PHP.Syntax` - `Generic.VersionControl.GitMergeConflict` - `Generic.WhiteSpace.DisallowSpaceIndent` - `Generic.WhiteSpace.DisallowTabIndent` - Thanks to Juliette Reinders Folmer for the patch - The new PHP 8.1 tokenisation for ampersands has been reverted to use the existing PHP_CodeSniffer method - The PHP 8.1 tokens `T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG` and `T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG` are unsued - Ampersands continue to be tokenized as `T_BITWISE_AND` for all PHP versions - Thanks to Juliette Reinders Folmer and Anna Filina for the patch - `File::getMethodParameters()` no longer incorrectly returns argument attributes in the type hint array index - A new `has_attributes` array index is available and set to `TRUE` if the argument has attributes defined - Thanks to Juliette Reinders Folmer for the patch - `Generic.NamingConventions.ConstructorName` no longer throws deprecation notices on PHP 8.1 - Thanks to Juliette Reinders Folmer for the patch - `Squiz.Commenting.BlockComment` now correctly applies rules for block comments after a short echo tag - Thanks to Juliette Reinders Folmer for the patch - Fixed false positives when using attributes in the following sniffs: - `PEAR.Commenting.FunctionComment` - `Squiz.Commenting.InlineComment` - `Squiz.Commenting.BlockComment` - `Squiz.Commenting.VariableComment` - `Squiz.WhiteSpace.MemberVarSpacing` - Thanks to Juliette Reinders Folmer for the patch - Fixed bug [#3294](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3294) : Bug in attribute tokenization when content contains PHP end token or attribute closer on new line - Thanks to Alessandro Chitolina for the patch - Thanks to Juliette Reinders Folmer for the tests - Fixed bug [#3296](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3296) : PSR2.ControlStructures.SwitchDeclaration takes phpcs:ignore as content of case body - Fixed bug [#3297](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3297) : PSR2.ControlStructures.SwitchDeclaration.TerminatingComment does not handle try/finally blocks - Thanks to Juliette Reinders Folmer for the patch - Fixed bug [#3302](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3302) : PHP 8.0 | Tokenizer/PHP: bugfix for union types using namespace operator - Thanks to Juliette Reinders Folmer for the patch - Fixed bug [#3303](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3303) : findStartOfStatement() doesn't work with T_OPEN_TAG_WITH_ECHO - Fixed bug [#3316](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3316) : Arrow function not tokenized correctly when using null in union type - Fixed bug [#3317](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3317) : Problem with how phpcs handles ignored files when running in parallel - Thanks to Emil Andersson for the patch - Fixed bug [#3324](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3324) : PHPCS hangs processing some nested arrow functions inside a function call - Fixed bug [#3326](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3326) : Generic.Formatting.MultipleStatementAlignment error with const DEFAULT - Thanks to Juliette Reinders Folmer for the patch - Fixed bug [#3333](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3333) : Squiz.Objects.ObjectInstantiation: null coalesce operators are not recognized as assignment - Thanks to Juliette Reinders Folmer for the patch - Fixed bug [#3340](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3340) : Ensure interface and trait names are always tokenized as T_STRING - Thanks to Juliette Reinders Folmer for the patch - Fixed bug [#3342](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3342) : PSR12/Squiz/PEAR standards all error on promoted properties with docblocks - Thanks to Juliette Reinders Folmer for the patch - Fixed bug [#3345](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3345) : IF statement with no braces and double catch turned into syntax error by auto-fixer - Thanks to Juliette Reinders Folmer for the patch - Fixed bug [#3352](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3352) : PSR2.ControlStructures.SwitchDeclaration can remove comments on the same line as the case statement while fixing - Thanks to Juliette Reinders Folmer for the patch - Fixed bug [#3357](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3357) : Generic.Functions.OpeningFunctionBraceBsdAllman removes return type when additional lines are present - Thanks to Juliette Reinders Folmer for the patch - Fixed bug [#3362](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3362) : Generic.WhiteSpace.ScopeIndent false positive for arrow functions inside arrays - Fixed bug [#3384](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3384) : Squiz.Commenting.FileComment.SpacingAfterComment false positive on empty file - Fixed bug [#3394](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3394) : Fix PHP 8.1 auto_detect_line_endings deprecation notice - Fixed bug [#3400](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3400) : PHP 8.1: prevent deprecation notices about missing return types - Thanks to Juliette Reinders Folmer for the patch - Fixed bug [#3424](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3424) : PHPCS fails when using PHP 8 Constructor property promotion with attributes - Thanks to Juliette Reinders Folmer for the patch - Fixed bug [#3425](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3425) : PHP 8.1 | Runner::processChildProcs(): fix passing null to non-nullable bug - Thanks to Juliette Reinders Folmer for the patch - Fixed bug [#3445](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3445) : Nullable parameter after attribute incorrectly tokenized as ternary operator - Thanks to Juliette Reinders Folmer for the patch ### [`v3.6.0`](https://togithub.com/squizlabs/PHP_CodeSniffer/releases/tag/3.6.0) [Compare Source](https://togithub.com/squizlabs/PHP_CodeSniffer/compare/3.5.8...3.6.0) #### PHP 8 Language Feature Support PHP_CodeSniffer has run under PHP 8 for some time, but it has not supported all new language features until this release. Version 3.6.0 adds support for all new PHP 8 language features, including: - Attributes - Constructor property promotion - Named arguments - Union types - Match expressions - Static and Mixed return types > Note: All 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.0 union types - A new `T_TYPE_UNION` token is available to represent the pipe character - `File::getMethodParameters()`, `getMethodProperties()`, and `getMemberProperties()` will now return union types - Thanks to Juliette Reinders Folmer for the patch - Added support for PHP 8.0 named function call arguments - A new `T_PARAM_NAME` token is available to represent the label with the name of the function argument in it - Thanks to Juliette Reinders Folmer for the patch - Added support for PHP 8.0 attributes - The PHP-supplied `T_ATTRIBUTE` token marks the start of an attribute - A new `T_ATTRIBUTE_END` token is available to mark the end of an attribute - New `attribute_owner` and `attribute_closer` indexes are available in the tokens array for all tokens inside an attribute - Tokenizing of attributes has been backfilled for older PHP versions - The following sniffs have been updated to support attributes: - `PEAR.Commenting.ClassComment` - `PEAR.Commenting.FileComment` - `PSR1.Files.SideEffects` - `PSR12.Files.FileHeader` - `Squiz.Commenting.ClassComment` - `Squiz.Commenting.FileComment` - `Squiz.WhiteSpace.FunctionSpacing` - Thanks to Vadim Borodavko for the patch - Thanks to Alessandro Chitolina for the patch - Added support for PHP 8.0 dereferencing of text strings with interpolated variables - Thanks to Juliette Reinders Folmer for the patch - Added support for PHP 8.0 match expressions - Match expressions are now tokenised with parenthesis and scope openers and closers - Sniffs can listen for the `T_MATCH` token to process match expressions - Note that the case and default statements inside match expressions do not have scopes set - A new `T_MATCH_ARROW` token is available to represent the arrows in match expressions - A new `T_MATCH_DEFAULT` token is available to represent the default keyword in match expressions - All tokenizing of match expressions has been backfilled for older PHP versions - The following sniffs have been updated to support match expressions: - `Generic.CodeAnalysis.AssignmentInCondition` - `Generic.CodeAnalysis.EmptyPHPStatement` - Thanks to Vadim Borodavko for the patch - `Generic.CodeAnalysis.EmptyStatement` - `Generic.PHP.LowerCaseKeyword` - `PEAR.ControlStructures.ControlSignature` - `PSR12.ControlStructures.BooleanOperatorPlacement` - `Squiz.Commenting.LongConditionClosingComment` - `Squiz.Commenting.PostStatementComment` - `Squiz.ControlStructures.LowercaseDeclaration` - `Squiz.ControlStructures.ControlSignature` - `Squiz.Formatting.OperatorBracket` - `Squiz.PHP.DisallowMultipleAssignments` - `Squiz.Objects.ObjectInstantiation` - `Squiz.WhiteSpace.ControlStructureSpacing` - Thanks to Juliette Reinders Folmer for the patch - The value of the `T_FN_ARROW` token has changed from "T_FN_ARROW" to "PHPCS_T_FN_ARROW" to avoid package conflicts - This will have no impact on custom sniffs unless they are specifically looking at the value of the `T_FN_ARROW` constant - If sniffs are just using constant to find arrow functions, they will continue to work without modification - Thanks to Juliette Reinders Folmer for the patch - `File::findStartOfStatement()` now works correctly when passed the last token in a statement - `File::getMethodParameters()` now supports PHP 8.0 constructor property promotion - Returned method params now include a `property_visibility` and `visibility_token` index if property promotion is detected - Thanks to Juliette Reinders Folmer for the patch - `File::getMethodProperties()` now includes a `return_type_end_token` index in the return value - This indicates the last token in the return type, which is helpful when checking union types - Thanks to Juliette Reinders Folmer for the patch - Include patterns are now ignored when processing STDIN - Previously, checks using include patterns were excluded when processing STDIN when no file path was provided via `--stdin-path` - Now, all include and exclude rules are ignored when no file path is provided, allowing all checks to run - If you want include and exclude rules enforced when checking STDIN, use `--stdin-path` to set the file path - Thanks to Juliette Reinders Folmer for the patch - Spaces are now correctly escaped in the paths to external on Windows - Thanks to Juliette Reinders Folmer for the patch - Added `Generic.NamingConventions.AbstractClassNamePrefix` to enforce that class names are prefixed with "Abstract" - Thanks to Anna Borzenko for the contribution - Added `Generic.NamingConventions.InterfaceNameSuffix` to enforce that interface names are suffixed with "Interface" - Thanks to Anna Borzenko for the contribution - Added `Generic.NamingConventions.TraitNameSuffix` to enforce that trait names are suffixed with "Trait" - Thanks to Anna Borzenko for the contribution - `Generic.CodeAnalysis.UnusedFunctionParameter` can now be configured to ignore variable usage for specific type hints - This allows you to suppress warnings for some variables that are not required, but leave warnings for others - Set the `ignoreTypeHints` array property to a list of type hints to ignore - Thanks to Petr Bugyík for the patch - `Generic.Formatting.MultipleStatementAlignment` can now align statements at the start of the assignment token - Previously, the sniff enforced that the values were aligned, even if this meant the assignment tokens were not - Now, the sniff can enforce that the assignment tokens are aligned, even if this means the values are not - Set the `alignAtEnd` sniff property to `false` to align the assignment tokens - The default remains at `true`, so the assigned values are aligned - Thanks to John P. Bloch for the patch - `Generic.PHP.LowerCaseType` now supports checking of typed properties - Thanks to Juliette Reinders Folmer for the patch - `Generic.PHP.LowerCaseType` now supports checking of union types - Thanks to Juliette Reinders Folmer for the patch - `PEAR.Commenting.FunctionComment` and `Squiz.Commenting.FunctionComment` sniffs can now ignore private and protected methods - Set the `minimumVisibility` sniff property to `protected` to ignore private methods - Set the `minimumVisibility` sniff property to `public` to ignore both private and protected methods - The default remains at `private`, so all methods are checked - Thanks to Vincent Langlet for the patch - `PEAR.Commenting.FunctionComment` and `Squiz.Commenting.FunctionComment` sniffs can now ignore return tags in any method - Previously, only `__construct` and `__destruct` were ignored - Set the list of method names to ignore in the `specialMethods` sniff property - The default remains at `__construct` and `__destruct` only - Thanks to Vincent Langlet for the patch - `PSR2.ControlStructures.SwitchDeclaration` now supports nested switch statements where every branch terminates - Previously, if a `CASE` only contained a `SWITCH` and no direct terminating statement, a fall-through error was displayed - Now, the error is suppressed if every branch of the `SWITCH` has a terminating statement - Thanks to Vincent Langlet for the patch - The `PSR2.Methods.FunctionCallSignature.SpaceBeforeCloseBracket` error message is now reported on the closing parenthesis token - Previously, the error was being reported on the function keyword, leading to confusing line numbers in the error report - `Squiz.Commenting.FunctionComment` is now able to ignore function comments that are only inheritdoc statements - Set the `skipIfInheritdoc` sniff property to `true` to skip checking function comments if the content is only `{@inhertidoc}` - The default remains at `false`, so these comments will continue to report errors - Thanks to Jess Myrbo for the patch - `Squiz.Commenting.FunctionComment` now supports the PHP 8 mixed type - Thanks to Vadim Borodavko for the patch - `Squiz.PHP.NonExecutableCode` now has improved handling of syntax errors - Thanks to Thiemo Kreuz for the patch - `Squiz.WhiteSpace.ScopeKeywordSpacing` now checks spacing when using PHP 8.0 constructor property promotion - Thanks to Juliette Reinders Folmer for the patch - Fixed an issue that could occur when checking files on network drives, such as with WSL2 on Windows 10 - This works around a long-standing PHP bug with `is_readable()` - Thanks to Michael S for the patch - Fixed a number of false positives in the `Squiz.PHP.DisallowMultipleAssignments` sniff - Sniff no longer errors for default value assignments in arrow functions - Sniff no longer errors for assignments on first line of closure - Sniff no longer errors for assignments after a goto label - Thanks to Jaroslav Hanslík for the patch - Fixed bug [#2913](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/2913) : Generic.WhiteSpace.ScopeIndent false positive when opening and closing tag on same line inside conditional - Fixed bug [#2992](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/2992) : Enabling caching using a ruleset produces invalid cache files when using --sniffs and --exclude CLI args - Fixed bug [#3003](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3003) : Squiz.Formatting.OperatorBracket autofix incorrect when assignment used with null coalescing operator - Fixed bug [#3145](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3145) : Autoloading of sniff fails when multiple classes declared in same file - Fixed bug [#3157](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3157) : PSR2.ControlStructures.SwitchDeclaration.BreakIndent false positive when case keyword is not indented - Fixed bug [#3163](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3163) : Undefined index error with pre-commit hook using husky on PHP 7.4 - Thanks to Ismo Vuorinen for the patch - Fixed bug [#3165](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3165) : Squiz.PHP.DisallowComparisonAssignment false positive when comparison inside closure - Fixed bug [#3167](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3167) : Generic.WhiteSpace.ScopeIndent false positive when using PHP 8.0 constructor property promotion - Fixed bug [#3170](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3170) : Squiz.WhiteSpace.OperatorSpacing false positive when using negation with string concat - This also fixes the same issue in the PSR12.Operators.OperatorSpacing sniff - Fixed bug [#3177](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3177) : Incorrect tokenization of GOTO statements in mixed PHP/HTML files - Thanks to Juliette Reinders Folmer for the patch - Fixed bug [#3184](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3184) : PSR2.Namespace.NamespaceDeclaration false positive on namespace operator - Thanks to Juliette Reinders Folmer for the patch - Fixed bug [#3188](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3188) : Squiz.WhiteSpace.ScopeKeywordSpacing false positive for static return type - Thanks to Juliette Reinders Folmer for the patch - Fixed bug [#3192](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3192) : findStartOfStatement doesn't work correctly inside switch - Thanks to Vincent Langlet for the patch - Fixed bug [#3195](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3195) : Generic.WhiteSpace.ScopeIndent confusing message when combination of tabs and spaces found - Fixed bug [#3197](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3197) : Squiz.NamingConventions.ValidVariableName does not use correct error code for all member vars - Fixed bug [#3219](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3219) : Generic.Formatting.MultipleStatementAlignment false positive for empty anonymous classes and closures - Fixed bug [#3258](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3258) : Squiz.Formatting.OperatorBracket duplicate error messages for unary minus - Thanks to Juliette Reinders Folmer for the patch - Fixed bug [#3273](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3273) : Squiz.Functions.FunctionDeclarationArgumentSpacing reports line break as 0 spaces between parenthesis - Fixed bug [#3277](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3277) : Nullable static return typehint causes whitespace error - Fixed bug [#3284](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3284) : Unused parameter false positive when using array index in arrow function ### [`v3.5.8`](https://togithub.com/squizlabs/PHP_CodeSniffer/releases/tag/3.5.8) [Compare Source](https://togithub.com/squizlabs/PHP_CodeSniffer/compare/3.5.7...3.5.8) - Reverted a change to the way include/exclude patterns are processed for STDIN content - This change is not backwards compatible and will be re-introduced in version 3.6.0 ### [`v3.5.7`](https://togithub.com/squizlabs/PHP_CodeSniffer/releases/tag/3.5.7) [Compare Source](https://togithub.com/squizlabs/PHP_CodeSniffer/compare/3.5.6...3.5.7) - The PHP 8.0 `T_NULLSAFE_OBJECT_OPERATOR` token has been made available for older versions - Existing sniffs that check for `T_OBJECT_OPERATOR` have been modified to apply the same rules for the nullsafe object operator - Thanks to Juliette Reinders Folmer for the patch - The new method of PHP 8.0 tokenizing for namespaced names has been revert to the pre 8.0 method - This maintains backwards compatible for existing sniffs on PHP 8.0 - This change will be removed in PHPCS 4.0 as the PHP 8.0 tokenizing method will be backported for pre 8.0 versions - Thanks to Juliette Reinders Folmer for the patch - Added support for changes to the way PHP 8.0 tokenizes hash comments - The existing PHP 5-7 behaviour has been replicated for version 8, so no sniff changes are required - Thanks to Juliette Reinders Folmer for the patch - The autoloader has been changed to fix sniff class name detection issues that may occur when running on PHP 7.4+ - Thanks to Eloy Lafuente for the patch - Running the unit tests now includes warnings in the found and fixable error code counts - Thanks to Juliette Reinders Folmer for the patch - `PSR12.ControlStructures.BooleanOperatorPlacement.FoundMixed` error message is now more accurate when using the allowOnly setting - Thanks to Vincent Langlet for the patch - `PSR12.Functions.NullableTypeDeclaration` now supports the PHP8 static return type - Thanks to Juliette Reinders Folmer for the patch - Fixed `Squiz.Formatting.OperatorBracket` false positive when exiting with a negative number - Fixed `Squiz.PHP.DisallowComparisonAssignment` false positive for methods called on an object - Fixed bug [#2882](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/2882) : Generic.Arrays.ArrayIndent can request close brace indent to be less than the statement indent level - Fixed bug [#2883](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/2883) : Generic.WhiteSpace.ScopeIndent.Incorrect issue after NOWDOC - Fixed bug [#2975](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/2975) : Undefined offset in PSR12.Functions.ReturnTypeDeclaration when checking function return type inside ternary - Fixed bug [#2988](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/2988) : Undefined offset in Squiz.Strings.ConcatenationSpacing during live coding - Thanks to Thiemo Kreuz for the patch - Fixed bug [#2989](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/2989) : Incorrect auto-fixing in Generic.ControlStructures.InlineControlStructure during live coding - Thanks to Thiemo Kreuz for the patch - Fixed bug [#3007](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3007) : Directory exclude pattern improperly excludes directories with names that start the same - Thanks to Steve Talbot for the patch - Fixed bug [#3043](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3043) : Squiz.WhiteSpace.OperatorSpacing false positive for negation in arrow function - Thanks to Juliette Reinders Folmer for the patch - Fixed bug [#3049](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3049) : Incorrect error with arrow function and parameter passed as reference - Thanks to Juliette Reinders Folmer for the patch - Fixed bug [#3053](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3053) : PSR2 incorrect fix when multiple use statements on same line do not have whitespace between them - Fixed bug [#3058](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3058) : Progress gets unaligned when 100% happens at the end of the available dots - Fixed bug [#3059](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3059) : Squiz.Arrays.ArrayDeclaration false positive when using type casting - Thanks to Sergei Morozov for the patch - Fixed bug [#3060](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3060) : Squiz.Arrays.ArrayDeclaration false positive for static functions - Thanks to Sergei Morozov for the patch - Fixed bug [#3065](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3065) : Should not fix Squiz.Arrays.ArrayDeclaration.SpaceBeforeComma if comment between element and comma - Thanks to Sergei Morozov for the patch - Fixed bug [#3066](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3066) : No support for namespace operator used in type declarations - Thanks to Juliette Reinders Folmer for the patch - Fixed bug [#3075](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3075) : PSR12.ControlStructures.BooleanOperatorPlacement false positive when operator is the only content on line - Fixed bug [#3099](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3099) : Squiz.WhiteSpace.OperatorSpacing false positive when exiting with negative number - Thanks to Sergei Morozov for the patch - Fixed bug [#3102](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3102) : PSR12.Squiz.OperatorSpacing false positive for default values of arrow functions - Thanks to Juliette Reinders Folmer for the patch - Fixed bug [#3124](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3124) : PSR-12 not reporting error for empty lines with only whitespace - Fixed bug [#3135](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3135) : Ignore annotations are broken on PHP 8.0 - Thanks to Juliette Reinders Folmer for the patch ### [`v3.5.6`](https://togithub.com/squizlabs/PHP_CodeSniffer/releases/tag/3.5.6) [Compare Source](https://togithub.com/squizlabs/PHP_CodeSniffer/compare/3.5.5...3.5.6) - Added support for PHP 8.0 magic constant dereferencing - Thanks to Juliette Reinders Folmer for the patch - Added support for changes to the way PHP 8.0 tokenizes comments - The existing PHP 5-7 behaviour has been replicated for version 8, so no sniff changes are required - Thanks to Juliette Reinders Folmer for the patch - `File::getMethodProperties()` now detects the PHP 8.0 static return type - Thanks to Juliette Reinders Folmer for the patch - The PHP 8.0 static return type is now supported for arrow functions - Thanks to Juliette Reinders Folmer for the patch - The cache is no longer used if the list of loaded PHP extensions changes - Thanks to Juliette Reinders Folmer for the patch - `Generic.NamingConventions.CamelCapsFunctionName` no longer reports `__serialize` and `__unserialize` as invalid names - Thanks to Filip Š for the patch - `PEAR.NamingConventions.ValidFunctionName` no longer reports `__serialize` and `__unserialize` as invalid names - Thanks to Filip Š for the patch - `Squiz.Scope.StaticThisUsage` now detects usage of `$this` inside closures and arrow functions - Thanks to Michał Bundyra for the patch - Fixed bug [#2877](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/2877) : PEAR.Functions.FunctionCallSignature false positive for array of functions - Thanks to Vincent Langlet for the patch - Fixed bug [#2888](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/2888) : PSR12.Files.FileHeader blank line error with multiple namespaces in one file - Fixed bug [#2926](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/2926) : phpcs hangs when using arrow functions that return heredoc - Fixed bug [#2943](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/2943) : Redundant semicolon added to a file when fixing PSR2.Files.ClosingTag.NotAllowed - Fixed bug [#2967](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/2967) : Markdown generator does not output headings correctly - Thanks to Petr Bugyík for the patch - Fixed bug [#2977](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/2977) : File::isReference() does not detect return by reference for closures - Thanks to Juliette Reinders Folmer for the patch - Fixed bug [#2994](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/2994) : Generic.Formatting.DisallowMultipleStatements false positive for FOR loop with no body - Fixed bug [#3033](https://togithub.com/squizlabs/PHP_CodeSniffer/issues/3033) : Error generated during tokenizing of goto statements on PHP 8 - Thanks to Juliette Reinders Folmer for the patchConfiguration
📅 Schedule: Branch creation - "before 3am on the first day of the month" (UTC), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
This PR has been generated by Mend Renovate. View repository job log here.