diff --git a/build/target-repository/composer.json b/build/target-repository/composer.json index 253fc01cdc8..8b2fad09eaa 100644 --- a/build/target-repository/composer.json +++ b/build/target-repository/composer.json @@ -9,7 +9,7 @@ ], "require": { "php": "^7.4|^8.0", - "phpstan/phpstan": "^2.2.14" + "phpstan/phpstan": "^2.3.0" }, "autoload": { "files": [ diff --git a/composer.json b/composer.json index b06552a5721..82e305f82e8 100644 --- a/composer.json +++ b/composer.json @@ -24,7 +24,7 @@ "nikic/php-parser": "^5.9", "ondram/ci-detector": "^4.2", "phpstan/phpdoc-parser": "^2.3.3", - "phpstan/phpstan": "^2.2.14", + "phpstan/phpstan": "^2.3.0", "react/child-process": "^0.6.5", "react/event-loop": "^1.6", "react/socket": "^1.17", diff --git a/phpstan.neon b/phpstan.neon index b2a85bfa3fc..bb045ef24d6 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -48,7 +48,6 @@ parameters: # see https://github.com/TomasVotruba/type-coverage type_coverage: - declare: 99 return_type: 99 param_type: 99 property_type: 99 diff --git a/rules/DeadCode/Rector/ClassMethod/RemoveUselessAssignFromPropertyPromotionRector.php b/rules/DeadCode/Rector/ClassMethod/RemoveUselessAssignFromPropertyPromotionRector.php index 35f345b4418..46d8e30b66e 100644 --- a/rules/DeadCode/Rector/ClassMethod/RemoveUselessAssignFromPropertyPromotionRector.php +++ b/rules/DeadCode/Rector/ClassMethod/RemoveUselessAssignFromPropertyPromotionRector.php @@ -121,11 +121,6 @@ public function refactor(Node $node): ?Node return null; } - // empty data? nothing to remove - if ($removeStmtKeys === []) { - return null; - } - foreach ($removeStmtKeys as $removeStmtKey) { unset($node->stmts[$removeStmtKey]); } diff --git a/rules/EarlyReturn/Rector/If_/ChangeIfElseValueAssignToEarlyReturnRector.php b/rules/EarlyReturn/Rector/If_/ChangeIfElseValueAssignToEarlyReturnRector.php index d6a0aaa7ffa..83983ca1e35 100644 --- a/rules/EarlyReturn/Rector/If_/ChangeIfElseValueAssignToEarlyReturnRector.php +++ b/rules/EarlyReturn/Rector/If_/ChangeIfElseValueAssignToEarlyReturnRector.php @@ -108,9 +108,9 @@ public function refactor(Node $node): ?Node /** @var Assign $assign */ $assign = $this->stmtsManipulator->getUnwrappedLastStmt($if->stmts); - $returnLastIf = new Return_($assign->expr); - $this->mirrorComments($returnLastIf, $assign); - $if->stmts[$lastIfStmtKey] = $returnLastIf; + $return = new Return_($assign->expr); + $this->mirrorComments($return, $assign); + $if->stmts[$lastIfStmtKey] = $return; /** @var Else_ $else */ $else = $if->else; diff --git a/src/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php b/src/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php index bc4b6a8591f..35865675fbf 100644 --- a/src/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php +++ b/src/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php @@ -731,6 +731,9 @@ private function processTrait(Trait_ $trait, MutatingScope $mutatingScope, calla $this->privatesAccessor->setPrivateProperty($traitScope, self::CONTEXT, $traitContext); + // the cloned scope keeps node callback scope cached from former context, reset it to use the trait context + $this->privatesAccessor->setPrivateProperty($traitScope, 'nodeCallbackScope', null); + $trait->setAttribute(AttributeKey::SCOPE, $traitScope); $this->nodeScopeResolverProcessNodes($trait->stmts, $traitScope, $nodeCallback); $this->decorateNodeAttrGroups($trait, $traitScope, $nodeCallback);