mirror of
https://github.com/rectorphp/rector.git
synced 2024-06-26 04:42:36 +00:00
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:
parent
7cf1d35492
commit
6f73a90692
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
*/
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
2
vendor/autoload.php
vendored
|
@ -9,4 +9,4 @@ if (PHP_VERSION_ID < 50600) {
|
|||
|
||||
require_once __DIR__ . '/composer/autoload_real.php';
|
||||
|
||||
return ComposerAutoloaderInitbb74874907693aa099a7302929eb2de3::getLoader();
|
||||
return ComposerAutoloaderInit7301fc798540fbee6ffb57c04db3a1b6::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 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;
|
||||
|
|
8
vendor/composer/autoload_static.php
vendored
8
vendor/composer/autoload_static.php
vendored
|
@ -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);
|
||||
}
|
||||
|
|
14
vendor/composer/installed.json
vendored
14
vendor/composer/installed.json
vendored
|
@ -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": [
|
||||
{
|
||||
|
|
2
vendor/composer/installed.php
vendored
2
vendor/composer/installed.php
vendored
File diff suppressed because one or more lines are too long
BIN
vendor/phpstan/phpstan/phpstan.phar
vendored
BIN
vendor/phpstan/phpstan/phpstan.phar
vendored
Binary file not shown.
26
vendor/phpstan/phpstan/phpstan.phar.asc
vendored
26
vendor/phpstan/phpstan/phpstan.phar.asc
vendored
|
@ -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-----
|
||||
|
|
Loading…
Reference in New Issue
Block a user