Tokenizer: apply tab replacement to heredoc/nowdoc opener #585
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
You learn something new every day 😉
While probably exceedingly rare to be found in actual codebases, the PHP tokenizer apparently allows for whitespace between the
<<<
and the heredoc/nowdoc identifier. See: https://3v4l.org/NUHZdBoth spaces as well as tabs are allowed. New lines are not allowed. Comments are also not allowed. See: https://3v4l.org/7PIEK
The PHPCS
Tokenizer
did not execute tab replacement on these tokens leading to unexpected'content'
and incorrect'length'
values in theFile::$tokens
array, which in turn could lead to incorrect sniff results and incorrect fixes.This commit adds the
T_START_HEREDOC
/T_START_NOWDOC
tokens to the array of tokens for which to do tab replacement to make them more consistent with the rest of PHPCS.Includes unit tests safeguarding this change.
Suggested changelog entry
Tokenizer not applying tab replacement to heredoc/nowdoc openers
Related issues/external references
Ref: https://externals.io/message/124462#124518
Loosely related to: squizlabs/PHP_CodeSniffer#3639 in which a similar change was made for heredoc/nowdoc closers (in the context of PHP 7.3+ flexible heredocs/nowdocs).
Types of changes