diff --git a/packages/CodingStyle/src/Application/UseAddingCommander.php b/packages/CodingStyle/src/Application/UseAddingCommander.php index 7a70486893e..0379b7ece91 100644 --- a/packages/CodingStyle/src/Application/UseAddingCommander.php +++ b/packages/CodingStyle/src/Application/UseAddingCommander.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace Rector\CodingStyle\Application; +use Nette\Utils\Strings; use PhpParser\Node; use PhpParser\Node\Stmt; use PhpParser\Node\Stmt\Namespace_; @@ -155,7 +156,9 @@ final class UseAddingCommander implements CommanderInterface // B. no namespace? add in the top // first clean $nodes = $this->useImportsRemover->removeImportsFromStmts($nodes, $removedShortUses); + $useImportTypes = $this->filterOutNonNamespacedNames($useImportTypes); // then add, to prevent adding + removing false positive of same short use + return $this->useImportsAdder->addImportsToStmts($nodes, $useImportTypes, $functionUseImportTypes); } @@ -287,4 +290,24 @@ final class UseAddingCommander implements CommanderInterface return $this->useImportTypesInFilePath[$filePath] ?? []; } + + /** + * Prevents + * @param FullyQualifiedObjectType[] $useImportTypes + * @return FullyQualifiedObjectType[] + */ + private function filterOutNonNamespacedNames(array $useImportTypes): array + { + $namespacedUseImportTypes = []; + + foreach ($useImportTypes as $useImportType) { + if (! Strings::contains($useImportType->getClassName(), '\\')) { + continue; + } + + $namespacedUseImportTypes[] = $useImportType; + } + + return $namespacedUseImportTypes; + } } diff --git a/packages/CodingStyle/tests/Rector/Namespace_/ImportFullyQualifiedNamesRector/FixtureNonNamespaced/skip_non_coumpond.php.inc b/packages/CodingStyle/tests/Rector/Namespace_/ImportFullyQualifiedNamesRector/FixtureNonNamespaced/skip_non_coumpond.php.inc new file mode 100644 index 00000000000..315f1fa36a8 --- /dev/null +++ b/packages/CodingStyle/tests/Rector/Namespace_/ImportFullyQualifiedNamesRector/FixtureNonNamespaced/skip_non_coumpond.php.inc @@ -0,0 +1,9 @@ +