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/PSR2/FunctionCallSignature: support anonymous classes #3636

Conversation

jrfnl
Copy link
Contributor

@jrfnl jrfnl commented Jul 23, 2022

The function call spacing for anonymous class instantiations was so far not checked by these or any other PHPCS native sniffs.

In my opinion, object instantiations of anonymous classes should be treated the same an object instantiations of non-anonymous classes.

The PEAR.Functions.FunctionCallSignature and the PSR2.Methods.FunctionCallSignature sniffs check the object instantiation spacing for non-anonymous classes, so seem like the logical place to also check the spacing for anonymous class object instantiations.

To add this support, the T_ANON_CLASS token has been added to the Tokens::$functionNameTokens array.

Notes:

  • As PSR12 does not specify the spacing between the class keyword and the open parenthesis (or rather is unclear about it), I am explicitly excluding anonymous classes from the "space before open parenthesis" check.
    Related: Unexpected spacing for anonymous classes with constructor arguments #3200
  • I have verified all other uses of the Tokens::$functionNameTokens array within PHPCS.
    • The Generic.WhiteSpace.ArbitraryParenthesesSpacing sniff is not affected by the change and already contains a test to verify this.
    • The Squiz.Operators.ComparisonOperatorUsage sniff also is not affected by the change. I have added tests to confirm this in a separate commit.
  • Obviously external standards using the token array may be affected by the change, but a scan of the most popular external standards showed me that the token array is rarely used and when it is used, is mostly used incorrectly.
    The only sniff using the array, which looks to be using it correctly and which may be affected, is the WebImpressCodingStandard.WhiteSpace.ScopeIndent sniff. Whether this is positive or negative is up to @michalbundyra to determine.

Includes unit tests for both the PEAR.Functions.FunctionCallSignature and the PSR2.Methods.FunctionCallSignature sniffs .

@jrfnl
Copy link
Contributor Author

jrfnl commented Jul 23, 2022

Note: this does cause some overlap with the PSR12.Classes.AnonClassDeclaration sniff in the PSR12 standard. Not sure what to do about this, though it shouldn't be a cause for fixer conflicts (as the sniffs expect the same thing).

.. to document that the sniff also handles comparisons passed in the instantiation of an anonymous class.
The function call spacing for anonymous class instantiations was so far not checked by these or any other PHPCS native sniffs.

In my opinion, object instantiations of anonymous classes should be treated the same an object instantiations of non-anonymous classes.

The `PEAR.Functions.FunctionCallSignature` and the `PSR2.Methods.FunctionCallSignature` sniffs check the object instantiation spacing for non-anonymous classes, so seem like the logical place to also check the spacing for anonymous class object instantiations.

To add this support, the `T_ANON_CLASS` token has been added to the `Tokens::$functionNameTokens` array.

Notes:
* As PSR12 does not specify the spacing between the `class` keyword and the open parenthesis (or rather is unclear about it), I am explicitly excluding anonymous classes from the "space before open parenthesis" check.
    Related: squizlabs/PHP_CodeSniffer 3200
* I have verified all other uses of the `Tokens::$functionNameTokens` array within PHPCS.
    - The `Generic.WhiteSpace.ArbitraryParenthesesSpacing` sniff is not affected by the change and already contains a test to verify this.
    - The `Squiz.Operators.ComparisonOperatorUsage` sniff also is not affected by the change. I have added tests to confirm this in a separate commit.
* Obviously external standards using the token array _may_ be affected by the change, but a scan of the most popular external standards showed me that the token array is rarely used and when it is used, is mostly used incorrectly.
    The only sniff using the array, which looks to be using it correctly and which may be affected, is the `WebImpressCodingStandard.WhiteSpace.ScopeIndent` sniff. Whether this is positive or negative is up to michalbundyra to determine.

Includes unit tests for both the `PEAR.Functions.FunctionCallSignature` and the `PSR2.Methods.FunctionCallSignature` sniffs .
@jrfnl jrfnl force-pushed the feature/pear-psr2-psr12-functioncallsignature-check-anon-classes branch from 90dd786 to 62d473d Compare September 19, 2022 09:35
@jrfnl
Copy link
Contributor Author

jrfnl commented Sep 19, 2022

Rebased without any real changes to solve the merge conflicts.

Copy link

@DannyvdSluijs DannyvdSluijs left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The tests in this PR function as a proof the added functionality works as expected including the undefined number of spaces between the class keyword and opening parenthesis.

@jrfnl
Copy link
Contributor Author

jrfnl commented Dec 2, 2023

Closing as replaced by PHPCSStandards/PHP_CodeSniffer#47

@jrfnl jrfnl closed this Dec 2, 2023
@jrfnl jrfnl deleted the feature/pear-psr2-psr12-functioncallsignature-check-anon-classes branch December 2, 2023 02:10
@jrfnl jrfnl removed this from the 3.8.0 milestone Dec 8, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: Ready for Release
Development

Successfully merging this pull request may close these issues.

3 participants