From 0411b4b698ca7aecab08020c84589dc05eb7958d Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Sun, 7 Dec 2025 16:45:26 +0700 Subject: [PATCH 1/3] [internal] Traverse DecoratingNodeVisitorInterface after scope filling on PHPStanNodeScopeResolver::processNodes() --- .../PHPStan/Scope/PHPStanNodeScopeResolver.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php b/src/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php index 4ae80808728..01fbc1f54ce 100644 --- a/src/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php +++ b/src/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php @@ -155,8 +155,6 @@ public function processNodes( Assert::allIsInstanceOf($stmts, Stmt::class); - $this->nodeTraverser->traverse($stmts); - $scope = $formerMutatingScope ?? $this->scopeFactory->createFromFile($filePath); $nodeCallback = function (Node $node, MutatingScope $mutatingScope) use ( @@ -419,6 +417,9 @@ public function processNodes( RectorNodeScopeResolver::processNodes($stmts, $scope); } + // use after scope filling DecoratingNodeVisitorInterface can can fetch the scope of target node + $this->nodeTraverser->traverse($stmts); + return $stmts; } From bad6f94a27cfb959f4558eaacd65baf1cdaf5b76 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Sun, 7 Dec 2025 16:47:51 +0700 Subject: [PATCH 2/3] fix grammar --- src/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php b/src/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php index 01fbc1f54ce..0e78eaa4d7a 100644 --- a/src/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php +++ b/src/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php @@ -417,7 +417,7 @@ public function processNodes( RectorNodeScopeResolver::processNodes($stmts, $scope); } - // use after scope filling DecoratingNodeVisitorInterface can can fetch the scope of target node + // use after scope filling so DecoratingNodeVisitorInterface instance can fetch the scope of target node $this->nodeTraverser->traverse($stmts); return $stmts; From 5a6c060d5c3bb6a9b3ac030ff7ffe0656174de22 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Sun, 7 Dec 2025 16:50:31 +0700 Subject: [PATCH 3/3] add link comment --- src/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php b/src/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php index 0e78eaa4d7a..eb629aeeab8 100644 --- a/src/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php +++ b/src/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php @@ -418,6 +418,7 @@ public function processNodes( } // use after scope filling so DecoratingNodeVisitorInterface instance can fetch the scope of target node + // @see https://github.com/rectorphp/rector-src/pull/7721#discussion_r2595932460 $this->nodeTraverser->traverse($stmts); return $stmts;