diff --git a/packages/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php b/packages/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php index 46cbd921b40..9d15bd4fcbd 100644 --- a/packages/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php +++ b/packages/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php @@ -110,7 +110,8 @@ public function processNodes( Assert::allIsInstanceOf($stmts, Stmt::class); $this->nodeTraverser->traverse($stmts); - if (! $isScopeRefreshing) { + $isFileWithoutNamespace = count($stmts) === 1 && $stmts[0] instanceof FileWithoutNamespace; + if (! $isScopeRefreshing && ! $isFileWithoutNamespace) { $stmts = $this->fileWithoutNamespaceNodeTraverser->traverse($stmts); if (count($stmts) === 1 && $stmts[0] instanceof FileWithoutNamespace) { diff --git a/src/PhpParser/NodeTraverser/FileWithoutNamespaceNodeTraverser.php b/src/PhpParser/NodeTraverser/FileWithoutNamespaceNodeTraverser.php index 17919495004..dda16f37349 100644 --- a/src/PhpParser/NodeTraverser/FileWithoutNamespaceNodeTraverser.php +++ b/src/PhpParser/NodeTraverser/FileWithoutNamespaceNodeTraverser.php @@ -25,6 +25,10 @@ public function __construct( */ public function traverse(array $nodes): array { + if (current($nodes) instanceof FileWithoutNamespace) { + return $nodes; + } + $hasNamespace = (bool) $this->nodeFinder->findFirstInstanceOf($nodes, Namespace_::class); if (! $hasNamespace && $nodes !== []) { $fileWithoutNamespace = new FileWithoutNamespace($nodes); diff --git a/src/PhpParser/Printer/BetterStandardPrinter.php b/src/PhpParser/Printer/BetterStandardPrinter.php index df5f420f06d..7d1c86a0c31 100644 --- a/src/PhpParser/Printer/BetterStandardPrinter.php +++ b/src/PhpParser/Printer/BetterStandardPrinter.php @@ -531,7 +531,7 @@ private function resolveNewStmts(array $stmts): array $stmts = array_values($stmts); if (count($stmts) === 1 && $stmts[0] instanceof FileWithoutNamespace) { - return $this->resolveNewStmts($stmts[0]->stmts); + return $stmts[0]->stmts; } return $stmts;