function PHP::parsePhpAttribute
PHP 8 attributes parser for PHP < 8 Handles single-line and multiline attributes.
Parameters
array $tokens The original array of tokens (as returned by token_get_all).:
int $stackPtr The current position in token array.:
Return value
array|null The array of parsed attribute tokens
1 call to PHP::parsePhpAttribute()
- PHP::tokenize in vendor/
squizlabs/ php_codesniffer/ src/ Tokenizers/ PHP.php - Creates an array of tokens when given some PHP code.
File
-
vendor/
squizlabs/ php_codesniffer/ src/ Tokenizers/ PHP.php, line 3911
Class
Namespace
PHP_CodeSniffer\TokenizersCode
private function parsePhpAttribute(array &$tokens, $stackPtr) {
$token = $tokens[$stackPtr];
$commentBody = substr($token[1], 2);
$subTokens = @token_get_all('<?php ' . $commentBody);
foreach ($subTokens as $i => $subToken) {
if (is_array($subToken) === true && $subToken[0] === T_COMMENT && strpos($subToken[1], '#[') === 0) {
$reparsed = $this->parsePhpAttribute($subTokens, $i);
if ($reparsed !== null) {
array_splice($subTokens, $i, 1, $reparsed);
}
else {
$subToken[0] = T_ATTRIBUTE;
}
}
}
array_splice($subTokens, 0, 1, [
[
T_ATTRIBUTE,
'#[',
],
]);
// Go looking for the close bracket.
$bracketCloser = $this->findCloser($subTokens, 1, '[', ']');
if (PHP_VERSION_ID < 80000 && $bracketCloser === null) {
foreach (array_slice($tokens, $stackPtr + 1) as $token) {
if (is_array($token) === true) {
$commentBody .= $token[1];
}
else {
$commentBody .= $token;
}
}
$subTokens = @token_get_all('<?php ' . $commentBody);
array_splice($subTokens, 0, 1, [
[
T_ATTRIBUTE,
'#[',
],
]);
$bracketCloser = $this->findCloser($subTokens, 1, '[', ']');
if ($bracketCloser !== null) {
array_splice($tokens, $stackPtr + 1, count($tokens), array_slice($subTokens, $bracketCloser + 1));
$subTokens = array_slice($subTokens, 0, $bracketCloser + 1);
}
}
if ($bracketCloser === null) {
return null;
}
return $subTokens;
}