%PDF- %PDF-
| Direktori : /home/vacivi36/vacivitta.com.br/vendor/rector/rector/src/NodeAnalyzer/ |
| Current File : /home/vacivi36/vacivitta.com.br/vendor/rector/rector/src/NodeAnalyzer/ChangedNodeAnalyzer.php |
<?php
declare (strict_types=1);
namespace Rector\Core\NodeAnalyzer;
use PhpParser\Node;
use PhpParser\Node\Name;
use PhpParser\Node\Scalar\Encapsed;
use Rector\Core\PhpParser\Comparing\NodeComparator;
use Rector\NodeTypeResolver\Node\AttributeKey;
final class ChangedNodeAnalyzer
{
/**
* @readonly
* @var \Rector\Core\PhpParser\Comparing\NodeComparator
*/
private $nodeComparator;
public function __construct(\Rector\Core\PhpParser\Comparing\NodeComparator $nodeComparator)
{
$this->nodeComparator = $nodeComparator;
}
public function hasNodeChanged(\PhpParser\Node $originalNode, \PhpParser\Node $node) : bool
{
if ($this->isNameIdentical($node, $originalNode)) {
return \false;
}
// @see https://github.com/rectorphp/rector/issues/6169 - special check, as php-parser skips brackets
if ($node instanceof \PhpParser\Node\Scalar\Encapsed) {
foreach ($node->parts as $encapsedPart) {
$originalEncapsedPart = $encapsedPart->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::ORIGINAL_NODE);
if ($originalEncapsedPart === null) {
return \true;
}
}
}
// php-parser has no idea about changed docblocks, so to report it correctly, we have to set up this attribute
if ($node->hasAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::HAS_PHP_DOC_INFO_JUST_CHANGED)) {
$node->setAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::HAS_PHP_DOC_INFO_JUST_CHANGED, null);
return \true;
}
return !$this->nodeComparator->areNodesEqual($originalNode, $node);
}
private function isNameIdentical(\PhpParser\Node $node, \PhpParser\Node $originalNode) : bool
{
if (!$originalNode instanceof \PhpParser\Node\Name) {
return \false;
}
// names are the same
$originalName = $originalNode->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::ORIGINAL_NAME);
return $this->nodeComparator->areNodesEqual($originalName, $node);
}
}