PEAR/PSR2/FunctionCallSignature: support anonymous classes
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
classkeyword 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::$functionNameTokensarray within PHPCS.- The
Generic.WhiteSpace.ArbitraryParenthesesSpacingsniff is not affected by the change and already contains a test to verify this. - The
Squiz.Operators.ComparisonOperatorUsagesniff also is not affected by the change. I have added tests to confirm this in a separate commit.
- The
- 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.ScopeIndentsniff. 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 .
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).
Rebased without any real changes to solve the merge conflicts.