Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/AllRectorsOverview.md
Original file line number Diff line number Diff line change
Expand Up @@ -3857,7 +3857,7 @@ services:

- class: `Rector\Php\Rector\FuncCall\PregReplaceEModifierRector`

The /e modifier is no longer supported, use preg_replace_callback instead
The /e modifier is no longer supported, use preg_replace_callback instead

```diff
class SomeClass
Expand Down
2 changes: 1 addition & 1 deletion docs/NodesOverview.md
Original file line number Diff line number Diff line change
Expand Up @@ -917,7 +917,7 @@ if (true) {

```php
?>
<strong>feel</strong><?php
<strong>feel</strong><?php
```
<br>

Expand Down
19 changes: 1 addition & 18 deletions packages/NodeTypeResolver/src/NodeScopeAndMetadataDecorator.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
use Rector\NodeTypeResolver\NodeVisitor\NodeCollectorNodeVisitor;
use Rector\NodeTypeResolver\NodeVisitor\ParentAndNextNodeVisitor;
use Rector\NodeTypeResolver\PHPStan\Scope\NodeScopeResolver;
use Rector\PhpParser\Node\BetterNodeFinder;

final class NodeScopeAndMetadataDecorator
{
Expand Down Expand Up @@ -57,11 +56,6 @@ final class NodeScopeAndMetadataDecorator
*/
private $nodeCollectorNodeVisitor;

/**
* @var BetterNodeFinder
*/
private $betterNodeFinder;

public function __construct(
NodeScopeResolver $nodeScopeResolver,
ParentAndNextNodeVisitor $parentAndNextNodeVisitor,
Expand All @@ -70,8 +64,7 @@ public function __construct(
NamespaceNodeVisitor $namespaceNodeVisitor,
ExpressionNodeVisitor $expressionNodeVisitor,
FileInfoNodeVisitor $fileInfoNodeVisitor,
NodeCollectorNodeVisitor $nodeCollectorNodeVisitor,
BetterNodeFinder $betterNodeFinder
NodeCollectorNodeVisitor $nodeCollectorNodeVisitor
) {
$this->nodeScopeResolver = $nodeScopeResolver;
$this->parentAndNextNodeVisitor = $parentAndNextNodeVisitor;
Expand All @@ -81,7 +74,6 @@ public function __construct(
$this->expressionNodeVisitor = $expressionNodeVisitor;
$this->fileInfoNodeVisitor = $fileInfoNodeVisitor;
$this->nodeCollectorNodeVisitor = $nodeCollectorNodeVisitor;
$this->betterNodeFinder = $betterNodeFinder;
}

/**
Expand All @@ -97,15 +89,6 @@ public function decorateNodesFromFile(array $nodes, string $filePath): array
]));
$nodes = $nodeTraverser->traverse($nodes);

// dual run of these is conflicting with anonymous classes, e.g. in \Rector\DeadCode\Rector\ClassMethod\RemoveUnusedParameterRector; solve later
if ($this->betterNodeFinder->findFirstInstanceOf($nodes, Node\Stmt\Trait_::class)) {
// needed for trait scoping
$nodeTraverser = new NodeTraverser();
$nodeTraverser->addVisitor($this->namespaceNodeVisitor);
$nodeTraverser->addVisitor($this->classAndMethodNodeVisitor);
$nodes = $nodeTraverser->traverse($nodes);
}

$nodes = $this->nodeScopeResolver->processNodes($nodes, $filePath);

$nodeTraverser = new NodeTraverser();
Expand Down
1 change: 0 additions & 1 deletion packages/NodeTypeResolver/src/NodeTypeResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -400,7 +400,6 @@ private function resolveFirstTypes(Node $node): array
{
// nodes that cannot be resolver by PHPStan
$nodeClass = get_class($node);

if (isset($this->perNodeTypeResolvers[$nodeClass])) {
return $this->perNodeTypeResolvers[$nodeClass]->resolve($node);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,6 @@ public function processNodes(array $nodes, string $filePath): array
{
$this->removeDeepChainMethodCallNodes($nodes);

$this->phpStanNodeScopeResolver->setAnalysedFiles([$filePath]);
$scope = $this->scopeFactory->createFromFile($filePath);

// skip chain method calls, performance issue: https://github.com/phpstan/phpstan/issues/254
Expand Down
26 changes: 25 additions & 1 deletion src/Application/RectorApplication.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace Rector\Application;

use PHPStan\AnalysedCodeException;
use PHPStan\Analyser\NodeScopeResolver;
use Rector\Application\FileSystem\RemovedAndAddedFilesCollector;
use Rector\Application\FileSystem\RemovedAndAddedFilesProcessor;
use Rector\Configuration\Configuration;
Expand Down Expand Up @@ -68,6 +69,11 @@ final class RectorApplication
*/
private $enabledRectorsProvider;

/**
* @var NodeScopeResolver
*/
private $nodeScopeResolver;

public function __construct(
SymfonyStyle $symfonyStyle,
FileSystemFileProcessor $fileSystemFileProcessor,
Expand All @@ -76,7 +82,8 @@ public function __construct(
FileProcessor $fileProcessor,
EnabledRectorsProvider $enabledRectorsProvider,
RemovedAndAddedFilesCollector $removedAndAddedFilesCollector,
RemovedAndAddedFilesProcessor $removedAndAddedFilesProcessor
RemovedAndAddedFilesProcessor $removedAndAddedFilesProcessor,
NodeScopeResolver $nodeScopeResolver
) {
$this->symfonyStyle = $symfonyStyle;
$this->fileSystemFileProcessor = $fileSystemFileProcessor;
Expand All @@ -86,6 +93,7 @@ public function __construct(
$this->removedAndAddedFilesCollector = $removedAndAddedFilesCollector;
$this->removedAndAddedFilesProcessor = $removedAndAddedFilesProcessor;
$this->enabledRectorsProvider = $enabledRectorsProvider;
$this->nodeScopeResolver = $nodeScopeResolver;
}

/**
Expand All @@ -103,6 +111,9 @@ public function runOnFileInfos(array $fileInfos): void
$this->symfonyStyle->progressStart($fileCount * 3);
}

// PHPStan has to know about all files!
$this->configurePHPStanNodeScopeResolver($fileInfos);

// 1. parse files to nodes
foreach ($fileInfos as $fileInfo) {
$this->tryCatchWrapper($fileInfo, function (SmartFileInfo $smartFileInfo): void {
Expand Down Expand Up @@ -192,4 +203,17 @@ private function advance(SmartFileInfo $smartFileInfo): void
$this->symfonyStyle->progressAdvance();
}
}

/**
* @param SmartFileInfo[] $fileInfos
*/
private function configurePHPStanNodeScopeResolver(array $fileInfos): void
{
$filePaths = [];
foreach ($fileInfos as $fileInfo) {
$filePaths[] = $fileInfo->getRealPath();
}

$this->nodeScopeResolver->setAnalysedFiles($filePaths);
}
}