assignAndBinaryMap = $assignAndBinaryMap;
}
public function getRuleDefinition() : RuleDefinition
{
return new RuleDefinition('Simplify $value = $value + 5; assignments to shorter ones', [new CodeSample('$value = $value + 5;', '$value += 5;')]);
}
/**
* @return array>
*/
public function getNodeTypes() : array
{
return [Assign::class];
}
/**
* @param Assign $node
*/
public function refactor(Node $node) : ?Node
{
if (!$node->expr instanceof BinaryOp) {
return null;
}
/** @var BinaryOp $binaryNode */
$binaryNode = $node->expr;
if (!$this->nodeComparator->areNodesEqual($node->var, $binaryNode->left)) {
return null;
}
$assignClass = $this->assignAndBinaryMap->getAlternative($binaryNode);
if ($assignClass === null) {
return null;
}
return new $assignClass($node->var, $binaryNode->right);
}
}