Tokenizer/PHP: bug fix for missing parenthesis owner for method named "fn" #1128
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
When a function is named "fn", the
function
keyword should be set as the parenthesis owner.While this works on PHPCS 3.x, I found while making PHPCSUtils compatible with 4.x, that this was broken on PHPCS 4.x for PHP 7.2 and 7.3 since commit da0d224.
This was due to token being seen as a
T_FN
token after the initial tokenization fixing round, so theTokenizer::createTokenMap()
would receive theT_FN
token and not set the parenthesis owner index. The additional token processing run after that, would realize this is not in actual fact an arrow function and undo the retokenization (fromT_FN
back toT_STRING
), which leaves the parentheses for this function declaration without an owner.Fixed now by preventing the initial
T_STRING
toT_FN
retokenization if the keyword is used in a context where the token should always be aT_STRING
.Suggested changelog entry
Fixed: missing 'parenthesis_owner' index for
T_FUNCTION
token on PHP < 7.4 when function is named "fn".Types of changes