mirror of
https://github.com/rectorphp/rector.git
synced 2024-06-09 12:42:38 +00:00
6c20d257e3
d3d18d442c
keep relative paths
68 lines
2.5 KiB
PHP
68 lines
2.5 KiB
PHP
<?php
|
|
|
|
declare (strict_types=1);
|
|
namespace Rector\NodeTypeResolver;
|
|
|
|
use PhpParser\Node\Stmt;
|
|
use PhpParser\NodeTraverser;
|
|
use PhpParser\NodeVisitor\CloningVisitor;
|
|
use PhpParser\NodeVisitor\NodeConnectingVisitor;
|
|
use Rector\Core\ValueObject\Application\File;
|
|
use Rector\NodeTypeResolver\NodeVisitor\FunctionLikeParamArgPositionNodeVisitor;
|
|
use Rector\NodeTypeResolver\PHPStan\Scope\PHPStanNodeScopeResolver;
|
|
final class NodeScopeAndMetadataDecorator
|
|
{
|
|
/**
|
|
* @readonly
|
|
* @var \PhpParser\NodeVisitor\CloningVisitor
|
|
*/
|
|
private $cloningVisitor;
|
|
/**
|
|
* @readonly
|
|
* @var \Rector\NodeTypeResolver\PHPStan\Scope\PHPStanNodeScopeResolver
|
|
*/
|
|
private $phpStanNodeScopeResolver;
|
|
/**
|
|
* @readonly
|
|
* @var \PhpParser\NodeVisitor\NodeConnectingVisitor
|
|
*/
|
|
private $nodeConnectingVisitor;
|
|
/**
|
|
* @readonly
|
|
* @var \Rector\NodeTypeResolver\NodeVisitor\FunctionLikeParamArgPositionNodeVisitor
|
|
*/
|
|
private $functionLikeParamArgPositionNodeVisitor;
|
|
public function __construct(CloningVisitor $cloningVisitor, PHPStanNodeScopeResolver $phpStanNodeScopeResolver, NodeConnectingVisitor $nodeConnectingVisitor, FunctionLikeParamArgPositionNodeVisitor $functionLikeParamArgPositionNodeVisitor)
|
|
{
|
|
$this->cloningVisitor = $cloningVisitor;
|
|
$this->phpStanNodeScopeResolver = $phpStanNodeScopeResolver;
|
|
$this->nodeConnectingVisitor = $nodeConnectingVisitor;
|
|
$this->functionLikeParamArgPositionNodeVisitor = $functionLikeParamArgPositionNodeVisitor;
|
|
}
|
|
/**
|
|
* @param Stmt[] $stmts
|
|
* @return Stmt[]
|
|
*/
|
|
public function decorateNodesFromFile(File $file, array $stmts) : array
|
|
{
|
|
$stmts = $this->phpStanNodeScopeResolver->processNodes($stmts, $file->getFilePath());
|
|
$nodeTraverser = new NodeTraverser();
|
|
// needed also for format preserving printing
|
|
$nodeTraverser->addVisitor($this->cloningVisitor);
|
|
// this one has to be run again to re-connect nodes with new attributes
|
|
$nodeTraverser->addVisitor($this->nodeConnectingVisitor);
|
|
$nodeTraverser->addVisitor($this->functionLikeParamArgPositionNodeVisitor);
|
|
return $nodeTraverser->traverse($stmts);
|
|
}
|
|
/**
|
|
* @param Stmt[] $stmts
|
|
* @return Stmt[]
|
|
*/
|
|
public function decorateStmtsFromString(array $stmts) : array
|
|
{
|
|
$nodeTraverser = new NodeTraverser();
|
|
$nodeTraverser->addVisitor($this->nodeConnectingVisitor);
|
|
return $nodeTraverser->traverse($stmts);
|
|
}
|
|
}
|