private function getNamespaceUseDeclarations(Tokens $tokens, array $useIndexes) { $uses = array(); foreach ($useIndexes as $index) { $declarationEndIndex = null; $tokens->getNextTokenOfKind($index, array(';'), $declarationEndIndex); $declarationContent = $tokens->generatePartialCode($index + 1, $declarationEndIndex - 1); // ignore multiple use statements like: `use BarB, BarC as C, BarD;` // that should be split into few separate statements if (false !== strpos($declarationContent, ',')) { continue; } $declarationParts = preg_split('/\\s+as\\s+/i', $declarationContent); if (1 === count($declarationParts)) { $fullName = $declarationContent; $declarationParts = explode('\\', $fullName); $shortName = end($declarationParts); $aliased = false; } else { $fullName = $declarationParts[0]; $shortName = $declarationParts[1]; $declarationParts = explode('\\', $fullName); $aliased = $shortName !== end($declarationParts); } $shortName = trim($shortName); $uses[$shortName] = array('shortName' => $shortName, 'fullName' => trim($fullName), 'aliased' => $aliased, 'declarationStart' => $index, 'declarationEnd' => $declarationEndIndex); } return $uses; }
private function fixArray(Tokens $tokens, $index) { $bracesLevel = 0; $startIndex = $index; if ($tokens[$index]->isGivenKind(T_ARRAY)) { $tokens->getNextTokenOfKind($index, array('(', '['), $startIndex); } if (!$tokens->isArrayMultiLine($index)) { return; } if ($tokens[$startIndex]->equals('(')) { $endIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $startIndex); } else { $endIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_SQUARE_BRACE, $startIndex); } $beforeEndIndex = null; $beforeEndToken = $tokens->getTokenNotOfKindSibling($endIndex, -1, array(array(T_WHITESPACE), array(T_COMMENT), array(T_DOC_COMMENT)), $beforeEndIndex); // if there is some item between braces then add `,` after it if ($startIndex !== $beforeEndIndex && !$beforeEndToken->equals(',')) { $tokens->insertAt($beforeEndIndex + 1, new Token(',')); } }
private function getNewOrder(array $uses, Tokens $tokens) { $uses = array_reverse($uses); $indexes = array(); $originalIndexes = array(); foreach ($uses as $index) { $tokens->getNextTokenOfKind($index, array(';'), $endIndex); $tokens->getTokenNotOfKindSibling($index + 1, 1, array(array(T_WHITESPACE)), $startIndex); $namespace = ''; $index = $startIndex; while ($index <= $endIndex) { $token = $tokens[$index]; /** @var Token $token */ if (',' === $token->content || $index === $endIndex) { $indexes[$startIndex] = array($namespace, $startIndex, $index - 1); $originalIndexes[] = $startIndex; $namespace = ''; $nextPartIndex = $endIndex; $tokens->getTokenNotOfKindSibling($index, 1, array(array(','), array(T_WHITESPACE)), $nextPartIndex); $startIndex = $nextPartIndex; $index = $nextPartIndex; continue; } $namespace .= $token->content; ++$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 fixLambdas(Tokens $tokens) { for ($index = $tokens->count() - 1; 0 <= $index; --$index) { $token = $tokens[$index]; if (!$token->isGivenKind(T_FUNCTION) || !$tokens->isLambda($index)) { continue; } $nextIndex = null; $tokens->getNextTokenOfKind($index, array('{'), $nextIndex); $tokens->ensureWhitespaceAtIndex($nextIndex - 1, 1, ' '); } }