Updated Rector to commit 8a6b70456e536174d88a29c865bed73a6fa89534

8a6b70456e [Core] Move check CREATED_BY_RULE attribute from AbstractRector into RectifiedAnalyzer (#2665)
This commit is contained in:
Tomas Votruba 2022-07-15 08:02:59 +00:00
parent 4b78498132
commit f75d563163
6 changed files with 33 additions and 25 deletions

View File

@ -17,12 +17,12 @@ final class VersionResolver
* @api
* @var string
*/
public const PACKAGE_VERSION = '328c43713e7b7ec77675637582117619af012985';
public const PACKAGE_VERSION = '8a6b70456e536174d88a29c865bed73a6fa89534';
/**
* @api
* @var string
*/
public const RELEASE_DATE = '2022-07-14 22:24:30';
public const RELEASE_DATE = '2022-07-15 09:58:12';
/**
* @var int
*/

View File

@ -13,6 +13,8 @@ use Rector\NodeTypeResolver\Node\AttributeKey;
* This service verify if the Node already rectified with same Rector rule before current Rector rule with condition
*
* Same Rector Rule <-> Same Node <-> Same File
*
* For both non-consecutive or consecutive order.
*/
final class RectifiedAnalyzer
{
@ -31,25 +33,35 @@ final class RectifiedAnalyzer
}
public function verify(AbstractRector $rector, Node $node, File $currentFile) : ?RectifiedNode
{
$originalNode = $node->getAttribute(AttributeKey::ORIGINAL_NODE);
$rectorClass = \get_class($rector);
if ($this->hasCreatedByRule($rectorClass, $node, $originalNode)) {
return new RectifiedNode($rectorClass, $node);
}
$smartFileInfo = $currentFile->getSmartFileInfo();
$realPath = $smartFileInfo->getRealPath();
if (!isset($this->previousFileWithNodes[$realPath])) {
$this->previousFileWithNodes[$realPath] = new RectifiedNode(\get_class($rector), $node);
$this->previousFileWithNodes[$realPath] = new RectifiedNode($rectorClass, $node);
return null;
}
/** @var RectifiedNode $rectifiedNode */
$rectifiedNode = $this->previousFileWithNodes[$realPath];
if ($this->shouldContinue($rectifiedNode, $rector, $node)) {
if ($this->shouldContinue($rectifiedNode, $rectorClass, $node, $originalNode)) {
return null;
}
// re-set to refill next
$this->previousFileWithNodes[$realPath] = null;
return $rectifiedNode;
}
private function shouldContinue(RectifiedNode $rectifiedNode, AbstractRector $rector, Node $node) : bool
private function hasCreatedByRule(string $rectorClass, Node $node, ?Node $originalNode) : bool
{
$originalNode = $node->getAttribute(AttributeKey::ORIGINAL_NODE);
if ($rectifiedNode->getRectorClass() === \get_class($rector) && $rectifiedNode->getNode() === $node) {
$originalNode = $originalNode ?? $node;
$createdByRule = $originalNode->getAttribute(AttributeKey::CREATED_BY_RULE) ?? [];
return \in_array($rectorClass, $createdByRule, \true);
}
private function shouldContinue(RectifiedNode $rectifiedNode, string $rectorClass, Node $node, ?Node $originalNode) : bool
{
if ($rectifiedNode->getRectorClass() === $rectorClass && $rectifiedNode->getNode() === $node) {
/**
* allow to revisit the Node with same Rector rule if Node is changed by other rule
*/

View File

@ -197,12 +197,6 @@ CODE_SAMPLE;
if ($this->shouldSkipCurrentNode($node)) {
return null;
}
/** @var Node $originalNode */
$originalNode = $node->getAttribute(AttributeKey::ORIGINAL_NODE) ?? clone $node;
$createdByRule = $originalNode->getAttribute(AttributeKey::CREATED_BY_RULE) ?? [];
if (\in_array(static::class, $createdByRule, \true)) {
return null;
}
$this->currentRectorProvider->changeCurrentRector($this);
// for PHP doc info factory and change notifier
$this->currentNodeProvider->setNode($node);
@ -216,6 +210,8 @@ CODE_SAMPLE;
$errorMessage = \sprintf(self::EMPTY_NODE_ARRAY_MESSAGE, static::class);
throw new ShouldNotHappenException($errorMessage);
}
/** @var Node $originalNode */
$originalNode = $node->getAttribute(AttributeKey::ORIGINAL_NODE) ?? $node;
/** @var Node[]|Node $refactoredNode */
$this->createdByRuleDecorator->decorate($refactoredNode, $originalNode, static::class);
$rectorWithLineChange = new RectorWithLineChange(\get_class($this), $originalNode->getLine());

2
vendor/autoload.php vendored
View File

@ -9,4 +9,4 @@ if (PHP_VERSION_ID < 50600) {
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit620fa9784553f33f93731534d546bb25::getLoader();
return ComposerAutoloaderInit2f41ba1298ddb3612058eed888b9022a::getLoader();

View File

@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer
class ComposerAutoloaderInit620fa9784553f33f93731534d546bb25
class ComposerAutoloaderInit2f41ba1298ddb3612058eed888b9022a
{
private static $loader;
@ -22,19 +22,19 @@ class ComposerAutoloaderInit620fa9784553f33f93731534d546bb25
return self::$loader;
}
spl_autoload_register(array('ComposerAutoloaderInit620fa9784553f33f93731534d546bb25', 'loadClassLoader'), true, true);
spl_autoload_register(array('ComposerAutoloaderInit2f41ba1298ddb3612058eed888b9022a', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
spl_autoload_unregister(array('ComposerAutoloaderInit620fa9784553f33f93731534d546bb25', 'loadClassLoader'));
spl_autoload_unregister(array('ComposerAutoloaderInit2f41ba1298ddb3612058eed888b9022a', 'loadClassLoader'));
require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInit620fa9784553f33f93731534d546bb25::getInitializer($loader));
call_user_func(\Composer\Autoload\ComposerStaticInit2f41ba1298ddb3612058eed888b9022a::getInitializer($loader));
$loader->setClassMapAuthoritative(true);
$loader->register(true);
$includeFiles = \Composer\Autoload\ComposerStaticInit620fa9784553f33f93731534d546bb25::$files;
$includeFiles = \Composer\Autoload\ComposerStaticInit2f41ba1298ddb3612058eed888b9022a::$files;
foreach ($includeFiles as $fileIdentifier => $file) {
composerRequire620fa9784553f33f93731534d546bb25($fileIdentifier, $file);
composerRequire2f41ba1298ddb3612058eed888b9022a($fileIdentifier, $file);
}
return $loader;
@ -46,7 +46,7 @@ class ComposerAutoloaderInit620fa9784553f33f93731534d546bb25
* @param string $file
* @return void
*/
function composerRequire620fa9784553f33f93731534d546bb25($fileIdentifier, $file)
function composerRequire2f41ba1298ddb3612058eed888b9022a($fileIdentifier, $file)
{
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;

View File

@ -4,7 +4,7 @@
namespace Composer\Autoload;
class ComposerStaticInit620fa9784553f33f93731534d546bb25
class ComposerStaticInit2f41ba1298ddb3612058eed888b9022a
{
public static $files = array (
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
@ -3416,9 +3416,9 @@ class ComposerStaticInit620fa9784553f33f93731534d546bb25
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInit620fa9784553f33f93731534d546bb25::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInit620fa9784553f33f93731534d546bb25::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInit620fa9784553f33f93731534d546bb25::$classMap;
$loader->prefixLengthsPsr4 = ComposerStaticInit2f41ba1298ddb3612058eed888b9022a::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInit2f41ba1298ddb3612058eed888b9022a::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInit2f41ba1298ddb3612058eed888b9022a::$classMap;
}, null, ClassLoader::class);
}