From 1792dcc19522faf8a222331cded9d8a60c401e8a Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Thu, 22 Aug 2019 09:43:12 +0200 Subject: [PATCH] [CodingStyle] Fix ImportFullyQualifiedNamesRector for imported namespaces --- .../CodingStyle/src/Imports/AliasUsesResolver.php | 5 +++++ .../Namespace_/ImportFullyQualifiedNamesRector.php | 8 +++++++- .../Fixture/keep_aliased.php.inc | 12 ++++++++++++ .../ImportFullyQualifiedNamesRectorTest.php | 1 + 4 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 packages/CodingStyle/tests/Rector/Namespace_/ImportFullyQualifiedNamesRector/Fixture/keep_aliased.php.inc diff --git a/packages/CodingStyle/src/Imports/AliasUsesResolver.php b/packages/CodingStyle/src/Imports/AliasUsesResolver.php index 15cecb6777e..ed5b9e85d93 100644 --- a/packages/CodingStyle/src/Imports/AliasUsesResolver.php +++ b/packages/CodingStyle/src/Imports/AliasUsesResolver.php @@ -5,6 +5,7 @@ namespace Rector\CodingStyle\Imports; use PhpParser\Node; use PhpParser\Node\Stmt\Namespace_; use PhpParser\Node\Stmt\UseUse; +use Rector\NodeTypeResolver\Node\AttributeKey; final class AliasUsesResolver { @@ -23,6 +24,10 @@ final class AliasUsesResolver */ public function resolveForNode(Node $node): array { + if (! $node instanceof Namespace_) { + $node = $node->getAttribute(AttributeKey::NAMESPACE_NODE); + } + if ($node instanceof Namespace_) { return $this->resolveForNamespace($node); } diff --git a/packages/CodingStyle/src/Rector/Namespace_/ImportFullyQualifiedNamesRector.php b/packages/CodingStyle/src/Rector/Namespace_/ImportFullyQualifiedNamesRector.php index d68683d3d59..cba3979a70a 100644 --- a/packages/CodingStyle/src/Rector/Namespace_/ImportFullyQualifiedNamesRector.php +++ b/packages/CodingStyle/src/Rector/Namespace_/ImportFullyQualifiedNamesRector.php @@ -221,6 +221,13 @@ CODE_SAMPLE return false; } + foreach ($this->aliasedUses as $aliasedUse) { + // its aliased, we cannot just rename it + if (Strings::endsWith($aliasedUse, '\\' . $shortName)) { + return true; + } + } + return $this->useAddingCommander->canImportBeAdded($name, $fullyQualifiedName); } @@ -237,7 +244,6 @@ CODE_SAMPLE private function canBeNameImported(Name $name): bool { $parentNode = $name->getAttribute(AttributeKey::PARENT_NODE); - if ($parentNode instanceof Namespace_) { return false; } diff --git a/packages/CodingStyle/tests/Rector/Namespace_/ImportFullyQualifiedNamesRector/Fixture/keep_aliased.php.inc b/packages/CodingStyle/tests/Rector/Namespace_/ImportFullyQualifiedNamesRector/Fixture/keep_aliased.php.inc new file mode 100644 index 00000000000..7d923634e30 --- /dev/null +++ b/packages/CodingStyle/tests/Rector/Namespace_/ImportFullyQualifiedNamesRector/Fixture/keep_aliased.php.inc @@ -0,0 +1,12 @@ +