Skip to content

Commit ad70120

Browse files
[Traverser] Add ScopeResolverNodeVisitorInterface (#3831)
Co-authored-by: GitHub Action <[email protected]>
1 parent 499fdbc commit ad70120

File tree

9 files changed

+35
-24
lines changed

9 files changed

+35
-24
lines changed

easy-ci.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
use Rector\NodeNameResolver\Contract\NodeNameResolverInterface;
2626
use Rector\NodeTypeResolver\Contract\NodeTypeResolverInterface;
2727
use Rector\NodeTypeResolver\DependencyInjection\PHPStanServicesFactory;
28+
use Rector\NodeTypeResolver\PHPStan\Scope\Contract\NodeVisitor\ScopeResolverNodeVisitorInterface;
2829
use Rector\NodeTypeResolver\Reflection\BetterReflection\RectorBetterReflectionSourceLocatorFactory;
2930
use Rector\NodeTypeResolver\TypeAnalyzer\MethodTypeAnalyzer;
3031
use Rector\Php80\Contract\AttributeDecoratorInterface;
@@ -94,5 +95,7 @@
9495
NamespacedNameDecorator::class,
9596
NamedVariableFactory::class,
9697
BinaryOpTreeRootLocator::class,
98+
99+
ScopeResolverNodeVisitorInterface::class,
97100
]);
98101
};
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Rector\NodeTypeResolver\PHPStan\Scope\Contract\NodeVisitor;
6+
7+
use PhpParser\NodeVisitor;
8+
9+
interface ScopeResolverNodeVisitorInterface extends NodeVisitor
10+
{
11+
}

packages/NodeTypeResolver/PHPStan/Scope/NodeVisitor/AssignedToNodeVisitor.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,12 @@
88
use PhpParser\Node\Expr\Assign;
99
use PhpParser\NodeVisitorAbstract;
1010
use Rector\NodeTypeResolver\Node\AttributeKey;
11+
use Rector\NodeTypeResolver\PHPStan\Scope\Contract\NodeVisitor\ScopeResolverNodeVisitorInterface;
1112

1213
/**
1314
* Inspired by https://github.com/phpstan/phpstan-src/blob/1.7.x/src/Parser/NewAssignedToPropertyVisitor.php
1415
*/
15-
final class AssignedToNodeVisitor extends NodeVisitorAbstract
16+
final class AssignedToNodeVisitor extends NodeVisitorAbstract implements ScopeResolverNodeVisitorInterface
1617
{
1718
public function enterNode(Node $node): ?Node
1819
{

packages/NodeTypeResolver/PHPStan/Scope/NodeVisitor/ByRefReturnNodeVisitor.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,9 @@
1212
use PhpParser\NodeVisitorAbstract;
1313
use Rector\NodeTypeResolver\Node\AttributeKey;
1414
use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser;
15+
use Rector\NodeTypeResolver\PHPStan\Scope\Contract\NodeVisitor\ScopeResolverNodeVisitorInterface;
1516

16-
final class ByRefReturnNodeVisitor extends NodeVisitorAbstract
17+
final class ByRefReturnNodeVisitor extends NodeVisitorAbstract implements ScopeResolverNodeVisitorInterface
1718
{
1819
public function __construct(
1920
private readonly SimpleCallableNodeTraverser $simpleCallableNodeTraverser

packages/NodeTypeResolver/PHPStan/Scope/NodeVisitor/ByRefVariableNodeVisitor.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,9 @@
1212
use PhpParser\NodeVisitorAbstract;
1313
use Rector\NodeTypeResolver\Node\AttributeKey;
1414
use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser;
15+
use Rector\NodeTypeResolver\PHPStan\Scope\Contract\NodeVisitor\ScopeResolverNodeVisitorInterface;
1516

16-
final class ByRefVariableNodeVisitor extends NodeVisitorAbstract
17+
final class ByRefVariableNodeVisitor extends NodeVisitorAbstract implements ScopeResolverNodeVisitorInterface
1718
{
1819
public function __construct(
1920
private readonly SimpleCallableNodeTraverser $simpleCallableNodeTraverser

packages/NodeTypeResolver/PHPStan/Scope/NodeVisitor/GlobalVariableNodeVisitor.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@
1414
use Rector\Core\Contract\PhpParser\Node\StmtsAwareInterface;
1515
use Rector\NodeTypeResolver\Node\AttributeKey;
1616
use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser;
17+
use Rector\NodeTypeResolver\PHPStan\Scope\Contract\NodeVisitor\ScopeResolverNodeVisitorInterface;
1718

18-
final class GlobalVariableNodeVisitor extends NodeVisitorAbstract
19+
final class GlobalVariableNodeVisitor extends NodeVisitorAbstract implements ScopeResolverNodeVisitorInterface
1920
{
2021
public function __construct(
2122
private readonly SimpleCallableNodeTraverser $simpleCallableNodeTraverser

packages/NodeTypeResolver/PHPStan/Scope/NodeVisitor/RemoveDeepChainMethodCallNodeVisitor.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,12 @@
1313
use Rector\Core\Configuration\Option;
1414
use Rector\Core\Configuration\Parameter\ParameterProvider;
1515
use Rector\Core\PhpParser\Node\BetterNodeFinder;
16+
use Rector\NodeTypeResolver\PHPStan\Scope\Contract\NodeVisitor\ScopeResolverNodeVisitorInterface;
1617

1718
/**
1819
* Skips performance trap in PHPStan: https://github.com/phpstan/phpstan/issues/254
1920
*/
20-
final class RemoveDeepChainMethodCallNodeVisitor extends NodeVisitorAbstract
21+
final class RemoveDeepChainMethodCallNodeVisitor extends NodeVisitorAbstract implements ScopeResolverNodeVisitorInterface
2122
{
2223
private readonly int $nestedChainMethodCallLimit;
2324

packages/NodeTypeResolver/PHPStan/Scope/NodeVisitor/StaticVariableNodeVisitor.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@
1414
use Rector\Core\Contract\PhpParser\Node\StmtsAwareInterface;
1515
use Rector\NodeTypeResolver\Node\AttributeKey;
1616
use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser;
17+
use Rector\NodeTypeResolver\PHPStan\Scope\Contract\NodeVisitor\ScopeResolverNodeVisitorInterface;
1718

18-
final class StaticVariableNodeVisitor extends NodeVisitorAbstract
19+
final class StaticVariableNodeVisitor extends NodeVisitorAbstract implements ScopeResolverNodeVisitorInterface
1920
{
2021
public function __construct(
2122
private readonly SimpleCallableNodeTraverser $simpleCallableNodeTraverser

packages/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,7 @@
5050
use Rector\Core\Util\Reflection\PrivatesAccessor;
5151
use Rector\NodeNameResolver\NodeNameResolver;
5252
use Rector\NodeTypeResolver\Node\AttributeKey;
53-
use Rector\NodeTypeResolver\PHPStan\Scope\NodeVisitor\AssignedToNodeVisitor;
54-
use Rector\NodeTypeResolver\PHPStan\Scope\NodeVisitor\ByRefReturnNodeVisitor;
55-
use Rector\NodeTypeResolver\PHPStan\Scope\NodeVisitor\ByRefVariableNodeVisitor;
56-
use Rector\NodeTypeResolver\PHPStan\Scope\NodeVisitor\GlobalVariableNodeVisitor;
57-
use Rector\NodeTypeResolver\PHPStan\Scope\NodeVisitor\RemoveDeepChainMethodCallNodeVisitor;
58-
use Rector\NodeTypeResolver\PHPStan\Scope\NodeVisitor\StaticVariableNodeVisitor;
53+
use Rector\NodeTypeResolver\PHPStan\Scope\Contract\NodeVisitor\ScopeResolverNodeVisitorInterface;
5954
use Webmozart\Assert\Assert;
6055

6156
/**
@@ -71,30 +66,26 @@ final class PHPStanNodeScopeResolver
7166

7267
private readonly NodeTraverser $nodeTraverser;
7368

69+
/**
70+
* @param ScopeResolverNodeVisitorInterface[] $nodeVisitors
71+
*/
7472
public function __construct(
7573
private readonly ChangedFilesDetector $changedFilesDetector,
7674
private readonly DependencyResolver $dependencyResolver,
7775
private readonly NodeScopeResolver $nodeScopeResolver,
7876
private readonly ReflectionProvider $reflectionProvider,
79-
RemoveDeepChainMethodCallNodeVisitor $removeDeepChainMethodCallNodeVisitor,
80-
AssignedToNodeVisitor $assignedToNodeVisitor,
81-
GlobalVariableNodeVisitor $globalVariableNodeVisitor,
82-
StaticVariableNodeVisitor $staticVariableNodeVisitor,
83-
ByRefVariableNodeVisitor $byRefVariableNodeVisitor,
84-
ByRefReturnNodeVisitor $byRefReturnNodeVisitor,
77+
array $nodeVisitors,
8578
private readonly ScopeFactory $scopeFactory,
8679
private readonly PrivatesAccessor $privatesAccessor,
8780
private readonly NodeNameResolver $nodeNameResolver,
8881
private readonly BetterNodeFinder $betterNodeFinder,
8982
private readonly ClassAnalyzer $classAnalyzer
9083
) {
9184
$this->nodeTraverser = new NodeTraverser();
92-
$this->nodeTraverser->addVisitor($removeDeepChainMethodCallNodeVisitor);
93-
$this->nodeTraverser->addVisitor($assignedToNodeVisitor);
94-
$this->nodeTraverser->addVisitor($globalVariableNodeVisitor);
95-
$this->nodeTraverser->addVisitor($staticVariableNodeVisitor);
96-
$this->nodeTraverser->addVisitor($byRefVariableNodeVisitor);
97-
$this->nodeTraverser->addVisitor($byRefReturnNodeVisitor);
85+
86+
foreach ($nodeVisitors as $nodeVisitor) {
87+
$this->nodeTraverser->addVisitor($nodeVisitor);
88+
}
9889
}
9990

10091
/**

0 commit comments

Comments
 (0)