PHP_CodeSniffer icon indicating copy to clipboard operation
PHP_CodeSniffer copied to clipboard

PEAR/PSR2/FunctionCallSignature: support anonymous classes

Open jrfnl opened this issue 3 years ago • 2 comments

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 avatar Jul 23 '22 13:07 jrfnl

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).

jrfnl avatar Jul 23 '22 13:07 jrfnl

Rebased without any real changes to solve the merge conflicts.

jrfnl avatar Sep 19 '22 09:09 jrfnl