mirror of
https://github.com/rectorphp/rector.git
synced 2024-06-02 09:20:52 +00:00
Updated Rector to commit 1142c99af7380356e2d1c8e572fb6d19830db51f
1142c99af7
[PostRector][AutoImport] Move check duplicate use of rename class from UseAddingPostRector to ClassRenamingPostRector (#3462)
This commit is contained in:
parent
b146658bb5
commit
c086693921
|
@ -4,9 +4,14 @@ declare (strict_types=1);
|
|||
namespace Rector\PostRector\Rector;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Stmt\Namespace_;
|
||||
use Rector\CodingStyle\Application\UseImportsRemover;
|
||||
use Rector\Core\Configuration\RectorConfigProvider;
|
||||
use Rector\Core\Configuration\RenamedClassesDataCollector;
|
||||
use Rector\Core\Contract\Rector\RectorInterface;
|
||||
use Rector\Core\NonPhpFile\Rector\RenameClassNonPhpRector;
|
||||
use Rector\Core\PhpParser\Node\BetterNodeFinder;
|
||||
use Rector\Core\PhpParser\Node\CustomNode\FileWithoutNamespace;
|
||||
use Rector\PostRector\Contract\Rector\PostRectorDependencyInterface;
|
||||
use Rector\Renaming\NodeManipulator\ClassRenamer;
|
||||
use Rector\Renaming\Rector\Name\RenameClassRector;
|
||||
|
@ -24,10 +29,28 @@ final class ClassRenamingPostRector extends \Rector\PostRector\Rector\AbstractPo
|
|||
* @var \Rector\Core\Configuration\RenamedClassesDataCollector
|
||||
*/
|
||||
private $renamedClassesDataCollector;
|
||||
public function __construct(ClassRenamer $classRenamer, RenamedClassesDataCollector $renamedClassesDataCollector)
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Core\Configuration\RectorConfigProvider
|
||||
*/
|
||||
private $rectorConfigProvider;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
|
||||
*/
|
||||
private $betterNodeFinder;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\CodingStyle\Application\UseImportsRemover
|
||||
*/
|
||||
private $useImportsRemover;
|
||||
public function __construct(ClassRenamer $classRenamer, RenamedClassesDataCollector $renamedClassesDataCollector, RectorConfigProvider $rectorConfigProvider, BetterNodeFinder $betterNodeFinder, UseImportsRemover $useImportsRemover)
|
||||
{
|
||||
$this->classRenamer = $classRenamer;
|
||||
$this->renamedClassesDataCollector = $renamedClassesDataCollector;
|
||||
$this->rectorConfigProvider = $rectorConfigProvider;
|
||||
$this->betterNodeFinder = $betterNodeFinder;
|
||||
$this->useImportsRemover = $useImportsRemover;
|
||||
}
|
||||
public function getPriority() : int
|
||||
{
|
||||
|
@ -45,9 +68,19 @@ final class ClassRenamingPostRector extends \Rector\PostRector\Rector\AbstractPo
|
|||
{
|
||||
$oldToNewClasses = $this->renamedClassesDataCollector->getOldToNewClasses();
|
||||
if ($oldToNewClasses === []) {
|
||||
return $node;
|
||||
return null;
|
||||
}
|
||||
return $this->classRenamer->renameNode($node, $oldToNewClasses);
|
||||
$result = $this->classRenamer->renameNode($node, $oldToNewClasses);
|
||||
if (!$this->rectorConfigProvider->shouldImportNames()) {
|
||||
return $result;
|
||||
}
|
||||
$rootNode = $this->betterNodeFinder->findParentByTypes($node, [Namespace_::class, FileWithoutNamespace::class]);
|
||||
if (!$rootNode instanceof Node) {
|
||||
return $result;
|
||||
}
|
||||
$removedUses = $this->renamedClassesDataCollector->getOldClasses();
|
||||
$this->useImportsRemover->removeImportsFromStmts($rootNode->stmts, $removedUses);
|
||||
return $result;
|
||||
}
|
||||
public function getRuleDefinition() : RuleDefinition
|
||||
{
|
||||
|
|
|
@ -6,8 +6,6 @@ namespace Rector\PostRector\Rector;
|
|||
use PhpParser\Node\Stmt;
|
||||
use PhpParser\Node\Stmt\Namespace_;
|
||||
use Rector\CodingStyle\Application\UseImportsAdder;
|
||||
use Rector\CodingStyle\Application\UseImportsRemover;
|
||||
use Rector\Core\Configuration\RenamedClassesDataCollector;
|
||||
use Rector\Core\Exception\ShouldNotHappenException;
|
||||
use Rector\Core\PhpParser\Node\BetterNodeFinder;
|
||||
use Rector\Core\PhpParser\Node\CustomNode\FileWithoutNamespace;
|
||||
|
@ -35,11 +33,6 @@ final class UseAddingPostRector extends \Rector\PostRector\Rector\AbstractPostRe
|
|||
* @var \Rector\CodingStyle\Application\UseImportsAdder
|
||||
*/
|
||||
private $useImportsAdder;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\CodingStyle\Application\UseImportsRemover
|
||||
*/
|
||||
private $useImportsRemover;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\PostRector\Collector\UseNodesToAddCollector
|
||||
|
@ -50,20 +43,13 @@ final class UseAddingPostRector extends \Rector\PostRector\Rector\AbstractPostRe
|
|||
* @var \Rector\Core\Provider\CurrentFileProvider
|
||||
*/
|
||||
private $currentFileProvider;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Core\Configuration\RenamedClassesDataCollector
|
||||
*/
|
||||
private $renamedClassesDataCollector;
|
||||
public function __construct(BetterNodeFinder $betterNodeFinder, TypeFactory $typeFactory, UseImportsAdder $useImportsAdder, UseImportsRemover $useImportsRemover, UseNodesToAddCollector $useNodesToAddCollector, CurrentFileProvider $currentFileProvider, RenamedClassesDataCollector $renamedClassesDataCollector)
|
||||
public function __construct(BetterNodeFinder $betterNodeFinder, TypeFactory $typeFactory, UseImportsAdder $useImportsAdder, UseNodesToAddCollector $useNodesToAddCollector, CurrentFileProvider $currentFileProvider)
|
||||
{
|
||||
$this->betterNodeFinder = $betterNodeFinder;
|
||||
$this->typeFactory = $typeFactory;
|
||||
$this->useImportsAdder = $useImportsAdder;
|
||||
$this->useImportsRemover = $useImportsRemover;
|
||||
$this->useNodesToAddCollector = $useNodesToAddCollector;
|
||||
$this->currentFileProvider = $currentFileProvider;
|
||||
$this->renamedClassesDataCollector = $renamedClassesDataCollector;
|
||||
}
|
||||
/**
|
||||
* @param Stmt[] $nodes
|
||||
|
@ -81,9 +67,7 @@ final class UseAddingPostRector extends \Rector\PostRector\Rector\AbstractPostRe
|
|||
}
|
||||
$useImportTypes = $this->useNodesToAddCollector->getObjectImportsByFilePath($file->getFilePath());
|
||||
$functionUseImportTypes = $this->useNodesToAddCollector->getFunctionImportsByFilePath($file->getFilePath());
|
||||
$removedUses = $this->renamedClassesDataCollector->getOldClasses();
|
||||
// nothing to import or remove
|
||||
if ($useImportTypes === [] && $functionUseImportTypes === [] && $removedUses === []) {
|
||||
if ($useImportTypes === [] && $functionUseImportTypes === []) {
|
||||
return $nodes;
|
||||
}
|
||||
/** @var FullyQualifiedObjectType[] $useImportTypes */
|
||||
|
@ -96,35 +80,8 @@ final class UseAddingPostRector extends \Rector\PostRector\Rector\AbstractPostRe
|
|||
if (!$firstNode instanceof FileWithoutNamespace && !$namespace instanceof Namespace_) {
|
||||
return $nodes;
|
||||
}
|
||||
if ($namespace instanceof Namespace_) {
|
||||
// clean namespace stmts, don't assign, this used to clean the stmts of Namespace_
|
||||
$this->useImportsRemover->removeImportsFromStmts($namespace->stmts, $removedUses);
|
||||
}
|
||||
if ($firstNode instanceof FileWithoutNamespace) {
|
||||
// clean no-namespace stmts, assign
|
||||
$nodes = $this->useImportsRemover->removeImportsFromStmts($nodes, $removedUses);
|
||||
}
|
||||
return $this->resolveNodesWithImportedUses($nodes, $useImportTypes, $functionUseImportTypes, $namespace);
|
||||
}
|
||||
/**
|
||||
* @param Stmt[] $nodes
|
||||
* @param FullyQualifiedObjectType[] $useImportTypes
|
||||
* @param FullyQualifiedObjectType[] $functionUseImportTypes
|
||||
* @return Stmt[]
|
||||
*/
|
||||
private function resolveNodesWithImportedUses(array $nodes, array $useImportTypes, array $functionUseImportTypes, ?Namespace_ $namespace) : array
|
||||
{
|
||||
// A. has namespace? add under it
|
||||
if ($namespace instanceof Namespace_) {
|
||||
// then add, to prevent adding + removing false positive of same short use
|
||||
$this->useImportsAdder->addImportsToNamespace($namespace, $useImportTypes, $functionUseImportTypes);
|
||||
return $nodes;
|
||||
}
|
||||
// B. no namespace? add in the top
|
||||
$useImportTypes = $this->filterOutNonNamespacedNames($useImportTypes);
|
||||
// then add, to prevent adding + removing false positive of same short use
|
||||
return $this->useImportsAdder->addImportsToStmts($nodes, $useImportTypes, $functionUseImportTypes);
|
||||
}
|
||||
public function getPriority() : int
|
||||
{
|
||||
// must be after name importing
|
||||
|
@ -152,6 +109,25 @@ class SomeClass
|
|||
CODE_SAMPLE
|
||||
)]);
|
||||
}
|
||||
/**
|
||||
* @param Stmt[] $nodes
|
||||
* @param FullyQualifiedObjectType[] $useImportTypes
|
||||
* @param FullyQualifiedObjectType[] $functionUseImportTypes
|
||||
* @return Stmt[]
|
||||
*/
|
||||
private function resolveNodesWithImportedUses(array $nodes, array $useImportTypes, array $functionUseImportTypes, ?Namespace_ $namespace) : array
|
||||
{
|
||||
// A. has namespace? add under it
|
||||
if ($namespace instanceof Namespace_) {
|
||||
// then add, to prevent adding + removing false positive of same short use
|
||||
$this->useImportsAdder->addImportsToNamespace($namespace, $useImportTypes, $functionUseImportTypes);
|
||||
return $nodes;
|
||||
}
|
||||
// B. no namespace? add in the top
|
||||
$useImportTypes = $this->filterOutNonNamespacedNames($useImportTypes);
|
||||
// then add, to prevent adding + removing false positive of same short use
|
||||
return $this->useImportsAdder->addImportsToStmts($nodes, $useImportTypes, $functionUseImportTypes);
|
||||
}
|
||||
/**
|
||||
* Prevents
|
||||
* @param FullyQualifiedObjectType[] $useImportTypes
|
||||
|
|
|
@ -77,7 +77,10 @@ final class UseImportsAdder
|
|||
$useImportTypes = $this->diffFullyQualifiedObjectTypes($useImportTypes, $existingUseImportTypes);
|
||||
$functionUseImportTypes = $this->diffFullyQualifiedObjectTypes($functionUseImportTypes, $existingFunctionUseImportTypes);
|
||||
$newUses = $this->createUses($useImportTypes, $functionUseImportTypes, $namespaceName);
|
||||
if ($namespace->stmts[0] instanceof Use_ && $newUses !== []) {
|
||||
if ($newUses === []) {
|
||||
return;
|
||||
}
|
||||
if ($namespace->stmts[0] instanceof Use_) {
|
||||
$comments = (array) $namespace->stmts[0]->getAttribute(AttributeKey::COMMENTS);
|
||||
if ($comments !== []) {
|
||||
$newUses[0]->setAttribute(AttributeKey::COMMENTS, $namespace->stmts[0]->getAttribute(AttributeKey::COMMENTS));
|
||||
|
|
|
@ -5,50 +5,30 @@ namespace Rector\CodingStyle\Application;
|
|||
|
||||
use PhpParser\Node\Stmt;
|
||||
use PhpParser\Node\Stmt\Use_;
|
||||
use Rector\Core\Configuration\RectorConfigProvider;
|
||||
use Rector\NodeRemoval\NodeRemover;
|
||||
final class UseImportsRemover
|
||||
{
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Core\Configuration\RectorConfigProvider
|
||||
*/
|
||||
private $rectorConfigProvider;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\NodeRemoval\NodeRemover
|
||||
*/
|
||||
private $nodeRemover;
|
||||
public function __construct(RectorConfigProvider $rectorConfigProvider, NodeRemover $nodeRemover)
|
||||
public function __construct(NodeRemover $nodeRemover)
|
||||
{
|
||||
$this->rectorConfigProvider = $rectorConfigProvider;
|
||||
$this->nodeRemover = $nodeRemover;
|
||||
}
|
||||
/**
|
||||
* @param Stmt[] $stmts
|
||||
* @param string[] $removedUses
|
||||
* @return Stmt[]
|
||||
*/
|
||||
public function removeImportsFromStmts(array $stmts, array $removedUses) : array
|
||||
public function removeImportsFromStmts(array $stmts, array $removedUses) : void
|
||||
{
|
||||
/**
|
||||
* Verify import name to cover conflict on rename+import,
|
||||
* but without $rectorConfig->removeUnusedImports() used
|
||||
*/
|
||||
if (!$this->rectorConfigProvider->shouldImportNames()) {
|
||||
return $stmts;
|
||||
}
|
||||
foreach ($stmts as $stmtKey => $stmt) {
|
||||
foreach ($stmts as $stmt) {
|
||||
if (!$stmt instanceof Use_) {
|
||||
continue;
|
||||
}
|
||||
$this->removeUseFromUse($removedUses, $stmt);
|
||||
// nothing left → remove
|
||||
if ($stmt->uses === []) {
|
||||
unset($stmts[$stmtKey]);
|
||||
}
|
||||
}
|
||||
return $stmts;
|
||||
}
|
||||
/**
|
||||
* @param string[] $removedUses
|
||||
|
|
|
@ -19,12 +19,12 @@ final class VersionResolver
|
|||
* @api
|
||||
* @var string
|
||||
*/
|
||||
public const PACKAGE_VERSION = 'f9900dd236001d117a7b3fdb9fcc2d0d5ec569bc';
|
||||
public const PACKAGE_VERSION = '1142c99af7380356e2d1c8e572fb6d19830db51f';
|
||||
/**
|
||||
* @api
|
||||
* @var string
|
||||
*/
|
||||
public const RELEASE_DATE = '2023-03-07 07:50:41';
|
||||
public const RELEASE_DATE = '2023-03-07 20:32:17';
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
|
|
|
@ -13,6 +13,7 @@ use PhpParser\Node\Stmt\TraitUse;
|
|||
use PHPStan\Type\Type;
|
||||
use Rector\Core\PhpParser\Node\NodeFactory;
|
||||
use Rector\NodeNameResolver\NodeNameResolver;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
use Rector\PostRector\ValueObject\PropertyMetadata;
|
||||
final class ClassInsertManipulator
|
||||
{
|
||||
|
@ -41,6 +42,8 @@ final class ClassInsertManipulator
|
|||
*/
|
||||
public function addAsFirstMethod(Class_ $class, $stmt) : void
|
||||
{
|
||||
$scope = $class->getAttribute(AttributeKey::SCOPE);
|
||||
$stmt->setAttribute(AttributeKey::SCOPE, $scope);
|
||||
if ($this->isSuccessToInsertBeforeFirstMethod($class, $stmt)) {
|
||||
return;
|
||||
}
|
||||
|
|
2
vendor/autoload.php
vendored
2
vendor/autoload.php
vendored
|
@ -22,4 +22,4 @@ if (PHP_VERSION_ID < 50600) {
|
|||
|
||||
require_once __DIR__ . '/composer/autoload_real.php';
|
||||
|
||||
return ComposerAutoloaderInita8c08423566309234c8255bb0c049cd8::getLoader();
|
||||
return ComposerAutoloaderInit386003d77a5489d3bd1614d053542b50::getLoader();
|
||||
|
|
10
vendor/composer/autoload_real.php
vendored
10
vendor/composer/autoload_real.php
vendored
|
@ -2,7 +2,7 @@
|
|||
|
||||
// autoload_real.php @generated by Composer
|
||||
|
||||
class ComposerAutoloaderInita8c08423566309234c8255bb0c049cd8
|
||||
class ComposerAutoloaderInit386003d77a5489d3bd1614d053542b50
|
||||
{
|
||||
private static $loader;
|
||||
|
||||
|
@ -22,17 +22,17 @@ class ComposerAutoloaderInita8c08423566309234c8255bb0c049cd8
|
|||
return self::$loader;
|
||||
}
|
||||
|
||||
spl_autoload_register(array('ComposerAutoloaderInita8c08423566309234c8255bb0c049cd8', 'loadClassLoader'), true, true);
|
||||
spl_autoload_register(array('ComposerAutoloaderInit386003d77a5489d3bd1614d053542b50', 'loadClassLoader'), true, true);
|
||||
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
|
||||
spl_autoload_unregister(array('ComposerAutoloaderInita8c08423566309234c8255bb0c049cd8', 'loadClassLoader'));
|
||||
spl_autoload_unregister(array('ComposerAutoloaderInit386003d77a5489d3bd1614d053542b50', 'loadClassLoader'));
|
||||
|
||||
require __DIR__ . '/autoload_static.php';
|
||||
call_user_func(\Composer\Autoload\ComposerStaticInita8c08423566309234c8255bb0c049cd8::getInitializer($loader));
|
||||
call_user_func(\Composer\Autoload\ComposerStaticInit386003d77a5489d3bd1614d053542b50::getInitializer($loader));
|
||||
|
||||
$loader->setClassMapAuthoritative(true);
|
||||
$loader->register(true);
|
||||
|
||||
$filesToLoad = \Composer\Autoload\ComposerStaticInita8c08423566309234c8255bb0c049cd8::$files;
|
||||
$filesToLoad = \Composer\Autoload\ComposerStaticInit386003d77a5489d3bd1614d053542b50::$files;
|
||||
$requireFile = \Closure::bind(static function ($fileIdentifier, $file) {
|
||||
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
||||
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
|
||||
|
|
8
vendor/composer/autoload_static.php
vendored
8
vendor/composer/autoload_static.php
vendored
|
@ -4,7 +4,7 @@
|
|||
|
||||
namespace Composer\Autoload;
|
||||
|
||||
class ComposerStaticInita8c08423566309234c8255bb0c049cd8
|
||||
class ComposerStaticInit386003d77a5489d3bd1614d053542b50
|
||||
{
|
||||
public static $files = array (
|
||||
'ad155f8f1cf0d418fe49e248db8c661b' => __DIR__ . '/..' . '/react/promise/src/functions_include.php',
|
||||
|
@ -3133,9 +3133,9 @@ class ComposerStaticInita8c08423566309234c8255bb0c049cd8
|
|||
public static function getInitializer(ClassLoader $loader)
|
||||
{
|
||||
return \Closure::bind(function () use ($loader) {
|
||||
$loader->prefixLengthsPsr4 = ComposerStaticInita8c08423566309234c8255bb0c049cd8::$prefixLengthsPsr4;
|
||||
$loader->prefixDirsPsr4 = ComposerStaticInita8c08423566309234c8255bb0c049cd8::$prefixDirsPsr4;
|
||||
$loader->classMap = ComposerStaticInita8c08423566309234c8255bb0c049cd8::$classMap;
|
||||
$loader->prefixLengthsPsr4 = ComposerStaticInit386003d77a5489d3bd1614d053542b50::$prefixLengthsPsr4;
|
||||
$loader->prefixDirsPsr4 = ComposerStaticInit386003d77a5489d3bd1614d053542b50::$prefixDirsPsr4;
|
||||
$loader->classMap = ComposerStaticInit386003d77a5489d3bd1614d053542b50::$classMap;
|
||||
|
||||
}, null, ClassLoader::class);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user