PHP_CodeSniffer_File::_createTokenMap PHP Method

_createTokenMap() private static method

Creates a map of brackets positions.
private static _createTokenMap ( array &$tokens, object $tokenizer, string $eolChar ) : void
$tokens array The array of tokens to process.
$tokenizer object The tokenizer being used to process this file.
$eolChar string The EOL character to use for splitting strings.
return void
    private static function _createTokenMap(&$tokens, $tokenizer, $eolChar)
    {
        if (PHP_CODESNIFFER_VERBOSITY > 1) {
            echo "\t*** START TOKEN MAP ***" . PHP_EOL;
        }
        $squareOpeners = array();
        $curlyOpeners = array();
        $numTokens = count($tokens);
        $openers = array();
        $openOwner = null;
        for ($i = 0; $i < $numTokens; $i++) {
            /*
                Parenthesis mapping.
            */
            if (isset(PHP_CodeSniffer_Tokens::$parenthesisOpeners[$tokens[$i]['code']]) === true) {
                $tokens[$i]['parenthesis_opener'] = null;
                $tokens[$i]['parenthesis_closer'] = null;
                $tokens[$i]['parenthesis_owner'] = $i;
                $openOwner = $i;
            } else {
                if ($tokens[$i]['code'] === T_OPEN_PARENTHESIS) {
                    $openers[] = $i;
                    $tokens[$i]['parenthesis_opener'] = $i;
                    if ($openOwner !== null) {
                        $tokens[$openOwner]['parenthesis_opener'] = $i;
                        $tokens[$i]['parenthesis_owner'] = $openOwner;
                        $openOwner = null;
                    }
                } else {
                    if ($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($tokens[$opener]['parenthesis_owner']) === true) {
                                $owner = $tokens[$opener]['parenthesis_owner'];
                                $tokens[$owner]['parenthesis_closer'] = $i;
                                $tokens[$i]['parenthesis_owner'] = $owner;
                            }
                            $tokens[$i]['parenthesis_opener'] = $opener;
                            $tokens[$i]['parenthesis_closer'] = $i;
                            $tokens[$opener]['parenthesis_closer'] = $i;
                        }
                    }
                }
            }
            //end if
            /*
                Bracket mapping.
            */
            switch ($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($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);
                        $tokens[$i]['bracket_opener'] = $opener;
                        $tokens[$i]['bracket_closer'] = $i;
                        $tokens[$opener]['bracket_opener'] = $opener;
                        $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($tokens[$i]['scope_opener']) === false) {
                        $opener = array_pop($curlyOpeners);
                        $tokens[$i]['bracket_opener'] = $opener;
                        $tokens[$i]['bracket_closer'] = $i;
                        $tokens[$opener]['bracket_opener'] = $opener;
                        $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;
            }
            //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($tokens[$opener]['parenthesis_opener']);
            unset($tokens[$opener]['parenthesis_owner']);
        }
        if (PHP_CODESNIFFER_VERBOSITY > 1) {
            echo "\t*** END TOKEN MAP ***" . PHP_EOL;
        }
    }