Updated Rector to commit d603b00818cfabc8aa1699b1154145e68bdb60a0

d603b00818 Remove PARENT_NODE from RemoveUnusedVariableAssignRector (#3935)
This commit is contained in:
Tomas Votruba 2023-05-23 13:36:55 +00:00
parent ad4182dc96
commit ee06436c96
11 changed files with 118 additions and 278 deletions

View File

@ -6,27 +6,18 @@ namespace Rector\DeadCode\Rector\Assign;
use PhpParser\Node; use PhpParser\Node;
use PhpParser\Node\Expr; use PhpParser\Node\Expr;
use PhpParser\Node\Expr\Assign; use PhpParser\Node\Expr\Assign;
use PhpParser\Node\Expr\CallLike;
use PhpParser\Node\Expr\Cast; use PhpParser\Node\Expr\Cast;
use PhpParser\Node\Expr\FuncCall; use PhpParser\Node\Expr\FuncCall;
use PhpParser\Node\Expr\MethodCall; use PhpParser\Node\Expr\Include_;
use PhpParser\Node\Expr\New_;
use PhpParser\Node\Expr\NullsafeMethodCall;
use PhpParser\Node\Expr\StaticCall;
use PhpParser\Node\Expr\Variable; use PhpParser\Node\Expr\Variable;
use PhpParser\Node\FunctionLike; use PhpParser\Node\Stmt;
use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\ClassMethod;
use PhpParser\Node\Stmt\Expression; use PhpParser\Node\Stmt\Expression;
use PhpParser\Node\Stmt\If_;
use PHPStan\Analyser\Scope; use PHPStan\Analyser\Scope;
use Rector\Core\Php\ReservedKeywordAnalyzer; use Rector\Core\Php\ReservedKeywordAnalyzer;
use Rector\Core\PhpParser\Comparing\ConditionSearcher;
use Rector\Core\Rector\AbstractScopeAwareRector; use Rector\Core\Rector\AbstractScopeAwareRector;
use Rector\DeadCode\NodeAnalyzer\ExprUsedInNextNodeAnalyzer;
use Rector\DeadCode\NodeAnalyzer\UsedVariableNameAnalyzer;
use Rector\DeadCode\SideEffect\SideEffectNodeDetector; use Rector\DeadCode\SideEffect\SideEffectNodeDetector;
use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\Php74\Tokenizer\FollowedByCurlyBracketAnalyzer;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/** /**
@ -39,39 +30,15 @@ final class RemoveUnusedVariableAssignRector extends AbstractScopeAwareRector
* @var \Rector\Core\Php\ReservedKeywordAnalyzer * @var \Rector\Core\Php\ReservedKeywordAnalyzer
*/ */
private $reservedKeywordAnalyzer; private $reservedKeywordAnalyzer;
/**
* @readonly
* @var \Rector\Core\PhpParser\Comparing\ConditionSearcher
*/
private $conditionSearcher;
/**
* @readonly
* @var \Rector\DeadCode\NodeAnalyzer\UsedVariableNameAnalyzer
*/
private $usedVariableNameAnalyzer;
/** /**
* @readonly * @readonly
* @var \Rector\DeadCode\SideEffect\SideEffectNodeDetector * @var \Rector\DeadCode\SideEffect\SideEffectNodeDetector
*/ */
private $sideEffectNodeDetector; private $sideEffectNodeDetector;
/** public function __construct(ReservedKeywordAnalyzer $reservedKeywordAnalyzer, SideEffectNodeDetector $sideEffectNodeDetector)
* @readonly
* @var \Rector\DeadCode\NodeAnalyzer\ExprUsedInNextNodeAnalyzer
*/
private $exprUsedInNextNodeAnalyzer;
/**
* @readonly
* @var \Rector\Php74\Tokenizer\FollowedByCurlyBracketAnalyzer
*/
private $followedByCurlyBracketAnalyzer;
public function __construct(ReservedKeywordAnalyzer $reservedKeywordAnalyzer, ConditionSearcher $conditionSearcher, UsedVariableNameAnalyzer $usedVariableNameAnalyzer, SideEffectNodeDetector $sideEffectNodeDetector, ExprUsedInNextNodeAnalyzer $exprUsedInNextNodeAnalyzer, FollowedByCurlyBracketAnalyzer $followedByCurlyBracketAnalyzer)
{ {
$this->reservedKeywordAnalyzer = $reservedKeywordAnalyzer; $this->reservedKeywordAnalyzer = $reservedKeywordAnalyzer;
$this->conditionSearcher = $conditionSearcher;
$this->usedVariableNameAnalyzer = $usedVariableNameAnalyzer;
$this->sideEffectNodeDetector = $sideEffectNodeDetector; $this->sideEffectNodeDetector = $sideEffectNodeDetector;
$this->exprUsedInNextNodeAnalyzer = $exprUsedInNextNodeAnalyzer;
$this->followedByCurlyBracketAnalyzer = $followedByCurlyBracketAnalyzer;
} }
public function getRuleDefinition() : RuleDefinition public function getRuleDefinition() : RuleDefinition
{ {
@ -99,33 +66,48 @@ CODE_SAMPLE
*/ */
public function getNodeTypes() : array public function getNodeTypes() : array
{ {
return [Assign::class]; return [ClassMethod::class];
} }
/** /**
* @param Assign $node * @param ClassMethod $node
*/ */
public function refactorWithScope(Node $node, Scope $scope) : ?Node public function refactorWithScope(Node $node, Scope $scope) : ?ClassMethod
{ {
if ($this->shouldSkip($node)) { $classMethodStmts = $node->stmts;
if ($classMethodStmts === null) {
return null; return null;
} }
$variable = $node->var; // we cannot be sure here
if (!$variable instanceof Variable) { if ($this->containsCompactFuncCall($node)) {
return null; return null;
} }
$variableName = $this->getName($variable); if ($this->containsFileIncludes($node)) {
if ($variableName !== null && $this->reservedKeywordAnalyzer->isNativeVariable($variableName)) {
return null; return null;
} }
// variable is used $assignedVariableNamesByStmtPosition = $this->resolvedAssignedVariablesByStmtPosition($classMethodStmts);
if ($this->isUsed($node, $variable, $scope)) { $hasChanged = \false;
return $this->refactorUsedVariable($node, $scope); foreach ($assignedVariableNamesByStmtPosition as $stmtPosition => $variableName) {
if ($this->isVariableUsedInFollowingStmts($node, $stmtPosition, $variableName)) {
continue;
}
/** @var Expression<Assign> $currentStmt */
$currentStmt = $classMethodStmts[$stmtPosition];
/** @var Assign $assign */
$assign = $currentStmt->expr;
/** @var Scope $assignScope */
$assignScope = $assign->getAttribute(AttributeKey::SCOPE);
if ($this->hasCallLikeInAssignExpr($assign, $assignScope)) {
// clean safely
$cleanAssignedExpr = $this->cleanCastedExpr($assign->expr);
$node->stmts[$stmtPosition] = new Expression($cleanAssignedExpr);
} else {
unset($node->stmts[$stmtPosition]);
}
$hasChanged = \true;
} }
if ($this->hasCallLikeInAssignExpr($node->expr, $scope)) { if ($hasChanged) {
// keep the expr, can have side effect return $node;
return $this->cleanCastedExpr($node->expr);
} }
$this->removeNode($node);
return null; return null;
} }
private function cleanCastedExpr(Expr $expr) : Expr private function cleanCastedExpr(Expr $expr) : Expr
@ -133,8 +115,7 @@ CODE_SAMPLE
if (!$expr instanceof Cast) { if (!$expr instanceof Cast) {
return $expr; return $expr;
} }
$castedExpr = $expr->expr; return $this->cleanCastedExpr($expr->expr);
return $this->cleanCastedExpr($castedExpr);
} }
private function hasCallLikeInAssignExpr(Expr $expr, Scope $scope) : bool private function hasCallLikeInAssignExpr(Expr $expr, Scope $scope) : bool
{ {
@ -142,97 +123,71 @@ CODE_SAMPLE
return $this->sideEffectNodeDetector->detectCallExpr($subNode, $scope); return $this->sideEffectNodeDetector->detectCallExpr($subNode, $scope);
}); });
} }
private function shouldSkip(Assign $assign) : bool private function isVariableUsedInFollowingStmts(ClassMethod $classMethod, int $assignStmtPosition, string $variableName) : bool
{ {
$classMethod = $this->betterNodeFinder->findParentType($assign, ClassMethod::class); if ($classMethod->stmts === null) {
if (!$classMethod instanceof FunctionLike) {
return \true;
}
$variable = $assign->var;
if (!$variable instanceof Variable) {
return \true;
}
$parentNode = $assign->getAttribute(AttributeKey::PARENT_NODE);
if (!$parentNode instanceof Expression) {
return \true;
}
$originalNode = $parentNode->getAttribute(AttributeKey::ORIGINAL_NODE);
if (!$originalNode instanceof Node) {
return \true;
}
if (!$variable->name instanceof Variable) {
return $this->followedByCurlyBracketAnalyzer->isFollowed($this->file, $variable);
}
return (bool) $this->betterNodeFinder->findFirstNext($assign, static function (Node $node) : bool {
return $node instanceof Variable;
});
}
private function isUsed(Assign $assign, Variable $variable, Scope $scope) : bool
{
$isUsedPrev = $scope->hasVariableType((string) $this->getName($variable))->yes();
if ($isUsedPrev) {
return \true;
}
if ($this->exprUsedInNextNodeAnalyzer->isUsed($variable)) {
return \true;
}
/** @var FuncCall|MethodCall|New_|NullsafeMethodCall|StaticCall $expr */
$expr = $assign->expr;
if (!$this->sideEffectNodeDetector->detectCallExpr($expr, $scope)) {
return \false; return \false;
} }
return $this->isUsedInAssignExpr($expr, $assign, $scope); foreach ($classMethod->stmts as $key => $stmt) {
} // do not look yet
/** if ($key <= $assignStmtPosition) {
* @param \PhpParser\Node\Expr\CallLike|\PhpParser\Node\Expr $expr continue;
*/ }
private function isUsedInAssignExpr($expr, Assign $assign, Scope $scope) : bool $stmtScope = $stmt->getAttribute(AttributeKey::SCOPE);
{ if (!$stmtScope instanceof Scope) {
if (!$expr instanceof CallLike) { continue;
return $this->isUsedInPreviousAssign($assign, $expr, $scope); }
} $foundVariable = $this->betterNodeFinder->findVariableOfName($stmt, $variableName);
if ($expr->isFirstClassCallable()) { if ($foundVariable instanceof Variable) {
return \false;
}
foreach ($expr->getArgs() as $arg) {
$variable = $arg->value;
if ($this->isUsedInPreviousAssign($assign, $variable, $scope)) {
return \true; return \true;
} }
} }
return \false; return \false;
} }
private function isUsedInPreviousAssign(Assign $assign, Expr $expr, Scope $scope) : bool /**
* @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node $node
*/
private function containsCompactFuncCall($node) : bool
{ {
if (!$expr instanceof Variable) { $compactFuncCall = $this->betterNodeFinder->findFirst($node, function (Node $node) : bool {
return \false; if (!$node instanceof FuncCall) {
} return \false;
$previousAssign = $this->betterNodeFinder->findFirstPrevious($assign, function (Node $node) use($expr) : bool {
return $node instanceof Assign && $this->usedVariableNameAnalyzer->isVariableNamed($node->var, $expr);
});
if ($previousAssign instanceof Assign) {
return $this->isUsed($assign, $expr, $scope);
}
return \false;
}
private function refactorUsedVariable(Assign $assign, Scope $scope) : ?\PhpParser\Node\Expr
{
$parentNode = $assign->getAttribute(AttributeKey::PARENT_NODE);
if (!$parentNode instanceof Expression) {
return null;
}
$node = $this->betterNodeFinder->resolveNextNode($parentNode);
// check if next node is if
if (!$node instanceof If_) {
if ($assign->var instanceof Variable && !$scope->hasVariableType((string) $this->getName($assign->var))->yes() && !$this->exprUsedInNextNodeAnalyzer->isUsed($assign->var)) {
return $this->cleanCastedExpr($assign->expr);
} }
return null; return $this->isName($node, 'compact');
});
return $compactFuncCall instanceof FuncCall;
}
private function containsFileIncludes(ClassMethod $classMethod) : bool
{
return (bool) $this->betterNodeFinder->findInstancesOf($classMethod, [Include_::class]);
}
/**
* @param array<int, Stmt> $stmts
* @return array<int, string>
*/
private function resolvedAssignedVariablesByStmtPosition(array $stmts) : array
{
$assignedVariableNamesByStmtPosition = [];
foreach ($stmts as $key => $stmt) {
if (!$stmt instanceof Expression) {
continue;
}
if (!$stmt->expr instanceof Assign) {
continue;
}
$assign = $stmt->expr;
if (!$assign->var instanceof Variable) {
continue;
}
$variableName = $this->getName($assign->var);
if (!\is_string($variableName)) {
continue;
}
if ($this->reservedKeywordAnalyzer->isNativeVariable($variableName)) {
continue;
}
$assignedVariableNamesByStmtPosition[$key] = $variableName;
} }
if ($this->conditionSearcher->hasIfAndElseForVariableRedeclaration($assign, $node)) { return $assignedVariableNamesByStmtPosition;
$this->removeNode($assign);
return $assign;
}
return null;
} }
} }

View File

@ -6,9 +6,9 @@ namespace Rector\Php74\Rector\ArrayDimFetch;
use PhpParser\Node; use PhpParser\Node;
use PhpParser\Node\Expr\ArrayDimFetch; use PhpParser\Node\Expr\ArrayDimFetch;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\Application\File;
use Rector\Core\ValueObject\PhpVersionFeature; use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\Php74\Tokenizer\FollowedByCurlyBracketAnalyzer;
use Rector\VersionBonding\Contract\MinPhpVersionInterface; use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -18,15 +18,6 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
*/ */
final class CurlyToSquareBracketArrayStringRector extends AbstractRector implements MinPhpVersionInterface final class CurlyToSquareBracketArrayStringRector extends AbstractRector implements MinPhpVersionInterface
{ {
/**
* @readonly
* @var \Rector\Php74\Tokenizer\FollowedByCurlyBracketAnalyzer
*/
private $followedByCurlyBracketAnalyzer;
public function __construct(FollowedByCurlyBracketAnalyzer $followedByCurlyBracketAnalyzer)
{
$this->followedByCurlyBracketAnalyzer = $followedByCurlyBracketAnalyzer;
}
public function provideMinPhpVersion() : int public function provideMinPhpVersion() : int
{ {
return PhpVersionFeature::DEPRECATE_CURLY_BRACKET_ARRAY_STRING; return PhpVersionFeature::DEPRECATE_CURLY_BRACKET_ARRAY_STRING;
@ -36,12 +27,14 @@ final class CurlyToSquareBracketArrayStringRector extends AbstractRector impleme
return new RuleDefinition('Change curly based array and string to square bracket', [new CodeSample(<<<'CODE_SAMPLE' return new RuleDefinition('Change curly based array and string to square bracket', [new CodeSample(<<<'CODE_SAMPLE'
$string = 'test'; $string = 'test';
echo $string{0}; echo $string{0};
$array = ['test']; $array = ['test'];
echo $array{0}; echo $array{0};
CODE_SAMPLE CODE_SAMPLE
, <<<'CODE_SAMPLE' , <<<'CODE_SAMPLE'
$string = 'test'; $string = 'test';
echo $string[0]; echo $string[0];
$array = ['test']; $array = ['test'];
echo $array[0]; echo $array[0];
CODE_SAMPLE CODE_SAMPLE
@ -59,11 +52,21 @@ CODE_SAMPLE
*/ */
public function refactor(Node $node) : ?Node public function refactor(Node $node) : ?Node
{ {
if (!$this->followedByCurlyBracketAnalyzer->isFollowed($this->file, $node)) { if (!$this->isFollowedByCurlyBracket($this->file, $node)) {
return null; return null;
} }
// re-draw the ArrayDimFetch to use [] bracket // re-draw the ArrayDimFetch to use [] bracket
$node->setAttribute(AttributeKey::ORIGINAL_NODE, null); $node->setAttribute(AttributeKey::ORIGINAL_NODE, null);
return $node; return $node;
} }
private function isFollowedByCurlyBracket(File $file, ArrayDimFetch $arrayDimFetch) : bool
{
$oldTokens = $file->getOldTokens();
$endTokenPost = $arrayDimFetch->getEndTokenPos();
if (isset($oldTokens[$endTokenPost]) && $oldTokens[$endTokenPost] === '}') {
$startTokenPost = $arrayDimFetch->getStartTokenPos();
return !(isset($oldTokens[$startTokenPost][1]) && $oldTokens[$startTokenPost][1] === '${');
}
return \false;
}
} }

View File

@ -1,20 +0,0 @@
<?php
declare (strict_types=1);
namespace Rector\Php74\Tokenizer;
use PhpParser\Node;
use Rector\Core\ValueObject\Application\File;
final class FollowedByCurlyBracketAnalyzer
{
public function isFollowed(File $file, Node $node) : bool
{
$oldTokens = $file->getOldTokens();
$endTokenPost = $node->getEndTokenPos();
if (isset($oldTokens[$endTokenPost]) && $oldTokens[$endTokenPost] === '}') {
$startTokenPost = $node->getStartTokenPos();
return !(isset($oldTokens[$startTokenPost][1]) && $oldTokens[$startTokenPost][1] === '${');
}
return \false;
}
}

View File

@ -19,12 +19,12 @@ final class VersionResolver
* @api * @api
* @var string * @var string
*/ */
public const PACKAGE_VERSION = '8f3569e84677b4a29feb0af0788a0156086f921f'; public const PACKAGE_VERSION = 'd603b00818cfabc8aa1699b1154145e68bdb60a0';
/** /**
* @api * @api
* @var string * @var string
*/ */
public const RELEASE_DATE = '2023-05-23 01:55:14'; public const RELEASE_DATE = '2023-05-23 13:32:59';
/** /**
* @var int * @var int
*/ */

View File

@ -15,7 +15,7 @@ final class RectorKernel
/** /**
* @var string * @var string
*/ */
private const CACHE_KEY = 'v20'; private const CACHE_KEY = 'v22';
/** /**
* @var \Symfony\Component\DependencyInjection\ContainerInterface|null * @var \Symfony\Component\DependencyInjection\ContainerInterface|null
*/ */

View File

@ -1,96 +0,0 @@
<?php
declare (strict_types=1);
namespace Rector\Core\PhpParser\Comparing;
use PhpParser\Node;
use PhpParser\Node\Expr\Assign;
use PhpParser\Node\Expr\Variable;
use PhpParser\Node\Stmt;
use PhpParser\Node\Stmt\Else_;
use PhpParser\Node\Stmt\Expression;
use PhpParser\Node\Stmt\If_;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
final class ConditionSearcher
{
/**
* @readonly
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
*/
private $betterNodeFinder;
/**
* @readonly
* @var \Rector\Core\PhpParser\Comparing\NodeComparator
*/
private $nodeComparator;
public function __construct(BetterNodeFinder $betterNodeFinder, \Rector\Core\PhpParser\Comparing\NodeComparator $nodeComparator)
{
$this->betterNodeFinder = $betterNodeFinder;
$this->nodeComparator = $nodeComparator;
}
public function hasIfAndElseForVariableRedeclaration(Assign $assign, If_ $if) : bool
{
if (!$if->else instanceof Else_) {
return \false;
}
$ifElse = $if->else;
/** @var Variable $varNode */
$varNode = $assign->var;
if (!$this->hasVariableRedeclaration($varNode, $if->stmts)) {
return \false;
}
foreach ($if->elseifs as $elseifNode) {
if (!$this->hasVariableRedeclaration($varNode, $elseifNode->stmts)) {
return \false;
}
}
$isInCond = (bool) $this->betterNodeFinder->findFirst($if->cond, function (Node $subNode) use($varNode) : bool {
return $this->nodeComparator->areNodesEqual($varNode, $subNode);
});
if ($isInCond) {
return \false;
}
return $this->hasVariableRedeclaration($varNode, $ifElse->stmts);
}
/**
* @param Stmt[] $stmts
*/
private function hasVariableRedeclaration(Variable $variable, array $stmts) : bool
{
foreach ($stmts as $stmt) {
if ($this->hasVariableUsedInExpression($variable, $stmt)) {
return \false;
}
if ($this->hasVariableDeclaration($variable, $stmt)) {
return \true;
}
}
return \false;
}
private function hasVariableUsedInExpression(Variable $variable, Stmt $stmt) : bool
{
if ($stmt instanceof Expression) {
$node = $stmt->expr instanceof Assign ? $stmt->expr->expr : $stmt->expr;
} else {
$node = $stmt;
}
return (bool) $this->betterNodeFinder->findFirst($node, function (Node $subNode) use($variable) : bool {
return $this->nodeComparator->areNodesEqual($variable, $subNode);
});
}
private function hasVariableDeclaration(Variable $variable, Stmt $stmt) : bool
{
if (!$stmt instanceof Expression) {
return \false;
}
if (!$stmt->expr instanceof Assign) {
return \false;
}
$assign = $stmt->expr;
if (!$assign->var instanceof Variable) {
return \false;
}
$assignedVariable = $assign->var;
return $variable->name === $assignedVariable->name;
}
}

View File

@ -513,6 +513,8 @@ final class BetterNodeFinder
/** /**
* @api * @api
* *
* @deprecated Use StmtsAwareInterface instead
*
* Resolve next node from any Node, eg: Expr, Identifier, Name, etc * Resolve next node from any Node, eg: Expr, Identifier, Name, etc
*/ */
public function resolveNextNode(Node $node) : ?Node public function resolveNextNode(Node $node) : ?Node

2
vendor/autoload.php vendored
View File

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

View File

@ -1502,7 +1502,6 @@ return array(
'Rector\\Core\\PHPStan\\Reflection\\TypeToCallReflectionResolver\\TypeToCallReflectionResolverRegistry' => $baseDir . '/src/PHPStan/Reflection/TypeToCallReflectionResolver/TypeToCallReflectionResolverRegistry.php', 'Rector\\Core\\PHPStan\\Reflection\\TypeToCallReflectionResolver\\TypeToCallReflectionResolverRegistry' => $baseDir . '/src/PHPStan/Reflection/TypeToCallReflectionResolver/TypeToCallReflectionResolverRegistry.php',
'Rector\\Core\\PhpParser\\AstResolver' => $baseDir . '/src/PhpParser/AstResolver.php', 'Rector\\Core\\PhpParser\\AstResolver' => $baseDir . '/src/PhpParser/AstResolver.php',
'Rector\\Core\\PhpParser\\ClassLikeAstResolver' => $baseDir . '/src/PhpParser/ClassLikeAstResolver.php', 'Rector\\Core\\PhpParser\\ClassLikeAstResolver' => $baseDir . '/src/PhpParser/ClassLikeAstResolver.php',
'Rector\\Core\\PhpParser\\Comparing\\ConditionSearcher' => $baseDir . '/src/PhpParser/Comparing/ConditionSearcher.php',
'Rector\\Core\\PhpParser\\Comparing\\NodeComparator' => $baseDir . '/src/PhpParser/Comparing/NodeComparator.php', 'Rector\\Core\\PhpParser\\Comparing\\NodeComparator' => $baseDir . '/src/PhpParser/Comparing/NodeComparator.php',
'Rector\\Core\\PhpParser\\NodeFinder\\LocalConstantFinder' => $baseDir . '/src/PhpParser/NodeFinder/LocalConstantFinder.php', 'Rector\\Core\\PhpParser\\NodeFinder\\LocalConstantFinder' => $baseDir . '/src/PhpParser/NodeFinder/LocalConstantFinder.php',
'Rector\\Core\\PhpParser\\NodeFinder\\LocalMethodCallFinder' => $baseDir . '/src/PhpParser/NodeFinder/LocalMethodCallFinder.php', 'Rector\\Core\\PhpParser\\NodeFinder\\LocalMethodCallFinder' => $baseDir . '/src/PhpParser/NodeFinder/LocalMethodCallFinder.php',
@ -2249,7 +2248,6 @@ return array(
'Rector\\Php74\\Rector\\Property\\RestoreDefaultNullToNullableTypePropertyRector' => $baseDir . '/rules/Php74/Rector/Property/RestoreDefaultNullToNullableTypePropertyRector.php', 'Rector\\Php74\\Rector\\Property\\RestoreDefaultNullToNullableTypePropertyRector' => $baseDir . '/rules/Php74/Rector/Property/RestoreDefaultNullToNullableTypePropertyRector.php',
'Rector\\Php74\\Rector\\StaticCall\\ExportToReflectionFunctionRector' => $baseDir . '/rules/Php74/Rector/StaticCall/ExportToReflectionFunctionRector.php', 'Rector\\Php74\\Rector\\StaticCall\\ExportToReflectionFunctionRector' => $baseDir . '/rules/Php74/Rector/StaticCall/ExportToReflectionFunctionRector.php',
'Rector\\Php74\\Rector\\Ternary\\ParenthesizeNestedTernaryRector' => $baseDir . '/rules/Php74/Rector/Ternary/ParenthesizeNestedTernaryRector.php', 'Rector\\Php74\\Rector\\Ternary\\ParenthesizeNestedTernaryRector' => $baseDir . '/rules/Php74/Rector/Ternary/ParenthesizeNestedTernaryRector.php',
'Rector\\Php74\\Tokenizer\\FollowedByCurlyBracketAnalyzer' => $baseDir . '/rules/Php74/Tokenizer/FollowedByCurlyBracketAnalyzer.php',
'Rector\\Php74\\Tokenizer\\ParenthesizedNestedTernaryAnalyzer' => $baseDir . '/rules/Php74/Tokenizer/ParenthesizedNestedTernaryAnalyzer.php', 'Rector\\Php74\\Tokenizer\\ParenthesizedNestedTernaryAnalyzer' => $baseDir . '/rules/Php74/Tokenizer/ParenthesizedNestedTernaryAnalyzer.php',
'Rector\\Php80\\AttributeDecorator\\JMSAccesorOrderAttributeDecorator' => $baseDir . '/rules/Php80/AttributeDecorator/JMSAccesorOrderAttributeDecorator.php', 'Rector\\Php80\\AttributeDecorator\\JMSAccesorOrderAttributeDecorator' => $baseDir . '/rules/Php80/AttributeDecorator/JMSAccesorOrderAttributeDecorator.php',
'Rector\\Php80\\AttributeDecorator\\JMSAccessTypeAttributeDecorator' => $baseDir . '/rules/Php80/AttributeDecorator/JMSAccessTypeAttributeDecorator.php', 'Rector\\Php80\\AttributeDecorator\\JMSAccessTypeAttributeDecorator' => $baseDir . '/rules/Php80/AttributeDecorator/JMSAccessTypeAttributeDecorator.php',

View File

@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer // autoload_real.php @generated by Composer
class ComposerAutoloaderInitbd1c9a152ba5ac575455804a7122ce5f class ComposerAutoloaderInit67af263d55e6ae38829253b8878b98ed
{ {
private static $loader; private static $loader;
@ -22,17 +22,17 @@ class ComposerAutoloaderInitbd1c9a152ba5ac575455804a7122ce5f
return self::$loader; return self::$loader;
} }
spl_autoload_register(array('ComposerAutoloaderInitbd1c9a152ba5ac575455804a7122ce5f', 'loadClassLoader'), true, true); spl_autoload_register(array('ComposerAutoloaderInit67af263d55e6ae38829253b8878b98ed', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__)); self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
spl_autoload_unregister(array('ComposerAutoloaderInitbd1c9a152ba5ac575455804a7122ce5f', 'loadClassLoader')); spl_autoload_unregister(array('ComposerAutoloaderInit67af263d55e6ae38829253b8878b98ed', 'loadClassLoader'));
require __DIR__ . '/autoload_static.php'; require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInitbd1c9a152ba5ac575455804a7122ce5f::getInitializer($loader)); call_user_func(\Composer\Autoload\ComposerStaticInit67af263d55e6ae38829253b8878b98ed::getInitializer($loader));
$loader->setClassMapAuthoritative(true); $loader->setClassMapAuthoritative(true);
$loader->register(true); $loader->register(true);
$filesToLoad = \Composer\Autoload\ComposerStaticInitbd1c9a152ba5ac575455804a7122ce5f::$files; $filesToLoad = \Composer\Autoload\ComposerStaticInit67af263d55e6ae38829253b8878b98ed::$files;
$requireFile = \Closure::bind(static function ($fileIdentifier, $file) { $requireFile = \Closure::bind(static function ($fileIdentifier, $file) {
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;

View File

@ -4,7 +4,7 @@
namespace Composer\Autoload; namespace Composer\Autoload;
class ComposerStaticInitbd1c9a152ba5ac575455804a7122ce5f class ComposerStaticInit67af263d55e6ae38829253b8878b98ed
{ {
public static $files = array ( public static $files = array (
'ad155f8f1cf0d418fe49e248db8c661b' => __DIR__ . '/..' . '/react/promise/src/functions_include.php', 'ad155f8f1cf0d418fe49e248db8c661b' => __DIR__ . '/..' . '/react/promise/src/functions_include.php',
@ -1744,7 +1744,6 @@ class ComposerStaticInitbd1c9a152ba5ac575455804a7122ce5f
'Rector\\Core\\PHPStan\\Reflection\\TypeToCallReflectionResolver\\TypeToCallReflectionResolverRegistry' => __DIR__ . '/../..' . '/src/PHPStan/Reflection/TypeToCallReflectionResolver/TypeToCallReflectionResolverRegistry.php', 'Rector\\Core\\PHPStan\\Reflection\\TypeToCallReflectionResolver\\TypeToCallReflectionResolverRegistry' => __DIR__ . '/../..' . '/src/PHPStan/Reflection/TypeToCallReflectionResolver/TypeToCallReflectionResolverRegistry.php',
'Rector\\Core\\PhpParser\\AstResolver' => __DIR__ . '/../..' . '/src/PhpParser/AstResolver.php', 'Rector\\Core\\PhpParser\\AstResolver' => __DIR__ . '/../..' . '/src/PhpParser/AstResolver.php',
'Rector\\Core\\PhpParser\\ClassLikeAstResolver' => __DIR__ . '/../..' . '/src/PhpParser/ClassLikeAstResolver.php', 'Rector\\Core\\PhpParser\\ClassLikeAstResolver' => __DIR__ . '/../..' . '/src/PhpParser/ClassLikeAstResolver.php',
'Rector\\Core\\PhpParser\\Comparing\\ConditionSearcher' => __DIR__ . '/../..' . '/src/PhpParser/Comparing/ConditionSearcher.php',
'Rector\\Core\\PhpParser\\Comparing\\NodeComparator' => __DIR__ . '/../..' . '/src/PhpParser/Comparing/NodeComparator.php', 'Rector\\Core\\PhpParser\\Comparing\\NodeComparator' => __DIR__ . '/../..' . '/src/PhpParser/Comparing/NodeComparator.php',
'Rector\\Core\\PhpParser\\NodeFinder\\LocalConstantFinder' => __DIR__ . '/../..' . '/src/PhpParser/NodeFinder/LocalConstantFinder.php', 'Rector\\Core\\PhpParser\\NodeFinder\\LocalConstantFinder' => __DIR__ . '/../..' . '/src/PhpParser/NodeFinder/LocalConstantFinder.php',
'Rector\\Core\\PhpParser\\NodeFinder\\LocalMethodCallFinder' => __DIR__ . '/../..' . '/src/PhpParser/NodeFinder/LocalMethodCallFinder.php', 'Rector\\Core\\PhpParser\\NodeFinder\\LocalMethodCallFinder' => __DIR__ . '/../..' . '/src/PhpParser/NodeFinder/LocalMethodCallFinder.php',
@ -2491,7 +2490,6 @@ class ComposerStaticInitbd1c9a152ba5ac575455804a7122ce5f
'Rector\\Php74\\Rector\\Property\\RestoreDefaultNullToNullableTypePropertyRector' => __DIR__ . '/../..' . '/rules/Php74/Rector/Property/RestoreDefaultNullToNullableTypePropertyRector.php', 'Rector\\Php74\\Rector\\Property\\RestoreDefaultNullToNullableTypePropertyRector' => __DIR__ . '/../..' . '/rules/Php74/Rector/Property/RestoreDefaultNullToNullableTypePropertyRector.php',
'Rector\\Php74\\Rector\\StaticCall\\ExportToReflectionFunctionRector' => __DIR__ . '/../..' . '/rules/Php74/Rector/StaticCall/ExportToReflectionFunctionRector.php', 'Rector\\Php74\\Rector\\StaticCall\\ExportToReflectionFunctionRector' => __DIR__ . '/../..' . '/rules/Php74/Rector/StaticCall/ExportToReflectionFunctionRector.php',
'Rector\\Php74\\Rector\\Ternary\\ParenthesizeNestedTernaryRector' => __DIR__ . '/../..' . '/rules/Php74/Rector/Ternary/ParenthesizeNestedTernaryRector.php', 'Rector\\Php74\\Rector\\Ternary\\ParenthesizeNestedTernaryRector' => __DIR__ . '/../..' . '/rules/Php74/Rector/Ternary/ParenthesizeNestedTernaryRector.php',
'Rector\\Php74\\Tokenizer\\FollowedByCurlyBracketAnalyzer' => __DIR__ . '/../..' . '/rules/Php74/Tokenizer/FollowedByCurlyBracketAnalyzer.php',
'Rector\\Php74\\Tokenizer\\ParenthesizedNestedTernaryAnalyzer' => __DIR__ . '/../..' . '/rules/Php74/Tokenizer/ParenthesizedNestedTernaryAnalyzer.php', 'Rector\\Php74\\Tokenizer\\ParenthesizedNestedTernaryAnalyzer' => __DIR__ . '/../..' . '/rules/Php74/Tokenizer/ParenthesizedNestedTernaryAnalyzer.php',
'Rector\\Php80\\AttributeDecorator\\JMSAccesorOrderAttributeDecorator' => __DIR__ . '/../..' . '/rules/Php80/AttributeDecorator/JMSAccesorOrderAttributeDecorator.php', 'Rector\\Php80\\AttributeDecorator\\JMSAccesorOrderAttributeDecorator' => __DIR__ . '/../..' . '/rules/Php80/AttributeDecorator/JMSAccesorOrderAttributeDecorator.php',
'Rector\\Php80\\AttributeDecorator\\JMSAccessTypeAttributeDecorator' => __DIR__ . '/../..' . '/rules/Php80/AttributeDecorator/JMSAccessTypeAttributeDecorator.php', 'Rector\\Php80\\AttributeDecorator\\JMSAccessTypeAttributeDecorator' => __DIR__ . '/../..' . '/rules/Php80/AttributeDecorator/JMSAccessTypeAttributeDecorator.php',
@ -3111,9 +3109,9 @@ class ComposerStaticInitbd1c9a152ba5ac575455804a7122ce5f
public static function getInitializer(ClassLoader $loader) public static function getInitializer(ClassLoader $loader)
{ {
return \Closure::bind(function () use ($loader) { return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInitbd1c9a152ba5ac575455804a7122ce5f::$prefixLengthsPsr4; $loader->prefixLengthsPsr4 = ComposerStaticInit67af263d55e6ae38829253b8878b98ed::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInitbd1c9a152ba5ac575455804a7122ce5f::$prefixDirsPsr4; $loader->prefixDirsPsr4 = ComposerStaticInit67af263d55e6ae38829253b8878b98ed::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInitbd1c9a152ba5ac575455804a7122ce5f::$classMap; $loader->classMap = ComposerStaticInit67af263d55e6ae38829253b8878b98ed::$classMap;
}, null, ClassLoader::class); }, null, ClassLoader::class);
} }