Skip to content

Commit

Permalink
[Traverser] Add ScopeResolverNodeVisitorInterface (#3831)
Browse files Browse the repository at this point in the history
Co-authored-by: GitHub Action <actions@github.com>
  • Loading branch information
samsonasik and actions-user committed May 14, 2023
1 parent 499fdbc commit ad70120
Show file tree
Hide file tree
Showing 9 changed files with 35 additions and 24 deletions.
3 changes: 3 additions & 0 deletions easy-ci.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
use Rector\NodeNameResolver\Contract\NodeNameResolverInterface;
use Rector\NodeTypeResolver\Contract\NodeTypeResolverInterface;
use Rector\NodeTypeResolver\DependencyInjection\PHPStanServicesFactory;
use Rector\NodeTypeResolver\PHPStan\Scope\Contract\NodeVisitor\ScopeResolverNodeVisitorInterface;
use Rector\NodeTypeResolver\Reflection\BetterReflection\RectorBetterReflectionSourceLocatorFactory;
use Rector\NodeTypeResolver\TypeAnalyzer\MethodTypeAnalyzer;
use Rector\Php80\Contract\AttributeDecoratorInterface;
Expand Down Expand Up @@ -94,5 +95,7 @@
NamespacedNameDecorator::class,
NamedVariableFactory::class,
BinaryOpTreeRootLocator::class,

ScopeResolverNodeVisitorInterface::class,
]);
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?php

declare(strict_types=1);

namespace Rector\NodeTypeResolver\PHPStan\Scope\Contract\NodeVisitor;

use PhpParser\NodeVisitor;

interface ScopeResolverNodeVisitorInterface extends NodeVisitor
{
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,12 @@
use PhpParser\Node\Expr\Assign;
use PhpParser\NodeVisitorAbstract;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\NodeTypeResolver\PHPStan\Scope\Contract\NodeVisitor\ScopeResolverNodeVisitorInterface;

/**
* Inspired by https://github.com/phpstan/phpstan-src/blob/1.7.x/src/Parser/NewAssignedToPropertyVisitor.php
*/
final class AssignedToNodeVisitor extends NodeVisitorAbstract
final class AssignedToNodeVisitor extends NodeVisitorAbstract implements ScopeResolverNodeVisitorInterface
{
public function enterNode(Node $node): ?Node
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,9 @@
use PhpParser\NodeVisitorAbstract;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser;
use Rector\NodeTypeResolver\PHPStan\Scope\Contract\NodeVisitor\ScopeResolverNodeVisitorInterface;

final class ByRefReturnNodeVisitor extends NodeVisitorAbstract
final class ByRefReturnNodeVisitor extends NodeVisitorAbstract implements ScopeResolverNodeVisitorInterface
{
public function __construct(
private readonly SimpleCallableNodeTraverser $simpleCallableNodeTraverser
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,9 @@
use PhpParser\NodeVisitorAbstract;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser;
use Rector\NodeTypeResolver\PHPStan\Scope\Contract\NodeVisitor\ScopeResolverNodeVisitorInterface;

final class ByRefVariableNodeVisitor extends NodeVisitorAbstract
final class ByRefVariableNodeVisitor extends NodeVisitorAbstract implements ScopeResolverNodeVisitorInterface
{
public function __construct(
private readonly SimpleCallableNodeTraverser $simpleCallableNodeTraverser
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,9 @@
use Rector\Core\Contract\PhpParser\Node\StmtsAwareInterface;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser;
use Rector\NodeTypeResolver\PHPStan\Scope\Contract\NodeVisitor\ScopeResolverNodeVisitorInterface;

final class GlobalVariableNodeVisitor extends NodeVisitorAbstract
final class GlobalVariableNodeVisitor extends NodeVisitorAbstract implements ScopeResolverNodeVisitorInterface
{
public function __construct(
private readonly SimpleCallableNodeTraverser $simpleCallableNodeTraverser
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,12 @@
use Rector\Core\Configuration\Option;
use Rector\Core\Configuration\Parameter\ParameterProvider;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\NodeTypeResolver\PHPStan\Scope\Contract\NodeVisitor\ScopeResolverNodeVisitorInterface;

/**
* Skips performance trap in PHPStan: https://github.com/phpstan/phpstan/issues/254
*/
final class RemoveDeepChainMethodCallNodeVisitor extends NodeVisitorAbstract
final class RemoveDeepChainMethodCallNodeVisitor extends NodeVisitorAbstract implements ScopeResolverNodeVisitorInterface
{
private readonly int $nestedChainMethodCallLimit;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,9 @@
use Rector\Core\Contract\PhpParser\Node\StmtsAwareInterface;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser;
use Rector\NodeTypeResolver\PHPStan\Scope\Contract\NodeVisitor\ScopeResolverNodeVisitorInterface;

final class StaticVariableNodeVisitor extends NodeVisitorAbstract
final class StaticVariableNodeVisitor extends NodeVisitorAbstract implements ScopeResolverNodeVisitorInterface
{
public function __construct(
private readonly SimpleCallableNodeTraverser $simpleCallableNodeTraverser
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,12 +50,7 @@
use Rector\Core\Util\Reflection\PrivatesAccessor;
use Rector\NodeNameResolver\NodeNameResolver;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\NodeTypeResolver\PHPStan\Scope\NodeVisitor\AssignedToNodeVisitor;
use Rector\NodeTypeResolver\PHPStan\Scope\NodeVisitor\ByRefReturnNodeVisitor;
use Rector\NodeTypeResolver\PHPStan\Scope\NodeVisitor\ByRefVariableNodeVisitor;
use Rector\NodeTypeResolver\PHPStan\Scope\NodeVisitor\GlobalVariableNodeVisitor;
use Rector\NodeTypeResolver\PHPStan\Scope\NodeVisitor\RemoveDeepChainMethodCallNodeVisitor;
use Rector\NodeTypeResolver\PHPStan\Scope\NodeVisitor\StaticVariableNodeVisitor;
use Rector\NodeTypeResolver\PHPStan\Scope\Contract\NodeVisitor\ScopeResolverNodeVisitorInterface;
use Webmozart\Assert\Assert;

/**
Expand All @@ -71,30 +66,26 @@ final class PHPStanNodeScopeResolver

private readonly NodeTraverser $nodeTraverser;

/**
* @param ScopeResolverNodeVisitorInterface[] $nodeVisitors
*/
public function __construct(
private readonly ChangedFilesDetector $changedFilesDetector,
private readonly DependencyResolver $dependencyResolver,
private readonly NodeScopeResolver $nodeScopeResolver,
private readonly ReflectionProvider $reflectionProvider,
RemoveDeepChainMethodCallNodeVisitor $removeDeepChainMethodCallNodeVisitor,
AssignedToNodeVisitor $assignedToNodeVisitor,
GlobalVariableNodeVisitor $globalVariableNodeVisitor,
StaticVariableNodeVisitor $staticVariableNodeVisitor,
ByRefVariableNodeVisitor $byRefVariableNodeVisitor,
ByRefReturnNodeVisitor $byRefReturnNodeVisitor,
array $nodeVisitors,
private readonly ScopeFactory $scopeFactory,
private readonly PrivatesAccessor $privatesAccessor,
private readonly NodeNameResolver $nodeNameResolver,
private readonly BetterNodeFinder $betterNodeFinder,
private readonly ClassAnalyzer $classAnalyzer
) {
$this->nodeTraverser = new NodeTraverser();
$this->nodeTraverser->addVisitor($removeDeepChainMethodCallNodeVisitor);
$this->nodeTraverser->addVisitor($assignedToNodeVisitor);
$this->nodeTraverser->addVisitor($globalVariableNodeVisitor);
$this->nodeTraverser->addVisitor($staticVariableNodeVisitor);
$this->nodeTraverser->addVisitor($byRefVariableNodeVisitor);
$this->nodeTraverser->addVisitor($byRefReturnNodeVisitor);

foreach ($nodeVisitors as $nodeVisitor) {
$this->nodeTraverser->addVisitor($nodeVisitor);
}
}

/**
Expand Down

0 comments on commit ad70120

Please sign in to comment.