binaryOpManipulator = $binaryOpManipulator;
}
public function getRuleDefinition() : RuleDefinition
{
return new RuleDefinition('Simplify tautology ternary to value', [new CodeSample('$value = ($fullyQualifiedTypeHint !== $typeHint) ? $fullyQualifiedTypeHint : $typeHint;', '$value = $fullyQualifiedTypeHint;')]);
}
/**
* @return array>
*/
public function getNodeTypes() : array
{
return [Ternary::class];
}
/**
* @param Ternary $node
*/
public function refactor(Node $node) : ?Node
{
if (!$node->cond instanceof NotIdentical && !$node->cond instanceof Identical) {
return null;
}
$twoNodeMatch = $this->binaryOpManipulator->matchFirstAndSecondConditionNode($node->cond, function (Node $leftNode) use($node) : bool {
return $this->nodeComparator->areNodesEqual($leftNode, $node->if);
}, function (Node $leftNode) use($node) : bool {
return $this->nodeComparator->areNodesEqual($leftNode, $node->else);
});
if (!$twoNodeMatch instanceof TwoNodeMatch) {
return null;
}
return $node->cond instanceof NotIdentical ? $node->if : $node->else;
}
}