Updated Rector to commit 7ec1be6b828042b27e3f40ed41b3285a6fe78502

7ec1be6b82 [DeadCode]: Support functions in RemoveUnusedVariableAssignRector (#5249)
This commit is contained in:
Tomas Votruba 2023-11-14 21:18:19 +00:00
parent 374bab157a
commit 9aef117ab1
4 changed files with 29 additions and 22 deletions

View File

@ -81,15 +81,16 @@ CODE_SAMPLE
*/ */
public function getNodeTypes() : array public function getNodeTypes() : array
{ {
return [ClassMethod::class]; return [ClassMethod::class, Stmt\Function_::class];
} }
/** /**
* @param ClassMethod $node * @param ClassMethod|Stmt\Function_ $node
* @return null|\PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_
*/ */
public function refactorWithScope(Node $node, Scope $scope) : ?ClassMethod public function refactorWithScope(Node $node, Scope $scope)
{ {
$classMethodStmts = $node->stmts; $stmts = $node->stmts;
if ($classMethodStmts === null) { if ($stmts === null || $stmts === []) {
return null; return null;
} }
// we cannot be sure here // we cannot be sure here
@ -99,14 +100,14 @@ CODE_SAMPLE
if ($this->containsFileIncludes($node)) { if ($this->containsFileIncludes($node)) {
return null; return null;
} }
$assignedVariableNamesByStmtPosition = $this->resolvedAssignedVariablesByStmtPosition($classMethodStmts); $assignedVariableNamesByStmtPosition = $this->resolvedAssignedVariablesByStmtPosition($stmts);
$hasChanged = \false; $hasChanged = \false;
foreach ($assignedVariableNamesByStmtPosition as $stmtPosition => $variableName) { foreach ($assignedVariableNamesByStmtPosition as $stmtPosition => $variableName) {
if ($this->isVariableUsedInFollowingStmts($node, $stmtPosition, $variableName)) { if ($this->isVariableUsedInFollowingStmts($node, $stmtPosition, $variableName)) {
continue; continue;
} }
/** @var Expression<Assign> $currentStmt */ /** @var Expression<Assign> $currentStmt */
$currentStmt = $classMethodStmts[$stmtPosition]; $currentStmt = $stmts[$stmtPosition];
/** @var Assign $assign */ /** @var Assign $assign */
$assign = $currentStmt->expr; $assign = $currentStmt->expr;
if ($this->hasCallLikeInAssignExpr($assign, $scope)) { if ($this->hasCallLikeInAssignExpr($assign, $scope)) {
@ -138,12 +139,15 @@ CODE_SAMPLE
return $this->sideEffectNodeDetector->detectCallExpr($subNode, $scope); return $this->sideEffectNodeDetector->detectCallExpr($subNode, $scope);
}); });
} }
private function isVariableUsedInFollowingStmts(ClassMethod $classMethod, int $assignStmtPosition, string $variableName) : bool /**
* @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_ $functionLike
*/
private function isVariableUsedInFollowingStmts($functionLike, int $assignStmtPosition, string $variableName) : bool
{ {
if ($classMethod->stmts === null) { if ($functionLike->stmts === null) {
return \false; return \false;
} }
foreach ($classMethod->stmts as $key => $stmt) { foreach ($functionLike->stmts as $key => $stmt) {
// do not look yet // do not look yet
if ($key <= $assignStmtPosition) { if ($key <= $assignStmtPosition) {
continue; continue;
@ -160,11 +164,11 @@ CODE_SAMPLE
return \false; return \false;
} }
/** /**
* @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node $node * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_ $functionLike
*/ */
private function containsCompactFuncCall($node) : bool private function containsCompactFuncCall($functionLike) : bool
{ {
$compactFuncCall = $this->betterNodeFinder->findFirst($node, function (Node $node) : bool { $compactFuncCall = $this->betterNodeFinder->findFirst($functionLike, function (Node $node) : bool {
if (!$node instanceof FuncCall) { if (!$node instanceof FuncCall) {
return \false; return \false;
} }
@ -172,9 +176,12 @@ CODE_SAMPLE
}); });
return $compactFuncCall instanceof FuncCall; return $compactFuncCall instanceof FuncCall;
} }
private function containsFileIncludes(ClassMethod $classMethod) : bool /**
* @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_ $functionLike
*/
private function containsFileIncludes($functionLike) : bool
{ {
return (bool) $this->betterNodeFinder->findInstancesOf($classMethod, [Include_::class]); return (bool) $this->betterNodeFinder->findInstancesOf($functionLike, [Include_::class]);
} }
/** /**
* @param array<int, Stmt> $stmts * @param array<int, Stmt> $stmts

View File

@ -19,12 +19,12 @@ final class VersionResolver
* @api * @api
* @var string * @var string
*/ */
public const PACKAGE_VERSION = '0.18.8'; public const PACKAGE_VERSION = '7ec1be6b828042b27e3f40ed41b3285a6fe78502';
/** /**
* @api * @api
* @var string * @var string
*/ */
public const RELEASE_DATE = '2023-11-14 18:44:59'; public const RELEASE_DATE = '2023-11-14 22:16:03';
/** /**
* @var int * @var int
*/ */

View File

@ -504,8 +504,8 @@
}, },
{ {
"name": "illuminate\/container", "name": "illuminate\/container",
"version": "v10.31.0", "version": "v10.32.0",
"version_normalized": "10.31.0.0", "version_normalized": "10.32.0.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https:\/\/github.com\/illuminate\/container.git", "url": "https:\/\/github.com\/illuminate\/container.git",
@ -561,8 +561,8 @@
}, },
{ {
"name": "illuminate\/contracts", "name": "illuminate\/contracts",
"version": "v10.31.0", "version": "v10.32.0",
"version_normalized": "10.31.0.0", "version_normalized": "10.32.0.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https:\/\/github.com\/illuminate\/contracts.git", "url": "https:\/\/github.com\/illuminate\/contracts.git",

File diff suppressed because one or more lines are too long