betterNodeFinder = $betterNodeFinder; $this->nodeNameResolver = $nodeNameResolver; $this->nodeComparator = $nodeComparator; } public function find(\PhpParser\Node\Expr\Assign $assign) : ?\PhpParser\Node { $currentAssign = $assign; $variableName = $this->nodeNameResolver->getName($assign->var); if ($variableName === null) { return null; } return $this->betterNodeFinder->findFirstPrevious($assign, function (\PhpParser\Node $node) use($variableName, $currentAssign) : bool { if (!$node instanceof \PhpParser\Node\Expr\Assign) { return \false; } // skip self if ($this->nodeComparator->areSameNode($node, $currentAssign)) { return \false; } return $this->nodeNameResolver->isName($node->var, $variableName); }); } }