6060use Rector \Core \Exception \ShouldNotHappenException ;
6161use Rector \Core \NodeAnalyzer \ClassAnalyzer ;
6262use Rector \Core \PhpParser \Node \CustomNode \FileWithoutNamespace ;
63- use Rector \Core \PhpParser \NodeTraverser \FileWithoutNamespaceNodeTraverser ;
6463use Rector \Core \PHPStan \NodeVisitor \WrappedNodeRestoringNodeVisitor ;
6564use Rector \Core \Util \Reflection \PrivatesAccessor ;
6665use Rector \NodeNameResolver \NodeNameResolver ;
@@ -113,11 +112,6 @@ final class PHPStanNodeScopeResolver
113112 * @var \Rector\Core\NodeAnalyzer\ClassAnalyzer
114113 */
115114 private $ classAnalyzer ;
116- /**
117- * @readonly
118- * @var \Rector\Core\PhpParser\NodeTraverser\FileWithoutNamespaceNodeTraverser
119- */
120- private $ fileWithoutNamespaceNodeTraverser ;
121115 /**
122116 * @var string
123117 */
@@ -130,7 +124,7 @@ final class PHPStanNodeScopeResolver
130124 /**
131125 * @param ScopeResolverNodeVisitorInterface[] $nodeVisitors
132126 */
133- public function __construct (ChangedFilesDetector $ changedFilesDetector , DependencyResolver $ dependencyResolver , NodeScopeResolver $ nodeScopeResolver , ReflectionProvider $ reflectionProvider , iterable $ nodeVisitors , \Rector \NodeTypeResolver \PHPStan \Scope \ScopeFactory $ scopeFactory , PrivatesAccessor $ privatesAccessor , NodeNameResolver $ nodeNameResolver , ClassAnalyzer $ classAnalyzer, FileWithoutNamespaceNodeTraverser $ fileWithoutNamespaceNodeTraverser )
127+ public function __construct (ChangedFilesDetector $ changedFilesDetector , DependencyResolver $ dependencyResolver , NodeScopeResolver $ nodeScopeResolver , ReflectionProvider $ reflectionProvider , iterable $ nodeVisitors , \Rector \NodeTypeResolver \PHPStan \Scope \ScopeFactory $ scopeFactory , PrivatesAccessor $ privatesAccessor , NodeNameResolver $ nodeNameResolver , ClassAnalyzer $ classAnalyzer )
134128 {
135129 $ this ->changedFilesDetector = $ changedFilesDetector ;
136130 $ this ->dependencyResolver = $ dependencyResolver ;
@@ -140,7 +134,6 @@ public function __construct(ChangedFilesDetector $changedFilesDetector, Dependen
140134 $ this ->privatesAccessor = $ privatesAccessor ;
141135 $ this ->nodeNameResolver = $ nodeNameResolver ;
142136 $ this ->classAnalyzer = $ classAnalyzer ;
143- $ this ->fileWithoutNamespaceNodeTraverser = $ fileWithoutNamespaceNodeTraverser ;
144137 $ this ->nodeTraverser = new NodeTraverser ();
145138 foreach ($ nodeVisitors as $ nodeVisitor ) {
146139 $ this ->nodeTraverser ->addVisitor ($ nodeVisitor );
@@ -158,22 +151,14 @@ public function processNodes(array $stmts, string $filePath, ?MutatingScope $for
158151 * @see vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php:282
159152 */
160153 Assert::allIsInstanceOf ($ stmts , Stmt::class);
161- $ isInitFileWithoutNamespace = \false;
162- if (!$ isScopeRefreshing && !\current ($ stmts ) instanceof FileWithoutNamespace) {
163- $ stmts = $ this ->fileWithoutNamespaceNodeTraverser ->traverse ($ stmts );
164- $ currentStmt = \current ($ stmts );
165- if ($ currentStmt instanceof FileWithoutNamespace) {
166- $ this ->nodeTraverser ->traverse ($ stmts );
167- $ stmts = $ currentStmt ->stmts ;
168- $ isInitFileWithoutNamespace = \true;
169- }
170- }
171- if (!$ isInitFileWithoutNamespace ) {
172- $ this ->nodeTraverser ->traverse ($ stmts );
173- }
154+ $ this ->nodeTraverser ->traverse ($ stmts );
174155 $ scope = $ formerMutatingScope ?? $ this ->scopeFactory ->createFromFile ($ filePath );
175156 // skip chain method calls, performance issue: https://github.com/phpstan/phpstan/issues/254
176157 $ nodeCallback = function (Node $ node , MutatingScope $ mutatingScope ) use (&$ nodeCallback , $ isScopeRefreshing , $ filePath ) : void {
158+ if ($ node instanceof FileWithoutNamespace) {
159+ $ this ->nodeScopeResolver ->processNodes ($ node ->stmts , $ mutatingScope , $ nodeCallback );
160+ return ;
161+ }
177162 if (($ node instanceof Expression || $ node instanceof Return_ || $ node instanceof Assign || $ node instanceof EnumCase || $ node instanceof AssignOp || $ node instanceof Cast) && $ node ->expr instanceof Expr) {
178163 $ node ->expr ->setAttribute (AttributeKey::SCOPE , $ mutatingScope );
179164 }
0 commit comments