%PDF- %PDF-
Direktori : /home2/vacivi36/code/vendor/rector/rector/rules/Naming/Matcher/ |
Current File : //home2/vacivi36/code/vendor/rector/rector/rules/Naming/Matcher/VariableAndCallAssignMatcher.php |
<?php declare (strict_types=1); namespace Rector\Naming\Matcher; use PhpParser\Node; use PhpParser\Node\Expr\Assign; use PhpParser\Node\Expr\Closure; use PhpParser\Node\Expr\Variable; use PhpParser\Node\FunctionLike; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Function_; use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Naming\ValueObject\VariableAndCallAssign; use Rector\NodeNameResolver\NodeNameResolver; final class VariableAndCallAssignMatcher { /** * @readonly * @var \Rector\Naming\Matcher\CallMatcher */ private $callMatcher; /** * @readonly * @var \Rector\NodeNameResolver\NodeNameResolver */ private $nodeNameResolver; /** * @readonly * @var \Rector\Core\PhpParser\Node\BetterNodeFinder */ private $betterNodeFinder; public function __construct(\Rector\Naming\Matcher\CallMatcher $callMatcher, NodeNameResolver $nodeNameResolver, BetterNodeFinder $betterNodeFinder) { $this->callMatcher = $callMatcher; $this->nodeNameResolver = $nodeNameResolver; $this->betterNodeFinder = $betterNodeFinder; } public function match(Assign $assign) : ?VariableAndCallAssign { $call = $this->callMatcher->matchCall($assign); if ($call === null) { return null; } if (!$assign->var instanceof Variable) { return null; } $variableName = $this->nodeNameResolver->getName($assign->var); if ($variableName === null) { return null; } $functionLike = $this->getFunctionLike($assign); if (!$functionLike instanceof FunctionLike) { return null; } $isVariableFoundInCallArgs = (bool) $this->betterNodeFinder->findFirst($call->getArgs(), function (Node $subNode) use($variableName) : bool { return $subNode instanceof Variable && $this->nodeNameResolver->isName($subNode, $variableName); }); if ($isVariableFoundInCallArgs) { return null; } return new VariableAndCallAssign($assign->var, $call, $assign, $variableName, $functionLike); } /** * @return \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Expr\Closure|null */ private function getFunctionLike(Assign $assign) { return $this->betterNodeFinder->findParentByTypes($assign, [Closure::class, ClassMethod::class, Function_::class]); } }