function Tokenizer::createTokenMap
Creates a map of brackets positions.
Return value
void
1 call to Tokenizer::createTokenMap()
- Tokenizer::__construct in vendor/
squizlabs/ php_codesniffer/ src/ Tokenizers/ Tokenizer.php - Initialise and run the tokenizer.
File
-
vendor/
squizlabs/ php_codesniffer/ src/ Tokenizers/ Tokenizer.php, line 669
Class
Namespace
PHP_CodeSniffer\TokenizersCode
private function createTokenMap() {
if (PHP_CODESNIFFER_VERBOSITY > 1) {
echo "\t*** START TOKEN MAP ***" . PHP_EOL;
}
$squareOpeners = [];
$curlyOpeners = [];
$this->numTokens = count($this->tokens);
$openers = [];
$openOwner = null;
for ($i = 0; $i < $this->numTokens; $i++) {
/*
Parenthesis mapping.
*/
if (isset(Tokens::$parenthesisOpeners[$this->tokens[$i]['code']]) === true) {
$this->tokens[$i]['parenthesis_opener'] = null;
$this->tokens[$i]['parenthesis_closer'] = null;
$this->tokens[$i]['parenthesis_owner'] = $i;
$openOwner = $i;
if (PHP_CODESNIFFER_VERBOSITY > 1) {
echo str_repeat("\t", count($openers) + 1);
echo "=> Found parenthesis owner at {$i}" . PHP_EOL;
}
}
else {
if ($this->tokens[$i]['code'] === T_OPEN_PARENTHESIS) {
$openers[] = $i;
$this->tokens[$i]['parenthesis_opener'] = $i;
if ($openOwner !== null) {
if (PHP_CODESNIFFER_VERBOSITY > 1) {
echo str_repeat("\t", count($openers));
echo "=> Found parenthesis opener at {$i} for {$openOwner}" . PHP_EOL;
}
$this->tokens[$openOwner]['parenthesis_opener'] = $i;
$this->tokens[$i]['parenthesis_owner'] = $openOwner;
$openOwner = null;
}
else {
if (PHP_CODESNIFFER_VERBOSITY > 1) {
echo str_repeat("\t", count($openers));
echo "=> Found unowned parenthesis opener at {$i}" . PHP_EOL;
}
}
}
else {
if ($this->tokens[$i]['code'] === T_CLOSE_PARENTHESIS) {
// Did we set an owner for this set of parenthesis?
$numOpeners = count($openers);
if ($numOpeners !== 0) {
$opener = array_pop($openers);
if (isset($this->tokens[$opener]['parenthesis_owner']) === true) {
$owner = $this->tokens[$opener]['parenthesis_owner'];
$this->tokens[$owner]['parenthesis_closer'] = $i;
$this->tokens[$i]['parenthesis_owner'] = $owner;
if (PHP_CODESNIFFER_VERBOSITY > 1) {
echo str_repeat("\t", count($openers) + 1);
echo "=> Found parenthesis closer at {$i} for {$owner}" . PHP_EOL;
}
}
else {
if (PHP_CODESNIFFER_VERBOSITY > 1) {
echo str_repeat("\t", count($openers) + 1);
echo "=> Found unowned parenthesis closer at {$i} for {$opener}" . PHP_EOL;
}
}
$this->tokens[$i]['parenthesis_opener'] = $opener;
$this->tokens[$i]['parenthesis_closer'] = $i;
$this->tokens[$opener]['parenthesis_closer'] = $i;
}
//end if
}
else {
if ($this->tokens[$i]['code'] === T_ATTRIBUTE) {
$openers[] = $i;
if (PHP_CODESNIFFER_VERBOSITY > 1) {
echo str_repeat("\t", count($openers));
echo "=> Found attribute opener at {$i}" . PHP_EOL;
}
$this->tokens[$i]['attribute_opener'] = $i;
$this->tokens[$i]['attribute_closer'] = null;
}
else {
if ($this->tokens[$i]['code'] === T_ATTRIBUTE_END) {
$numOpeners = count($openers);
if ($numOpeners !== 0) {
$opener = array_pop($openers);
if (isset($this->tokens[$opener]['attribute_opener']) === true) {
$this->tokens[$opener]['attribute_closer'] = $i;
if (PHP_CODESNIFFER_VERBOSITY > 1) {
echo str_repeat("\t", count($openers) + 1);
echo "=> Found attribute closer at {$i} for {$opener}" . PHP_EOL;
}
for ($x = $opener + 1; $x <= $i; ++$x) {
if (isset($this->tokens[$x]['attribute_closer']) === true) {
continue;
}
$this->tokens[$x]['attribute_opener'] = $opener;
$this->tokens[$x]['attribute_closer'] = $i;
}
}
else {
if (PHP_CODESNIFFER_VERBOSITY > 1) {
echo str_repeat("\t", count($openers) + 1);
echo "=> Found unowned attribute closer at {$i} for {$opener}" . PHP_EOL;
}
}
}
//end if
}
}
}
}
}
//end if
/*
Bracket mapping.
*/
switch ($this->tokens[$i]['code']) {
case T_OPEN_SQUARE_BRACKET:
$squareOpeners[] = $i;
if (PHP_CODESNIFFER_VERBOSITY > 1) {
echo str_repeat("\t", count($squareOpeners));
echo str_repeat("\t", count($curlyOpeners));
echo "=> Found square bracket opener at {$i}" . PHP_EOL;
}
break;
case T_OPEN_CURLY_BRACKET:
if (isset($this->tokens[$i]['scope_closer']) === false) {
$curlyOpeners[] = $i;
if (PHP_CODESNIFFER_VERBOSITY > 1) {
echo str_repeat("\t", count($squareOpeners));
echo str_repeat("\t", count($curlyOpeners));
echo "=> Found curly bracket opener at {$i}" . PHP_EOL;
}
}
break;
case T_CLOSE_SQUARE_BRACKET:
if (empty($squareOpeners) === false) {
$opener = array_pop($squareOpeners);
$this->tokens[$i]['bracket_opener'] = $opener;
$this->tokens[$i]['bracket_closer'] = $i;
$this->tokens[$opener]['bracket_opener'] = $opener;
$this->tokens[$opener]['bracket_closer'] = $i;
if (PHP_CODESNIFFER_VERBOSITY > 1) {
echo str_repeat("\t", count($squareOpeners));
echo str_repeat("\t", count($curlyOpeners));
echo "\t=> Found square bracket closer at {$i} for {$opener}" . PHP_EOL;
}
}
break;
case T_CLOSE_CURLY_BRACKET:
if (empty($curlyOpeners) === false && isset($this->tokens[$i]['scope_opener']) === false) {
$opener = array_pop($curlyOpeners);
$this->tokens[$i]['bracket_opener'] = $opener;
$this->tokens[$i]['bracket_closer'] = $i;
$this->tokens[$opener]['bracket_opener'] = $opener;
$this->tokens[$opener]['bracket_closer'] = $i;
if (PHP_CODESNIFFER_VERBOSITY > 1) {
echo str_repeat("\t", count($squareOpeners));
echo str_repeat("\t", count($curlyOpeners));
echo "\t=> Found curly bracket closer at {$i} for {$opener}" . PHP_EOL;
}
}
break;
default:
continue 2;
}
//end switch
}
//end for
// Cleanup for any openers that we didn't find closers for.
// This typically means there was a syntax error breaking things.
foreach ($openers as $opener) {
unset($this->tokens[$opener]['parenthesis_opener']);
unset($this->tokens[$opener]['parenthesis_owner']);
}
if (PHP_CODESNIFFER_VERBOSITY > 1) {
echo "\t*** END TOKEN MAP ***" . PHP_EOL;
}
}