/** * @param Tokens $tokens */ private function storeImports(Tokens $tokens, $startIndex, $endIndex) { $this->imports = array(); foreach ($tokens->getImportUseIndexes() as $index) { if ($index < $startIndex || $index > $endIndex) { continue; } $import = ''; while ($index = $tokens->getNextMeaningfulToken($index)) { if ($tokens[$index]->equalsAny(array(';', '{')) || $tokens[$index]->isGivenKind(T_AS)) { break; } $import .= $tokens[$index]->getContent(); } // Imports group (PHP 7 spec) if ($tokens[$index]->equals('{')) { $groupEndIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $index); $groupImports = array_map('trim', explode(',', $tokens->generatePartialCode($index + 1, $groupEndIndex - 1))); foreach ($groupImports as $groupImport) { $groupImportParts = array_map('trim', explode(' as ', $groupImport)); if (2 === count($groupImportParts)) { $this->imports[$groupImportParts[1]] = $import . $groupImportParts[0]; } else { $this->imports[] = $import . $groupImport; } } } elseif ($tokens[$index]->isGivenKind(T_AS)) { $aliasIndex = $tokens->getNextMeaningfulToken($index); $alias = $tokens[$aliasIndex]->getContent(); $this->imports[$alias] = $import; } else { $this->imports[] = $import; } } }
private function removeLineBreaksBetweenUseStatements(Tokens $tokens) { $namespacesImports = $tokens->getImportUseIndexes(true); if (!count($namespacesImports)) { return; } foreach ($namespacesImports as $uses) { $uses = array_reverse($uses); $this->fixLineBreaksPerImportGroup($tokens, $uses); } }
/** * Copy/paste from a private method of Symfony\CS\Fixer\Symfony\UnusedUseFixer. * * @param Tokens $tokens * * @return array */ public function extract(Tokens $tokens) { $uses = array(); $useIndexes = $tokens->getImportUseIndexes(); foreach ($useIndexes as $index) { $declarationEndIndex = $tokens->getNextTokenOfKind($index, array(';')); $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; } else { $fullName = $declarationParts[0]; } $uses[] = trim($fullName); } return $uses; }