rector/rules/CodingStyle/Application/UseImportsRemover.php
Tomas Votruba d56e7982d0 Updated Rector to commit dedd4b55fe3e03cae9bd5ac822cfdccd8deb3fb6
dedd4b55fe make node_helper.php safe for similar names
2021-05-09 20:15:43 +00:00

61 lines
1.8 KiB
PHP

<?php
declare (strict_types=1);
namespace Rector\CodingStyle\Application;
use PhpParser\Node\Stmt;
use PhpParser\Node\Stmt\Namespace_;
use PhpParser\Node\Stmt\Use_;
final class UseImportsRemover
{
/**
* @param Stmt[] $stmts
* @param string[] $removedShortUses
* @return Stmt[]
*/
public function removeImportsFromStmts(array $stmts, array $removedShortUses) : array
{
foreach ($stmts as $stmtKey => $stmt) {
if (!$stmt instanceof \PhpParser\Node\Stmt\Use_) {
continue;
}
$this->removeUseFromUse($removedShortUses, $stmt);
// nothing left → remove
if ($stmt->uses === []) {
unset($stmts[$stmtKey]);
}
}
return $stmts;
}
/**
* @param string[] $removedShortUses
*/
public function removeImportsFromNamespace(\PhpParser\Node\Stmt\Namespace_ $namespace, array $removedShortUses) : void
{
foreach ($namespace->stmts as $namespaceKey => $stmt) {
if (!$stmt instanceof \PhpParser\Node\Stmt\Use_) {
continue;
}
$this->removeUseFromUse($removedShortUses, $stmt);
// nothing left → remove
if ($stmt->uses === []) {
unset($namespace->stmts[$namespaceKey]);
}
}
}
/**
* @param string[] $removedShortUses
*/
private function removeUseFromUse(array $removedShortUses, \PhpParser\Node\Stmt\Use_ $use) : void
{
foreach ($use->uses as $usesKey => $useUse) {
foreach ($removedShortUses as $removedShortUse) {
if ($useUse->name->getLast() !== $removedShortUse) {
continue;
}
unset($use->uses[$usesKey]);
}
}
}
}