From 4c693317f582654d993f1307091f58b49ce21add Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Mon, 19 Sep 2022 23:46:53 +0700 Subject: [PATCH] [AutoImport] Skip multiple namespaces on single file on auto imports (#2940) * [AutoImport] Skip multiple namespaces on auto imports * more fixture * more fixture * skip multiple namespaces --- .../Rector/NameImportingPostRector.php | 13 +++++- .../Fixture/bootstrap_names.php.inc | 42 ------------------- .../Fixture/skip_multiple_namespaces.php.inc | 18 ++++++++ ...namespaces_auto_import_in_groupuse.php.inc | 15 +++++++ .../Fixture/skip_multiple_namespace.php.inc | 15 +++++++ ...skip_multiple_namespace_with_alias.php.inc | 15 +++++++ 6 files changed, 75 insertions(+), 43 deletions(-) delete mode 100644 rules-tests/CodingStyle/Rector/Namespace_/ImportFullyQualifiedNamesRector/Fixture/bootstrap_names.php.inc create mode 100644 rules-tests/CodingStyle/Rector/Namespace_/ImportFullyQualifiedNamesRector/Fixture/skip_multiple_namespaces.php.inc create mode 100644 tests/Issues/AutoImportGroupUse/Fixture/skip_multiple_namespaces_auto_import_in_groupuse.php.inc create mode 100644 tests/Issues/AutoImportInAlias/Fixture/skip_multiple_namespace.php.inc create mode 100644 tests/Issues/AutoImportInAlias/Fixture/skip_multiple_namespace_with_alias.php.inc diff --git a/packages/PostRector/Rector/NameImportingPostRector.php b/packages/PostRector/Rector/NameImportingPostRector.php index a7f25ab7f62..a7f00efa2c4 100644 --- a/packages/PostRector/Rector/NameImportingPostRector.php +++ b/packages/PostRector/Rector/NameImportingPostRector.php @@ -7,7 +7,9 @@ use PhpParser\Node; use PhpParser\Node\Name; use PhpParser\Node\Name\FullyQualified; +use PhpParser\Node\Stmt; use PhpParser\Node\Stmt\GroupUse; +use PhpParser\Node\Stmt\Namespace_; use PhpParser\Node\Stmt\Use_; use PHPStan\Reflection\ReflectionProvider; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; @@ -102,7 +104,16 @@ public function run(AnotherClass $anotherClass) private function processNodeName(Name $name, File $file): ?Node { if ($name->isSpecialClassName()) { - return $name; + return null; + } + + $namespaces = array_filter( + $file->getNewStmts(), + static fn (Stmt $stmt): bool => $stmt instanceof Namespace_ + ); + + if (count($namespaces) > 1) { + return null; } /** @var Use_[]|GroupUse[] $currentUses */ diff --git a/rules-tests/CodingStyle/Rector/Namespace_/ImportFullyQualifiedNamesRector/Fixture/bootstrap_names.php.inc b/rules-tests/CodingStyle/Rector/Namespace_/ImportFullyQualifiedNamesRector/Fixture/bootstrap_names.php.inc deleted file mode 100644 index ac13a084ab3..00000000000 --- a/rules-tests/CodingStyle/Rector/Namespace_/ImportFullyQualifiedNamesRector/Fixture/bootstrap_names.php.inc +++ /dev/null @@ -1,42 +0,0 @@ - ------ - diff --git a/rules-tests/CodingStyle/Rector/Namespace_/ImportFullyQualifiedNamesRector/Fixture/skip_multiple_namespaces.php.inc b/rules-tests/CodingStyle/Rector/Namespace_/ImportFullyQualifiedNamesRector/Fixture/skip_multiple_namespaces.php.inc new file mode 100644 index 00000000000..9f022497957 --- /dev/null +++ b/rules-tests/CodingStyle/Rector/Namespace_/ImportFullyQualifiedNamesRector/Fixture/skip_multiple_namespaces.php.inc @@ -0,0 +1,18 @@ +