Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. Tokenizer.php

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

Tokenizer

Namespace

PHP_CodeSniffer\Tokenizers

Code

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;
    }
}
RSS feed
Powered by Drupal