Skip to content

Commit

Permalink
Merge branch 'feature/php-8.1-undo-new-reference-token' of https://gi…
Browse files Browse the repository at this point in the history
  • Loading branch information
gsherwood committed Aug 26, 2021
2 parents 915a694 + 7c5b4e6 commit 9736ccd
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 1 deletion.
22 changes: 21 additions & 1 deletion src/Tokenizers/PHP.php
Original file line number Diff line number Diff line change
Expand Up @@ -646,6 +646,25 @@ protected function tokenize($string)
}//end if
}//end if

/*
PHP 8.1 introduced two dedicated tokens for the & character.
Retokenizing both of these to T_BITWISE_AND, which is the
token PHPCS already tokenized them as.
*/

if ($tokenIsArray === true
&& ($token[0] === T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG
|| $token[0] === T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG)
) {
$finalTokens[$newStackPtr] = [
'code' => T_BITWISE_AND,
'type' => 'T_BITWISE_AND',
'content' => $token[1],
];
$newStackPtr++;
continue;
}

/*
If this is a double quoted string, PHP will tokenize the whole
thing which causes problems with the scope map when braces are
Expand Down Expand Up @@ -1667,7 +1686,8 @@ protected function tokenize($string)
if ($token[0] === T_FUNCTION) {
for ($x = ($stackPtr + 1); $x < $numTokens; $x++) {
if (is_array($tokens[$x]) === false
|| isset(Util\Tokens::$emptyTokens[$tokens[$x][0]]) === false
|| (isset(Util\Tokens::$emptyTokens[$tokens[$x][0]]) === false
&& $tokens[$x][1] !== '&')
) {
// Non-empty content.
break;
Expand Down
9 changes: 9 additions & 0 deletions src/Util/Tokens.php
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,15 @@
define('T_ATTRIBUTE', 'PHPCS_T_ATTRIBUTE');
}

// Some PHP 8.1 tokens, replicated for lower versions.
if (defined('T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG') === false) {
define('T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG', 'PHPCS_T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG');
}

if (defined('T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG') === false) {
define('T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG', 'PHPCS_T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG');
}

// Tokens used for parsing doc blocks.
define('T_DOC_COMMENT_STAR', 'PHPCS_T_DOC_COMMENT_STAR');
define('T_DOC_COMMENT_WHITESPACE', 'PHPCS_T_DOC_COMMENT_WHITESPACE');
Expand Down

0 comments on commit 9736ccd

Please sign in to comment.