rector/rules/CodingStyle/Application/UseImportsRemover.php
2022-06-06 16:43:29 +00:00

60 lines
1.8 KiB
PHP

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