Updated Rector to commit d1807682bf

d1807682bf [Core] Apply auto fallback to use Scope from File when Node both doesnot has parent Node and Scope (#2587)
This commit is contained in:
Tomas Votruba 2022-06-29 09:55:25 +00:00
parent 7cf1d35492
commit 6f73a90692
13 changed files with 56 additions and 49 deletions

View File

@ -115,13 +115,11 @@ CODE_SAMPLE
if (($node instanceof Identical || $node instanceof NotIdentical) && $node->right instanceof LNumber && $node->right->value === 0) {
$this->removeNode($funcCall);
$node->right = new Array_([]);
$node->right->setAttribute(AttributeKey::SCOPE, $node->getAttribute(AttributeKey::SCOPE));
return $expr;
}
if (($node instanceof Identical || $node instanceof NotIdentical) && $node->left instanceof LNumber && $node->left->value === 0) {
$this->removeNode($funcCall);
$node->left = new Array_([]);
$node->left->setAttribute(AttributeKey::SCOPE, $node->getAttribute(AttributeKey::SCOPE));
return $expr;
}
return null;

View File

@ -16,11 +16,11 @@ final class VersionResolver
/**
* @var string
*/
public const PACKAGE_VERSION = '1d037d151f713a2568159a3aad82121cbd076883';
public const PACKAGE_VERSION = 'd1807682bf00aeb1cbe87756a897b7ff77bd2bf5';
/**
* @var string
*/
public const RELEASE_DATE = '2022-06-28 16:39:42';
public const RELEASE_DATE = '2022-06-29 11:49:52';
/**
* @var int
*/

View File

@ -8,20 +8,14 @@ use PhpParser\Node\Arg;
use PhpParser\Node\Identifier;
use PhpParser\Node\Name;
use PhpParser\Node\Param;
use PhpParser\Node\Stmt;
use PhpParser\Node\Stmt\Namespace_;
use PHPStan\Analyser\MutatingScope;
use Rector\Core\PhpParser\Node\CustomNode\FileWithoutNamespace;
use Rector\NodeTypeResolver\Node\AttributeKey;
final class ScopeAnalyzer
{
/**
* @var array<class-string<Node>>
*/
private const NO_SCOPE_NODES = [Name::class, Identifier::class, Param::class, Arg::class];
/**
* @var array<class-string<Stmt>>
*/
private const RESOLVABLE_FROM_FILE_NODES = [Namespace_::class, FileWithoutNamespace::class];
public function hasScope(Node $node) : bool
{
foreach (self::NO_SCOPE_NODES as $noScopeNode) {
@ -36,6 +30,7 @@ final class ScopeAnalyzer
if ($mutatingScope instanceof MutatingScope) {
return \false;
}
return \in_array(\get_class($node), self::RESOLVABLE_FROM_FILE_NODES, \true);
$parent = $node->getAttribute(AttributeKey::PARENT_NODE);
return !$parent instanceof Node;
}
}

View File

@ -13,7 +13,6 @@ 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,8 +40,6 @@ 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;
}

View File

@ -23,6 +23,7 @@ use Rector\Core\Contract\Rector\PhpRectorInterface;
use Rector\Core\Exception\ShouldNotHappenException;
use Rector\Core\Exclusion\ExclusionManager;
use Rector\Core\Logging\CurrentRectorProvider;
use Rector\Core\NodeAnalyzer\ScopeAnalyzer;
use Rector\Core\NodeDecorator\CreatedByRuleDecorator;
use Rector\Core\PhpParser\Comparing\NodeComparator;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
@ -36,6 +37,7 @@ use Rector\NodeNameResolver\NodeNameResolver;
use Rector\NodeRemoval\NodeRemover;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\NodeTypeResolver\NodeTypeResolver;
use Rector\NodeTypeResolver\PHPStan\Scope\ScopeFactory;
use Rector\PostRector\Collector\NodesToAddCollector;
use Rector\PostRector\Collector\NodesToRemoveCollector;
use Rector\StaticTypeMapper\StaticTypeMapper;
@ -115,6 +117,14 @@ CODE_SAMPLE;
* @var \Rector\Core\Application\ChangedNodeScopeRefresher
*/
protected $changedNodeScopeRefresher;
/**
* @var \Rector\Core\NodeAnalyzer\ScopeAnalyzer
*/
protected $scopeAnalyzer;
/**
* @var \Rector\NodeTypeResolver\PHPStan\Scope\ScopeFactory
*/
protected $scopeFactory;
/**
* @var \Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser
*/
@ -158,7 +168,7 @@ CODE_SAMPLE;
/**
* @required
*/
public function autowire(NodesToRemoveCollector $nodesToRemoveCollector, NodesToAddCollector $nodesToAddCollector, NodeRemover $nodeRemover, NodeNameResolver $nodeNameResolver, NodeTypeResolver $nodeTypeResolver, SimpleCallableNodeTraverser $simpleCallableNodeTraverser, NodeFactory $nodeFactory, PhpDocInfoFactory $phpDocInfoFactory, ExclusionManager $exclusionManager, StaticTypeMapper $staticTypeMapper, CurrentRectorProvider $currentRectorProvider, CurrentNodeProvider $currentNodeProvider, Skipper $skipper, ValueResolver $valueResolver, BetterNodeFinder $betterNodeFinder, NodeComparator $nodeComparator, CurrentFileProvider $currentFileProvider, RectifiedAnalyzer $rectifiedAnalyzer, CreatedByRuleDecorator $createdByRuleDecorator, ChangedNodeScopeRefresher $changedNodeScopeRefresher, RectorOutputStyle $rectorOutputStyle) : void
public function autowire(NodesToRemoveCollector $nodesToRemoveCollector, NodesToAddCollector $nodesToAddCollector, NodeRemover $nodeRemover, NodeNameResolver $nodeNameResolver, NodeTypeResolver $nodeTypeResolver, SimpleCallableNodeTraverser $simpleCallableNodeTraverser, NodeFactory $nodeFactory, PhpDocInfoFactory $phpDocInfoFactory, ExclusionManager $exclusionManager, StaticTypeMapper $staticTypeMapper, CurrentRectorProvider $currentRectorProvider, CurrentNodeProvider $currentNodeProvider, Skipper $skipper, ValueResolver $valueResolver, BetterNodeFinder $betterNodeFinder, NodeComparator $nodeComparator, CurrentFileProvider $currentFileProvider, RectifiedAnalyzer $rectifiedAnalyzer, CreatedByRuleDecorator $createdByRuleDecorator, ChangedNodeScopeRefresher $changedNodeScopeRefresher, RectorOutputStyle $rectorOutputStyle, ScopeAnalyzer $scopeAnalyzer, ScopeFactory $scopeFactory) : void
{
$this->nodesToRemoveCollector = $nodesToRemoveCollector;
$this->nodesToAddCollector = $nodesToAddCollector;
@ -181,6 +191,8 @@ CODE_SAMPLE;
$this->createdByRuleDecorator = $createdByRuleDecorator;
$this->changedNodeScopeRefresher = $changedNodeScopeRefresher;
$this->rectorOutputStyle = $rectorOutputStyle;
$this->scopeAnalyzer = $scopeAnalyzer;
$this->scopeFactory = $scopeFactory;
}
/**
* @return Node[]|null

View File

@ -17,6 +17,11 @@ abstract class AbstractScopeAwareRector extends \Rector\Core\Rector\AbstractRect
public function refactor(Node $node)
{
$scope = $node->getAttribute(AttributeKey::SCOPE);
if ($this->scopeAnalyzer->isScopeResolvableFromFile($node, $scope)) {
$smartFileInfo = $this->file->getSmartFileInfo();
$scope = $this->scopeFactory->createFromFile($smartFileInfo);
$this->changedNodeScopeRefresher->refresh($node, $scope, $smartFileInfo);
}
if (!$scope instanceof Scope) {
$parent = $node->getAttribute(AttributeKey::PARENT_NODE);
$errorMessage = \sprintf('Scope not available on "%s" node with parent node of "%s", but is required by a refactorWithScope() method of "%s" rule. Fix scope refresh on changed nodes first', \get_class($node), $parent instanceof Node ? \get_class($parent) : null, static::class);

2
vendor/autoload.php vendored
View File

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

View File

@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer
class ComposerAutoloaderInitbb74874907693aa099a7302929eb2de3
class ComposerAutoloaderInit7301fc798540fbee6ffb57c04db3a1b6
{
private static $loader;
@ -22,19 +22,19 @@ class ComposerAutoloaderInitbb74874907693aa099a7302929eb2de3
return self::$loader;
}
spl_autoload_register(array('ComposerAutoloaderInitbb74874907693aa099a7302929eb2de3', 'loadClassLoader'), true, true);
spl_autoload_register(array('ComposerAutoloaderInit7301fc798540fbee6ffb57c04db3a1b6', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
spl_autoload_unregister(array('ComposerAutoloaderInitbb74874907693aa099a7302929eb2de3', 'loadClassLoader'));
spl_autoload_unregister(array('ComposerAutoloaderInit7301fc798540fbee6ffb57c04db3a1b6', 'loadClassLoader'));
require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInitbb74874907693aa099a7302929eb2de3::getInitializer($loader));
call_user_func(\Composer\Autoload\ComposerStaticInit7301fc798540fbee6ffb57c04db3a1b6::getInitializer($loader));
$loader->setClassMapAuthoritative(true);
$loader->register(true);
$includeFiles = \Composer\Autoload\ComposerStaticInitbb74874907693aa099a7302929eb2de3::$files;
$includeFiles = \Composer\Autoload\ComposerStaticInit7301fc798540fbee6ffb57c04db3a1b6::$files;
foreach ($includeFiles as $fileIdentifier => $file) {
composerRequirebb74874907693aa099a7302929eb2de3($fileIdentifier, $file);
composerRequire7301fc798540fbee6ffb57c04db3a1b6($fileIdentifier, $file);
}
return $loader;
@ -46,7 +46,7 @@ class ComposerAutoloaderInitbb74874907693aa099a7302929eb2de3
* @param string $file
* @return void
*/
function composerRequirebb74874907693aa099a7302929eb2de3($fileIdentifier, $file)
function composerRequire7301fc798540fbee6ffb57c04db3a1b6($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 ComposerStaticInitbb74874907693aa099a7302929eb2de3
class ComposerStaticInit7301fc798540fbee6ffb57c04db3a1b6
{
public static $files = array (
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
@ -3415,9 +3415,9 @@ class ComposerStaticInitbb74874907693aa099a7302929eb2de3
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInitbb74874907693aa099a7302929eb2de3::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInitbb74874907693aa099a7302929eb2de3::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInitbb74874907693aa099a7302929eb2de3::$classMap;
$loader->prefixLengthsPsr4 = ComposerStaticInit7301fc798540fbee6ffb57c04db3a1b6::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInit7301fc798540fbee6ffb57c04db3a1b6::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInit7301fc798540fbee6ffb57c04db3a1b6::$classMap;
}, null, ClassLoader::class);
}

View File

@ -803,17 +803,17 @@
},
{
"name": "phpstan\/phpstan",
"version": "1.7.15",
"version_normalized": "1.7.15.0",
"version": "1.8.0",
"version_normalized": "1.8.0.0",
"source": {
"type": "git",
"url": "https:\/\/github.com\/phpstan\/phpstan.git",
"reference": "cd0202ea1b1fc6d1bbe156c6e2e18a03e0ff160a"
"reference": "b7648d4ee9321665acaf112e49da9fd93df8fbd5"
},
"dist": {
"type": "zip",
"url": "https:\/\/api.github.com\/repos\/phpstan\/phpstan\/zipball\/cd0202ea1b1fc6d1bbe156c6e2e18a03e0ff160a",
"reference": "cd0202ea1b1fc6d1bbe156c6e2e18a03e0ff160a",
"url": "https:\/\/api.github.com\/repos\/phpstan\/phpstan\/zipball\/b7648d4ee9321665acaf112e49da9fd93df8fbd5",
"reference": "b7648d4ee9321665acaf112e49da9fd93df8fbd5",
"shasum": ""
},
"require": {
@ -822,7 +822,7 @@
"conflict": {
"phpstan\/phpstan-shim": "*"
},
"time": "2022-06-20T08:29:01+00:00",
"time": "2022-06-29T08:53:31+00:00",
"bin": [
"phpstan",
"phpstan.phar"
@ -841,7 +841,7 @@
"description": "PHPStan - PHP Static Analysis Tool",
"support": {
"issues": "https:\/\/github.com\/phpstan\/phpstan\/issues",
"source": "https:\/\/github.com\/phpstan\/phpstan\/tree\/1.7.15"
"source": "https:\/\/github.com\/phpstan\/phpstan\/tree\/1.8.0"
},
"funding": [
{

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -1,16 +1,16 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEE0yaA1ZV9xxFr4pwUzxoQjQ565yAFAmKwL8IACgkQzxoQjQ56
5yCgVQ/+NAdnFjnQhhg3y57vJtTfafwZBob1jRLTrSC1z1vRui7RF37qYsh8M5TB
H1cpT7IrQYPcIWSrFEn47TWKWIDuUfM1bJg+PDhEETK+YbiTwu0QBPXkECBPgugM
X4oMB4RD4xWD05wQg5eDqqcSig4FoKm0WkQIe/R30dnr/NJQY2YEUbWy5aotnS0F
tBeYdbNVj0t1QZe6oI1vse/k/CsVU6CUJoNNAO/CobkJSFeJQPyXTLbHOwMfrXD6
es08wsmc0WnFjciUfiPflqYZFM9u60JhJZOioxmJClbe679Kqp5/109JPreqigxU
M+RK6rSmNiBwOavywnm/14uiF4Yg58TXIOAwLWBUFzcjCYzdPwLIDg6wV7Td2zfs
3Ua18XZZWxGsEoMX5kM/4ud/pFEakqiKYnmkliJLN8gaEPU4uL36+QxExrQgQ/w6
YIMP8sMNCc3lKxSwMjypcQ/hoDYPIaS1vddB66qXI69x9qp7zNelfkv/KjYGLCIQ
vCJD6yxfJtkP1thK01bG9SWra+Wlwl8KGxagkUJPNcc3FHeBUAGLBj0vuEqwUFOP
JWjuE+qg3+8bqhnNMMhqs/xi+VJxVnnBQOtIY/A/2iPlweujbcd2Mt2RBjSbgbrX
XFFhaoNbkh2GIlhgSHiXlcy6Qtyf9ZL3gLD3EULm46WLncxs+mM=
=903G
iQIzBAABCgAdFiEE0yaA1ZV9xxFr4pwUzxoQjQ565yAFAmK8Ev8ACgkQzxoQjQ56
5yCHXw/+NBWL0CkzIv5liqpNl6EzEJVRQn/YzOV/TSnBo8sUPAoKiGwMpJhj2p5i
SW2Tq4hV3ZcfT1T4QkmQmWQLJkdc61vCsPyv/95DP8xi4LVC7bwcAuOoXcat98e4
tdApg4oIA/GyjJlfU+CHYu6bnp9RruBnTDI6PT5ayApDEoNOeMxHQn+jKQ8jTJyp
gmmgI4VoBhMuV7L3ViDNNhfkGj6Jnl3U+TpQFTDUBuRSqF+jsTuB0ILE1+YFH/gg
IZidm/c2jyxhBgomY7He86MsLhdbdBrhDewcppo7O73VarrSr8vc3hnfHVeKY7HT
el0XmmF2QaCnH0SoftaUGPQ55WRDtg6kHIR9QBGaybG8SdkfsPU+/uBQvc560jF4
6RQdBwtIGQm2NRwIUjXkO1NyK7BERjhvUDE+yRjt6ykFp4bQjdEhdIxkllg6fkLo
H/X3c2w4w65SmKLnT2qD1Je1w41URGMy1/hZAWx9BMiRmHYzwO5R5clCj8hQkd9e
sNcURx4Vdr1ZAjPtluQNMKaWTdhoK9RgvGEW2dIx1gdvrnwPBhOrx++1I6a7ubBu
l2nyhAEKQBBxAv+W0kYHuqLh9wjhGtaDY/t8PohBgC5iirgpUScZkQ2tFxVAMXSH
pVqBsxtHgWcQ/UbfwG4SpkspoMPv51LokK5Ptsk1XkdXGGqxJFc=
=rEtu
-----END PGP SIGNATURE-----