mirror of
https://github.com/rectorphp/rector.git
synced 2024-06-25 04:12:36 +00:00
Updated Rector to commit 3f877913606cc29dd71cf937119b90177ad2b14c
3f87791360
[Core] Refactor AbstractRector::enterNode() on return single Node (#2635)
This commit is contained in:
parent
4734e9dd3e
commit
4c0b7dbc90
|
@ -17,12 +17,12 @@ final class VersionResolver
|
|||
* @api
|
||||
* @var string
|
||||
*/
|
||||
public const PACKAGE_VERSION = '2267ca2a16768e21da5fbfff53844ab5fb87f264';
|
||||
public const PACKAGE_VERSION = '3f877913606cc29dd71cf937119b90177ad2b14c';
|
||||
/**
|
||||
* @api
|
||||
* @var string
|
||||
*/
|
||||
public const RELEASE_DATE = '2022-07-05 20:18:31';
|
||||
public const RELEASE_DATE = '2022-07-06 10:58:02';
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
|
|
|
@ -43,10 +43,6 @@ use RectorPrefix202207\Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser
|
|||
use RectorPrefix202207\Symplify\Skipper\Skipper\Skipper;
|
||||
abstract class AbstractRector extends NodeVisitorAbstract implements PhpRectorInterface
|
||||
{
|
||||
/**
|
||||
* @var string[]
|
||||
*/
|
||||
private const ATTRIBUTES_TO_MIRROR = [AttributeKey::SCOPE, AttributeKey::RESOLVED_NAME, AttributeKey::PARENT_NODE];
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
|
@ -210,49 +206,45 @@ CODE_SAMPLE;
|
|||
$this->currentRectorProvider->changeCurrentRector($this);
|
||||
// for PHP doc info factory and change notifier
|
||||
$this->currentNodeProvider->setNode($node);
|
||||
$originalAttributes = $node->getAttributes();
|
||||
$this->printDebugCurrentFileAndRule();
|
||||
$node = $this->refactor($node);
|
||||
$refactoredNode = $this->refactor($node);
|
||||
// nothing to change → continue
|
||||
if ($node === null) {
|
||||
if ($refactoredNode === null) {
|
||||
return null;
|
||||
}
|
||||
if ($node === []) {
|
||||
if ($refactoredNode === []) {
|
||||
$errorMessage = \sprintf(self::EMPTY_NODE_ARRAY_MESSAGE, static::class);
|
||||
throw new ShouldNotHappenException($errorMessage);
|
||||
}
|
||||
/** @var Node[]|Node $node */
|
||||
$this->createdByRuleDecorator->decorate($node, $originalNode, static::class);
|
||||
/** @var Node $originalNode */
|
||||
/** @var Node[]|Node $refactoredNode */
|
||||
$this->createdByRuleDecorator->decorate($refactoredNode, $originalNode, static::class);
|
||||
$rectorWithLineChange = new RectorWithLineChange(\get_class($this), $originalNode->getLine());
|
||||
$this->file->addRectorClassWithLine($rectorWithLineChange);
|
||||
/** @var Node $originalNode */
|
||||
if (\is_array($node)) {
|
||||
if (\is_array($refactoredNode)) {
|
||||
$originalNodeHash = \spl_object_hash($originalNode);
|
||||
$this->nodesToReturn[$originalNodeHash] = $node;
|
||||
\reset($node);
|
||||
$firstNodeKey = \key($node);
|
||||
$this->mirrorComments($node[$firstNodeKey], $originalNode);
|
||||
$this->nodesToReturn[$originalNodeHash] = $refactoredNode;
|
||||
\reset($refactoredNode);
|
||||
$firstNodeKey = \key($refactoredNode);
|
||||
$this->mirrorComments($refactoredNode[$firstNodeKey], $originalNode);
|
||||
// will be replaced in leaveNode() the original node must be passed
|
||||
return $originalNode;
|
||||
}
|
||||
// update parents relations - must run before connectParentNodes()
|
||||
/** @var Node $node */
|
||||
$this->mirrorAttributes($originalAttributes, $node);
|
||||
if ($node->hasAttribute(AttributeKey::PARENT_NODE)) {
|
||||
// update parents relations - must run before connectParentNodes()
|
||||
$refactoredNode->setAttribute(AttributeKey::PARENT_NODE, $node->getAttribute(AttributeKey::PARENT_NODE));
|
||||
$this->connectParentNodes($refactoredNode);
|
||||
}
|
||||
$currentScope = $originalNode->getAttribute(AttributeKey::SCOPE);
|
||||
$this->changedNodeScopeRefresher->refresh($node, $currentScope, $this->file->getSmartFileInfo());
|
||||
$this->connectParentNodes($node);
|
||||
$this->changedNodeScopeRefresher->refresh($refactoredNode, $currentScope, $this->file->getSmartFileInfo());
|
||||
// is equals node type? return node early
|
||||
if (\get_class($originalNode) === \get_class($node)) {
|
||||
return $node;
|
||||
if (\get_class($originalNode) === \get_class($refactoredNode)) {
|
||||
return $refactoredNode;
|
||||
}
|
||||
// search "infinite recursion" in https://github.com/nikic/PHP-Parser/blob/master/doc/component/Walking_the_AST.markdown
|
||||
$originalNodeHash = \spl_object_hash($originalNode);
|
||||
if ($originalNode instanceof Stmt && $node instanceof Expr) {
|
||||
$node = new Expression($node);
|
||||
}
|
||||
$this->nodesToReturn[$originalNodeHash] = $node;
|
||||
return $node;
|
||||
$refactoredNode = $originalNode instanceof Stmt && $refactoredNode instanceof Expr ? new Expression($refactoredNode) : $refactoredNode;
|
||||
$this->nodesToReturn[$originalNodeHash] = $refactoredNode;
|
||||
return $refactoredNode;
|
||||
}
|
||||
/**
|
||||
* Replacing nodes in leaveNode() method avoids infinite recursion
|
||||
|
@ -351,18 +343,6 @@ CODE_SAMPLE;
|
|||
$rectifiedNode = $this->rectifiedAnalyzer->verify($this, $node, $this->file);
|
||||
return $rectifiedNode instanceof RectifiedNode;
|
||||
}
|
||||
/**
|
||||
* @param array<string, mixed> $originalAttributes
|
||||
*/
|
||||
private function mirrorAttributes(array $originalAttributes, Node $newNode) : void
|
||||
{
|
||||
foreach ($originalAttributes as $attributeName => $oldAttributeValue) {
|
||||
if (!\in_array($attributeName, self::ATTRIBUTES_TO_MIRROR, \true)) {
|
||||
continue;
|
||||
}
|
||||
$newNode->setAttribute($attributeName, $oldAttributeValue);
|
||||
}
|
||||
}
|
||||
private function connectParentNodes(Node $node) : void
|
||||
{
|
||||
$nodeTraverser = new NodeTraverser();
|
||||
|
|
2
vendor/autoload.php
vendored
2
vendor/autoload.php
vendored
|
@ -9,4 +9,4 @@ if (PHP_VERSION_ID < 50600) {
|
|||
|
||||
require_once __DIR__ . '/composer/autoload_real.php';
|
||||
|
||||
return ComposerAutoloaderInit76bd8b29bf5398e1211ff4af0ba3e506::getLoader();
|
||||
return ComposerAutoloaderInitc3109e0214b8e2f2d368309d75cbc120::getLoader();
|
||||
|
|
14
vendor/composer/autoload_real.php
vendored
14
vendor/composer/autoload_real.php
vendored
|
@ -2,7 +2,7 @@
|
|||
|
||||
// autoload_real.php @generated by Composer
|
||||
|
||||
class ComposerAutoloaderInit76bd8b29bf5398e1211ff4af0ba3e506
|
||||
class ComposerAutoloaderInitc3109e0214b8e2f2d368309d75cbc120
|
||||
{
|
||||
private static $loader;
|
||||
|
||||
|
@ -22,19 +22,19 @@ class ComposerAutoloaderInit76bd8b29bf5398e1211ff4af0ba3e506
|
|||
return self::$loader;
|
||||
}
|
||||
|
||||
spl_autoload_register(array('ComposerAutoloaderInit76bd8b29bf5398e1211ff4af0ba3e506', 'loadClassLoader'), true, true);
|
||||
spl_autoload_register(array('ComposerAutoloaderInitc3109e0214b8e2f2d368309d75cbc120', 'loadClassLoader'), true, true);
|
||||
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
|
||||
spl_autoload_unregister(array('ComposerAutoloaderInit76bd8b29bf5398e1211ff4af0ba3e506', 'loadClassLoader'));
|
||||
spl_autoload_unregister(array('ComposerAutoloaderInitc3109e0214b8e2f2d368309d75cbc120', 'loadClassLoader'));
|
||||
|
||||
require __DIR__ . '/autoload_static.php';
|
||||
call_user_func(\Composer\Autoload\ComposerStaticInit76bd8b29bf5398e1211ff4af0ba3e506::getInitializer($loader));
|
||||
call_user_func(\Composer\Autoload\ComposerStaticInitc3109e0214b8e2f2d368309d75cbc120::getInitializer($loader));
|
||||
|
||||
$loader->setClassMapAuthoritative(true);
|
||||
$loader->register(true);
|
||||
|
||||
$includeFiles = \Composer\Autoload\ComposerStaticInit76bd8b29bf5398e1211ff4af0ba3e506::$files;
|
||||
$includeFiles = \Composer\Autoload\ComposerStaticInitc3109e0214b8e2f2d368309d75cbc120::$files;
|
||||
foreach ($includeFiles as $fileIdentifier => $file) {
|
||||
composerRequire76bd8b29bf5398e1211ff4af0ba3e506($fileIdentifier, $file);
|
||||
composerRequirec3109e0214b8e2f2d368309d75cbc120($fileIdentifier, $file);
|
||||
}
|
||||
|
||||
return $loader;
|
||||
|
@ -46,7 +46,7 @@ class ComposerAutoloaderInit76bd8b29bf5398e1211ff4af0ba3e506
|
|||
* @param string $file
|
||||
* @return void
|
||||
*/
|
||||
function composerRequire76bd8b29bf5398e1211ff4af0ba3e506($fileIdentifier, $file)
|
||||
function composerRequirec3109e0214b8e2f2d368309d75cbc120($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 ComposerStaticInit76bd8b29bf5398e1211ff4af0ba3e506
|
||||
class ComposerStaticInitc3109e0214b8e2f2d368309d75cbc120
|
||||
{
|
||||
public static $files = array (
|
||||
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
|
||||
|
@ -3409,9 +3409,9 @@ class ComposerStaticInit76bd8b29bf5398e1211ff4af0ba3e506
|
|||
public static function getInitializer(ClassLoader $loader)
|
||||
{
|
||||
return \Closure::bind(function () use ($loader) {
|
||||
$loader->prefixLengthsPsr4 = ComposerStaticInit76bd8b29bf5398e1211ff4af0ba3e506::$prefixLengthsPsr4;
|
||||
$loader->prefixDirsPsr4 = ComposerStaticInit76bd8b29bf5398e1211ff4af0ba3e506::$prefixDirsPsr4;
|
||||
$loader->classMap = ComposerStaticInit76bd8b29bf5398e1211ff4af0ba3e506::$classMap;
|
||||
$loader->prefixLengthsPsr4 = ComposerStaticInitc3109e0214b8e2f2d368309d75cbc120::$prefixLengthsPsr4;
|
||||
$loader->prefixDirsPsr4 = ComposerStaticInitc3109e0214b8e2f2d368309d75cbc120::$prefixDirsPsr4;
|
||||
$loader->classMap = ComposerStaticInitc3109e0214b8e2f2d368309d75cbc120::$classMap;
|
||||
|
||||
}, null, ClassLoader::class);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user