mirror of
https://github.com/rectorphp/rector.git
synced 2024-06-19 17:42:23 +00:00
Updated Rector to commit 29370c7ddfc45c6fe29d88cfca6aa56234a76874
29370c7ddf
[AutoImport] [Renaming] Skip remove used use statement on annotation during rename + auto import when no replacement on auto import (#5168)
This commit is contained in:
parent
5479401552
commit
6fbeed5643
|
@ -35,11 +35,11 @@ final class PostFileProcessor
|
|||
$this->skipper = $skipper;
|
||||
$this->postRectors = [
|
||||
// priority: 650
|
||||
$classRenamingPostRector,
|
||||
// priority: 600
|
||||
$nameImportingPostRector,
|
||||
// priority: 500
|
||||
// priority: 600
|
||||
$useAddingPostRector,
|
||||
// priority: 500
|
||||
$classRenamingPostRector,
|
||||
// priority: 100
|
||||
$unusedImportRemovingPostRector,
|
||||
];
|
||||
|
|
|
@ -15,6 +15,8 @@ use Rector\Core\Configuration\Option;
|
|||
use Rector\Core\Configuration\Parameter\SimpleParameterProvider;
|
||||
use Rector\Core\Configuration\RenamedClassesDataCollector;
|
||||
use Rector\Core\PhpParser\Node\CustomNode\FileWithoutNamespace;
|
||||
use Rector\Core\Provider\CurrentFileProvider;
|
||||
use Rector\Core\ValueObject\Application\File;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
use Rector\Renaming\NodeManipulator\ClassRenamer;
|
||||
final class ClassRenamingPostRector extends \Rector\PostRector\Rector\AbstractPostRector
|
||||
|
@ -34,15 +36,21 @@ final class ClassRenamingPostRector extends \Rector\PostRector\Rector\AbstractPo
|
|||
* @var \Rector\CodingStyle\Application\UseImportsRemover
|
||||
*/
|
||||
private $useImportsRemover;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Core\Provider\CurrentFileProvider
|
||||
*/
|
||||
private $currentFileProvider;
|
||||
/**
|
||||
* @var \Rector\Core\PhpParser\Node\CustomNode\FileWithoutNamespace|\PhpParser\Node\Stmt\Namespace_|null
|
||||
*/
|
||||
private $rootNode = null;
|
||||
public function __construct(ClassRenamer $classRenamer, RenamedClassesDataCollector $renamedClassesDataCollector, UseImportsRemover $useImportsRemover)
|
||||
public function __construct(ClassRenamer $classRenamer, RenamedClassesDataCollector $renamedClassesDataCollector, UseImportsRemover $useImportsRemover, CurrentFileProvider $currentFileProvider)
|
||||
{
|
||||
$this->classRenamer = $classRenamer;
|
||||
$this->renamedClassesDataCollector = $renamedClassesDataCollector;
|
||||
$this->useImportsRemover = $useImportsRemover;
|
||||
$this->currentFileProvider = $currentFileProvider;
|
||||
}
|
||||
/**
|
||||
* @param Stmt[] $nodes
|
||||
|
@ -79,8 +87,12 @@ final class ClassRenamingPostRector extends \Rector\PostRector\Rector\AbstractPo
|
|||
if (!$this->rootNode instanceof FileWithoutNamespace && !$this->rootNode instanceof Namespace_) {
|
||||
return $result;
|
||||
}
|
||||
$file = $this->currentFileProvider->getFile();
|
||||
if (!$file instanceof File) {
|
||||
return null;
|
||||
}
|
||||
$removedUses = $this->renamedClassesDataCollector->getOldClasses();
|
||||
$this->rootNode->stmts = $this->useImportsRemover->removeImportsFromStmts($this->rootNode->stmts, $removedUses);
|
||||
$this->rootNode->stmts = $this->useImportsRemover->removeImportsFromStmts($this->rootNode->stmts, $removedUses, $file->getFilePath());
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,20 +5,33 @@ namespace Rector\CodingStyle\Application;
|
|||
|
||||
use PhpParser\Node\Stmt;
|
||||
use PhpParser\Node\Stmt\Use_;
|
||||
use Rector\PostRector\Collector\UseNodesToAddCollector;
|
||||
use Rector\StaticTypeMapper\ValueObject\Type\AliasedObjectType;
|
||||
use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType;
|
||||
final class UseImportsRemover
|
||||
{
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\PostRector\Collector\UseNodesToAddCollector
|
||||
*/
|
||||
private $useNodesToAddCollector;
|
||||
public function __construct(UseNodesToAddCollector $useNodesToAddCollector)
|
||||
{
|
||||
$this->useNodesToAddCollector = $useNodesToAddCollector;
|
||||
}
|
||||
/**
|
||||
* @param Stmt[] $stmts
|
||||
* @param string[] $removedUses
|
||||
* @return Stmt[]
|
||||
*/
|
||||
public function removeImportsFromStmts(array $stmts, array $removedUses) : array
|
||||
public function removeImportsFromStmts(array $stmts, array $removedUses, string $filePath) : array
|
||||
{
|
||||
$useImportTypes = $this->useNodesToAddCollector->getObjectImportsByFilePath($filePath);
|
||||
foreach ($stmts as $key => $stmt) {
|
||||
if (!$stmt instanceof Use_) {
|
||||
continue;
|
||||
}
|
||||
$stmt = $this->removeUseFromUse($removedUses, $stmt);
|
||||
$stmt = $this->removeUseFromUse($removedUses, $stmt, $useImportTypes);
|
||||
// remove empty uses
|
||||
if ($stmt->uses === []) {
|
||||
unset($stmts[$key]);
|
||||
|
@ -28,14 +41,27 @@ final class UseImportsRemover
|
|||
}
|
||||
/**
|
||||
* @param string[] $removedUses
|
||||
* @param AliasedObjectType[]|FullyQualifiedObjectType[] $useImportTypes
|
||||
*/
|
||||
private function removeUseFromUse(array $removedUses, Use_ $use) : Use_
|
||||
private function removeUseFromUse(array $removedUses, Use_ $use, array $useImportTypes) : Use_
|
||||
{
|
||||
// nothing to remove, as no replacement
|
||||
if ($useImportTypes === []) {
|
||||
return $use;
|
||||
}
|
||||
foreach ($use->uses as $usesKey => $useUse) {
|
||||
$useName = $useUse->name->toString();
|
||||
if (\in_array($useName, $removedUses, \true)) {
|
||||
unset($use->uses[$usesKey]);
|
||||
if (!\in_array($useName, $removedUses, \true)) {
|
||||
continue;
|
||||
}
|
||||
foreach ($useImportTypes as $useImportType) {
|
||||
$className = $useImportType instanceof AliasedObjectType ? $useImportType->getFullyQualifiedName() : $useImportType->getClassName();
|
||||
if ($className === $useName) {
|
||||
unset($use->uses[$usesKey]);
|
||||
continue 2;
|
||||
}
|
||||
}
|
||||
unset($use->uses[$usesKey]);
|
||||
}
|
||||
return $use;
|
||||
}
|
||||
|
|
|
@ -19,12 +19,12 @@ final class VersionResolver
|
|||
* @api
|
||||
* @var string
|
||||
*/
|
||||
public const PACKAGE_VERSION = 'e2ba601e7ca2e8d602bfc2ffa36bf60a88b1a1f0';
|
||||
public const PACKAGE_VERSION = '29370c7ddfc45c6fe29d88cfca6aa56234a76874';
|
||||
/**
|
||||
* @api
|
||||
* @var string
|
||||
*/
|
||||
public const RELEASE_DATE = '2023-10-15 09:03:46';
|
||||
public const RELEASE_DATE = '2023-10-15 10:36:28';
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue
Block a user