Updated Rector to commit 478b257792be25a6f32e1a7bf672d33d2832a574

478b257792 [Performance][AutoImport] Reduce double loop on NameImportingPostRector (#5105)
This commit is contained in:
Tomas Votruba 2023-10-02 15:40:56 +00:00
parent 9cbcd589af
commit 1425f0b38c
3 changed files with 21 additions and 34 deletions

View File

@ -129,9 +129,6 @@ final class NameImportingPostRector extends \Rector\PostRector\Rector\AbstractPo
$currentUses = $this->useImportsResolver->resolve();
if ($this->classNameImportSkipper->shouldImportName($name, $currentUses)) {
$nameInUse = $this->resolveNameInUse($name, $currentUses);
if ($nameInUse instanceof FullyQualified) {
return null;
}
if ($nameInUse instanceof Name) {
return $nameInUse;
}
@ -141,9 +138,8 @@ final class NameImportingPostRector extends \Rector\PostRector\Rector\AbstractPo
}
/**
* @param Use_[]|GroupUse[] $currentUses
* @return null|\PhpParser\Node\Name|\PhpParser\Node\Name\FullyQualified
*/
private function resolveNameInUse(Name $name, array $currentUses)
private function resolveNameInUse(Name $name, array $currentUses) : ?\PhpParser\Node\Name
{
$originalName = $name->getAttribute(AttributeKey::ORIGINAL_NAME);
if (!$originalName instanceof FullyQualified) {
@ -153,17 +149,16 @@ final class NameImportingPostRector extends \Rector\PostRector\Rector\AbstractPo
if (\is_string($aliasName)) {
return new Name($aliasName);
}
$isShortFullyQualifiedName = \substr_count($name->toCodeString(), '\\') === 1;
if (!$isShortFullyQualifiedName) {
return $this->resolveLongNameInUseName($name, $currentUses);
}
return $this->resolveConflictedShortNameInUse($name, $currentUses);
return $this->resolveLongNameInUseName($name, $currentUses);
}
/**
* @param Use_[]|GroupUse[] $currentUses
*/
private function resolveLongNameInUseName(Name $name, array $currentUses) : ?Name
{
if (\substr_count($name->toCodeString(), '\\') === 1) {
return null;
}
$lastName = $name->getLast();
foreach ($currentUses as $currentUse) {
foreach ($currentUse->uses as $useUse) {
@ -177,25 +172,4 @@ final class NameImportingPostRector extends \Rector\PostRector\Rector\AbstractPo
}
return null;
}
/**
* @param Use_[]|GroupUse[] $currentUses
*/
private function resolveConflictedShortNameInUse(Name $name, array $currentUses) : ?FullyQualified
{
$currentName = $name->toString();
foreach ($currentUses as $currentUse) {
$prefix = $this->useImportsResolver->resolvePrefix($currentUse);
foreach ($currentUse->uses as $useUse) {
$useName = $prefix . $name->toString();
$lastUseName = $name->getLast();
if (!$useUse->alias instanceof Identifier && $useName !== $currentName && $lastUseName === $currentName) {
return new FullyQualified($currentName);
}
if ($useUse->alias instanceof Identifier && $useUse->alias->toString() === $currentName) {
return new FullyQualified($currentName);
}
}
}
return null;
}
}

View File

@ -4,6 +4,7 @@ declare (strict_types=1);
namespace Rector\CodingStyle\ClassNameImport;
use PhpParser\Node;
use PhpParser\Node\Identifier;
use PhpParser\Node\Name;
use PhpParser\Node\Stmt\GroupUse;
use PhpParser\Node\Stmt\Use_;
@ -57,9 +58,11 @@ final class ClassNameImportSkipper
return \true;
}
$stringName = $name->toString();
$nameLastName = \strtolower($name->getLast());
$lastUseName = $name->getLast();
$nameLastName = \strtolower($lastUseName);
foreach ($uses as $use) {
$prefix = $this->useImportsResolver->resolvePrefix($use);
$useName = $prefix . $stringName;
foreach ($use->uses as $useUse) {
$useUseLastName = \strtolower($useUse->name->getLast());
if ($useUseLastName !== $nameLastName) {
@ -68,11 +71,21 @@ final class ClassNameImportSkipper
if ($this->isJustRenamedClass($stringName, $prefix, $useUse)) {
continue;
}
if ($this->isConflictedShortNameInUse($useUse, $useName, $lastUseName, $stringName)) {
return \false;
}
return $prefix . $useUse->name->toString() === $stringName;
}
}
return \true;
}
private function isConflictedShortNameInUse(UseUse $useUse, string $useName, string $lastUseName, string $stringName) : bool
{
if (!$useUse->alias instanceof Identifier && $useName !== $stringName && $lastUseName === $stringName) {
return \true;
}
return $useUse->alias instanceof Identifier && $useUse->alias->toString() === $stringName;
}
private function isJustRenamedClass(string $stringName, string $prefix, UseUse $useUse) : bool
{
$useUseNameString = $prefix . $useUse->name->toString();

View File

@ -19,12 +19,12 @@ final class VersionResolver
* @api
* @var string
*/
public const PACKAGE_VERSION = 'c9e0823ef35b56b8cc78005c90d7462688d44c09';
public const PACKAGE_VERSION = '478b257792be25a6f32e1a7bf672d33d2832a574';
/**
* @api
* @var string
*/
public const RELEASE_DATE = '2023-10-02 18:07:50';
public const RELEASE_DATE = '2023-10-02 22:38:10';
/**
* @var int
*/