Skip to content

Commit

Permalink
[CodingStyle] Remove parent lookup on UsedImportsResolver (#4245)
Browse files Browse the repository at this point in the history
* [CodingStyle] Remove parent lookup on UsedImportsResolver

* [ci-review] Rector Rectify

* var

---------

Co-authored-by: GitHub Action <actions@github.com>
  • Loading branch information
samsonasik and actions-user committed Jun 16, 2023
1 parent 282ba30 commit 06d1d08
Showing 1 changed file with 29 additions and 5 deletions.
34 changes: 29 additions & 5 deletions rules/CodingStyle/ClassNameImport/UsedImportsResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
use PhpParser\Node\Stmt\Namespace_;
use PhpParser\Node\Stmt\UseUse;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\Core\Provider\CurrentFileProvider;
use Rector\Core\ValueObject\Application\File;
use Rector\NodeNameResolver\NodeNameResolver;
use Rector\StaticTypeMapper\ValueObject\Type\AliasedObjectType;
use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType;
Expand All @@ -20,19 +22,41 @@ final class UsedImportsResolver
public function __construct(
private readonly BetterNodeFinder $betterNodeFinder,
private readonly UseImportsTraverser $useImportsTraverser,
private readonly NodeNameResolver $nodeNameResolver
private readonly NodeNameResolver $nodeNameResolver,
private readonly CurrentFileProvider $currentFileProvider
) {
}

private function resolveCurrentNamespaceForNode(Node $node): ?Namespace_
{
if ($node instanceof Namespace_) {
return $node;
}

$file = $this->currentFileProvider->getFile();
if (! $file instanceof File) {
return null;
}

$stmts = $file->getNewStmts();
foreach ($stmts as $stmt) {
if ($stmt instanceof Namespace_) {
$foundNode = $this->betterNodeFinder->findFirst($stmt, static fn(Node $subNode): bool => $subNode === $node);
if ($foundNode instanceof Node) {
return $stmt;
}
}
}

return null;
}

/**
* @return array<FullyQualifiedObjectType|AliasedObjectType>
*/
public function resolveForNode(Node $node): array
{
$namespace = $node instanceof Namespace_ ? $node : $this->betterNodeFinder->findParentType(
$node,
Namespace_::class
);
$namespace = $this->resolveCurrentNamespaceForNode($node);

if ($namespace instanceof Namespace_) {
return $this->resolveForNamespace($namespace);
Expand Down

0 comments on commit 06d1d08

Please sign in to comment.