1
0
mirror of https://github.com/danog/psalm.git synced 2025-01-10 15:09:04 +01:00
psalm/src/Psalm/Internal/PhpVisitor/CloningVisitor.php
2022-01-06 00:48:04 +02:00

41 lines
863 B
PHP

<?php
declare(strict_types=1);
namespace Psalm\Internal\PhpVisitor;
use PhpParser\Comment;
use PhpParser\Node;
use PhpParser\NodeVisitorAbstract;
use function array_map;
/**
* Visitor cloning all nodes and linking to the original nodes using an attribute.
*
* This visitor is required to perform format-preserving pretty prints.
*
* @internal
*/
class CloningVisitor extends NodeVisitorAbstract
{
public function enterNode(Node $node): Node
{
$node = clone $node;
if ($cs = $node->getComments()) {
$node->setAttribute(
'comments',
array_map(
/**
* @return Comment
*/
fn(Comment $c): Comment => clone $c,
$cs
)
);
}
return $node;
}
}