Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PEAR/Squiz/[MultiLine]FunctionDeclaration: allow for PHP 8.1 new in initializers #3787

Conversation

jrfnl
Copy link
Contributor

@jrfnl jrfnl commented Mar 30, 2023

Since PHP 8.1, new ClassName() expressions can be used as the default value of a parameter in a function declaration.

new ClassName() expressions should be treated as function calls, which have their own indentation rules, so the PEAR.Functions.FunctionDeclaration and the Squiz.Functions.MultiLineFunctionDeclaration sniffs should skip over these and not attempt to change the indentation of parameters in those function calls.

This commit implements this change.

Includes unit tests.

Refs:

Fixes #3786


Note:

  • I have also verified that the File::getMethodParameters() method handles "new in initializers" correctly.
  • And based on a cursory code check of the Squiz.Functions.FunctionDeclaration, the Squiz.Functions.FunctionDeclarationArgumentSpacing and the PSR2.Methods.MethodDeclaration sniffs, I don't foresee that those need changes for "new in initializers".

…nitializers

Since PHP 8.1, `new ClassName()` expressions can be used as the default value of a parameter in a function declaration.

`new ClassName()` expressions should be treated as function _calls_, which have their own indentation rules, so the `PEAR.Functions.FunctionDeclaration` and the `Squiz.Functions.MultiLineFunctionDeclaration` sniffs should skip over these and not attempt to change the indentation of parameters in those function calls.

This commit implements this change.

Includes unit tests.

Refs:
* https://wiki.php.net/rfc/new_in_initializers
* https://www.php.net/manual/en/migration81.new-features.php#migration81.new-features.core.new-in-initializer
* https://www.php.net/manual/en/language.oop5.decon.php#language.oop5.decon.constructor.new

Fixes 3786
@jrfnl
Copy link
Contributor Author

jrfnl commented Mar 30, 2023

Note: this PR will conflict with the already open PRs #3739 and #3661 and depending on the merge order, rebasing and conflict resolution will be needed....

@gsherwood gsherwood added this to Idea Bank in PHPCS v3 Development via automation May 4, 2023
@gsherwood gsherwood added this to the 3.8.0 milestone May 4, 2023
gsherwood added a commit that referenced this pull request May 4, 2023
@gsherwood gsherwood merged commit 84e97dc into squizlabs:master May 4, 2023
26 of 27 checks passed
PHPCS v3 Development automation moved this from Idea Bank to Ready for Release May 4, 2023
@jrfnl jrfnl deleted the feature/3786-squiz/multilinefunctiondeclarations-allow-for-new-in-initializers branch May 4, 2023 08:03
@jrfnl
Copy link
Contributor Author

jrfnl commented Dec 8, 2023

FYI: this fix is included in today's PHP_CodeSniffer 3.8.0 release.

As per #3932, development on PHP_CodeSniffer will continue in the PHPCSStandards/PHP_CodeSniffer repository. If you want to stay informed, you may want to start "watching" that repo (or watching releases from that repo).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
PHPCS v3 Development
Ready for Release
Development

Successfully merging this pull request may close these issues.

PHP 8.1 - Constructor Multi-line function declaration not indented correctly
2 participants