getTokenNotOfKindSibling() public method

Get index for closest sibling token not of given kind.
public getTokenNotOfKindSibling ( integer $index, integer $direction, array $tokens = [] ) : integer | null
$index integer token index
$direction integer direction for looking, +1 or -1
$tokens array possible tokens
return integer | null
Exemplo n.º 1
0
 private function getNewOrder(array $uses, Tokens $tokens)
 {
     $uses = array_reverse($uses);
     $indexes = array();
     $originalIndexes = array();
     foreach ($uses as $index) {
         $startIndex = $tokens->getTokenNotOfKindSibling($index + 1, 1, array(array(T_WHITESPACE)));
         $endIndex = $tokens->getNextTokenOfKind($startIndex, array(';', array(T_CLOSE_TAG)));
         $previous = $tokens->getPrevMeaningfulToken($endIndex);
         $group = $tokens[$previous]->equals('}');
         if ($tokens[$startIndex]->isGivenKind(array(CT_CONST_IMPORT))) {
             $type = self::IMPORT_TYPE_CONST;
         } elseif ($tokens[$startIndex]->isGivenKind(array(CT_FUNCTION_IMPORT))) {
             $type = self::IMPORT_TYPE_FUNCTION;
         } else {
             $type = self::IMPORT_TYPE_CLASS;
         }
         $namespace = '';
         $index = $startIndex;
         while ($index <= $endIndex) {
             $token = $tokens[$index];
             if ($index === $endIndex || !$group && $token->equals(',')) {
                 $indexes[$startIndex] = array('namespace' => $namespace, 'startIndex' => $startIndex, 'endIndex' => $index - 1, 'importType' => $type);
                 $originalIndexes[] = $startIndex;
                 if ($index === $endIndex) {
                     break;
                 }
                 $namespace = '';
                 $nextPartIndex = $tokens->getTokenNotOfKindSibling($index, 1, array(array(','), array(T_WHITESPACE)));
                 $startIndex = $nextPartIndex;
                 $index = $nextPartIndex;
                 continue;
             }
             $namespace .= $token->getContent();
             ++$index;
         }
     }
     uasort($indexes, 'self::sortingCallBack');
     $index = -1;
     $usesOrder = array();
     // Loop trough the index but use original index order
     foreach ($indexes as $v) {
         $usesOrder[$originalIndexes[++$index]] = $v;
     }
     return $usesOrder;
 }
Exemplo n.º 2
0
 private function getNewOrder(array $uses, Tokens $tokens)
 {
     $uses = array_reverse($uses);
     $indexes = array();
     $originalIndexes = array();
     foreach ($uses as $index) {
         $endIndex = $tokens->getNextTokenOfKind($index, array(';'));
         $startIndex = $tokens->getTokenNotOfKindSibling($index + 1, 1, array(array(T_WHITESPACE)));
         $namespace = '';
         $index = $startIndex;
         while ($index <= $endIndex) {
             $token = $tokens[$index];
             if ($index === $endIndex || $token->equals(',')) {
                 $indexes[$startIndex] = array($namespace, $startIndex, $index - 1);
                 $originalIndexes[] = $startIndex;
                 if ($index === $endIndex) {
                     break;
                 }
                 $namespace = '';
                 $nextPartIndex = $tokens->getTokenNotOfKindSibling($index, 1, array(array(','), array(T_WHITESPACE)));
                 $startIndex = $nextPartIndex;
                 $index = $nextPartIndex;
                 continue;
             }
             $namespace .= $token->getContent();
             ++$index;
         }
     }
     uasort($indexes, 'self::sortingCallBack');
     $i = -1;
     $usesOrder = array();
     // Loop trough the index but use original index order
     foreach ($indexes as $v) {
         $usesOrder[$originalIndexes[++$i]] = $v;
     }
     return $usesOrder;
 }
 private function getNewOrder(array $uses, Tokens $tokens)
 {
     $indexes = array();
     $originalIndexes = array();
     for ($i = count($uses) - 1; $i >= 0; --$i) {
         $index = $uses[$i];
         $startIndex = $tokens->getTokenNotOfKindSibling($index + 1, 1, array(array(T_WHITESPACE)));
         $endIndex = $tokens->getNextTokenOfKind($startIndex, array(';', array(T_CLOSE_TAG)));
         $previous = $tokens->getPrevMeaningfulToken($endIndex);
         $group = $tokens[$previous]->isGivenKind(CT::T_GROUP_IMPORT_BRACE_CLOSE);
         if ($tokens[$startIndex]->isGivenKind(array(CT::T_CONST_IMPORT))) {
             $type = self::IMPORT_TYPE_CONST;
         } elseif ($tokens[$startIndex]->isGivenKind(array(CT::T_FUNCTION_IMPORT))) {
             $type = self::IMPORT_TYPE_FUNCTION;
         } else {
             $type = self::IMPORT_TYPE_CLASS;
         }
         $namespaceTokens = array();
         $index = $startIndex;
         while ($index <= $endIndex) {
             $token = $tokens[$index];
             if ($index === $endIndex || !$group && $token->equals(',')) {
                 if ($group) {
                     // if group import, sort the items within the group definition
                     // figure out where the list of namespace parts within the group def. starts
                     $namespaceTokensCount = count($namespaceTokens) - 1;
                     $namespace = '';
                     for ($k = 0; $k < $namespaceTokensCount; ++$k) {
                         if ($namespaceTokens[$k]->isGivenKind(CT::T_GROUP_IMPORT_BRACE_OPEN)) {
                             $namespace .= '{';
                             break;
                         }
                         $namespace .= $namespaceTokens[$k]->getContent();
                     }
                     // fetch all parts, split up in an array of strings, move comments to the end
                     $parts = array();
                     for ($k1 = $k + 1; $k1 < $namespaceTokensCount; ++$k1) {
                         $comment = '';
                         $namespacePart = '';
                         for ($k2 = $k1;; ++$k2) {
                             if ($namespaceTokens[$k2]->equalsAny(array(',', array(CT::T_GROUP_IMPORT_BRACE_CLOSE)))) {
                                 break;
                             }
                             if ($namespaceTokens[$k2]->isComment()) {
                                 $comment .= $namespaceTokens[$k2]->getContent();
                                 continue;
                             }
                             $namespacePart .= $namespaceTokens[$k2]->getContent();
                         }
                         $namespacePart = trim($namespacePart);
                         $comment = trim($comment);
                         if ('' !== $comment) {
                             $namespacePart .= ' ' . $comment;
                         }
                         $parts[] = $namespacePart . ', ';
                         $k1 = $k2;
                     }
                     $sortedParts = $parts;
                     sort($parts);
                     // check if the order needs to be updated, otherwise don't touch as we might change valid CS (to other valid CS).
                     if ($sortedParts === $parts) {
                         $namespace = Tokens::fromArray($namespaceTokens)->generateCode();
                     } else {
                         $namespace .= substr(implode('', $parts), 0, -2) . '}';
                     }
                 } else {
                     $namespace = Tokens::fromArray($namespaceTokens)->generateCode();
                 }
                 $indexes[$startIndex] = array('namespace' => $namespace, 'startIndex' => $startIndex, 'endIndex' => $index - 1, 'importType' => $type, 'group' => $group);
                 $originalIndexes[] = $startIndex;
                 if ($index === $endIndex) {
                     break;
                 }
                 $namespaceTokens = array();
                 $nextPartIndex = $tokens->getTokenNotOfKindSibling($index, 1, array(array(','), array(T_WHITESPACE)));
                 $startIndex = $nextPartIndex;
                 $index = $nextPartIndex;
                 continue;
             }
             $namespaceTokens[] = $token;
             ++$index;
         }
     }
     uasort($indexes, 'self::sortingCallBack');
     $index = -1;
     $usesOrder = array();
     // Loop trough the index but use original index order
     foreach ($indexes as $v) {
         $usesOrder[$originalIndexes[++$index]] = $v;
     }
     return $usesOrder;
 }