From 2856dd27c0a805ed396e417a4362ca702a89ed32 Mon Sep 17 00:00:00 2001 From: Jan Nedbal Date: Tue, 1 Oct 2024 14:38:34 +0200 Subject: [PATCH 1/2] Remove deprecated ParametersAcceptorSelector::selectFromArgs --- composer.json | 2 +- composer.lock | 10 +++---- src/Rule/EnforceListReturnRule.php | 27 ++++--------------- .../ForbidReturnValueInYieldingMethodRule.php | 3 +-- src/Rule/ForbidUselessNullableReturnRule.php | 3 +-- src/Rule/RequirePreviousExceptionPassRule.php | 6 ++++- 6 files changed, 18 insertions(+), 33 deletions(-) diff --git a/composer.json b/composer.json index f83bf19..e278aa5 100644 --- a/composer.json +++ b/composer.json @@ -74,7 +74,7 @@ "check:ec": "ec src tests", "check:ignores": "php bin/verify-inline-ignore.php", "check:tests": "phpunit -vvv tests", - "check:types": "phpstan analyse -vvv --ansi", + "check:types": "phpstan analyse -vv --ansi", "fix:cs": "phpcbf" } } diff --git a/composer.lock b/composer.lock index 7a57c68..c3c06bd 100644 --- a/composer.lock +++ b/composer.lock @@ -8,16 +8,16 @@ "packages": [ { "name": "phpstan/phpstan", - "version": "1.12.0", + "version": "1.12.5", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "384af967d35b2162f69526c7276acadce534d0e1" + "reference": "7e6c6cb7cecb0a6254009a1a8a7d54ec99812b17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/384af967d35b2162f69526c7276acadce534d0e1", - "reference": "384af967d35b2162f69526c7276acadce534d0e1", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/7e6c6cb7cecb0a6254009a1a8a7d54ec99812b17", + "reference": "7e6c6cb7cecb0a6254009a1a8a7d54ec99812b17", "shasum": "" }, "require": { @@ -62,7 +62,7 @@ "type": "github" } ], - "time": "2024-08-27T09:18:05+00:00" + "time": "2024-09-26T12:45:22+00:00" } ], "packages-dev": [ diff --git a/src/Rule/EnforceListReturnRule.php b/src/Rule/EnforceListReturnRule.php index 22965a9..24869e9 100644 --- a/src/Rule/EnforceListReturnRule.php +++ b/src/Rule/EnforceListReturnRule.php @@ -6,9 +6,7 @@ use PHPStan\Analyser\Scope; use PHPStan\Node\ClosureReturnStatementsNode; use PHPStan\Node\ReturnStatementsNode; -use PHPStan\Reflection\FunctionReflection; use PHPStan\Reflection\MethodReflection; -use PHPStan\Reflection\ParametersAcceptorSelector; use PHPStan\Rules\IdentifierRuleError; use PHPStan\Rules\Rule; use PHPStan\Rules\RuleErrorBuilder; @@ -43,12 +41,15 @@ public function processNode(Node $node, Scope $scope): array return []; } - if ($this->alwaysReturnList($node) && !$this->isMarkedWithListReturn($methodReflection)) { + $returnType = $methodReflection->getReturnType(); + + if ($this->alwaysReturnList($node) && !$returnType->isList()->yes()) { $callLikeType = $methodReflection instanceof MethodReflection ? 'Method' : 'Function'; + $returnTypeString = $returnType->describe(VerbosityLevel::precise()); - $error = RuleErrorBuilder::message("{$callLikeType} {$methodReflection->getName()} always return list, but is marked as {$this->getReturnPhpDoc($methodReflection)}") + $error = RuleErrorBuilder::message("{$callLikeType} {$methodReflection->getName()} always return list, but is marked as {$returnTypeString}") ->identifier('shipmonk.returnListNotUsed') ->build(); return [$error]; @@ -57,15 +58,6 @@ public function processNode(Node $node, Scope $scope): array return []; } - /** - * @param FunctionReflection|MethodReflection $methodReflection - */ - private function getReturnPhpDoc(object $methodReflection): string - { - $returnType = ParametersAcceptorSelector::selectSingle($methodReflection->getVariants())->getReturnType(); - return $returnType->describe(VerbosityLevel::precise()); - } - private function alwaysReturnList(ReturnStatementsNode $node): bool { $returnStatementsCount = count($node->getReturnStatements()); @@ -95,13 +87,4 @@ private function alwaysReturnList(ReturnStatementsNode $node): bool return true; } - /** - * @param FunctionReflection|MethodReflection $methodReflection - */ - private function isMarkedWithListReturn(object $methodReflection): bool - { - $returnType = ParametersAcceptorSelector::selectSingle($methodReflection->getVariants())->getReturnType(); - return $returnType->isList()->yes(); - } - } diff --git a/src/Rule/ForbidReturnValueInYieldingMethodRule.php b/src/Rule/ForbidReturnValueInYieldingMethodRule.php index 5e1d45f..f0c8d55 100644 --- a/src/Rule/ForbidReturnValueInYieldingMethodRule.php +++ b/src/Rule/ForbidReturnValueInYieldingMethodRule.php @@ -8,7 +8,6 @@ use PHPStan\Node\ClosureReturnStatementsNode; use PHPStan\Node\MethodReturnStatementsNode; use PHPStan\Node\ReturnStatementsNode; -use PHPStan\Reflection\ParametersAcceptorSelector; use PHPStan\Rules\IdentifierRuleError; use PHPStan\Rules\Rule; use PHPStan\Rules\RuleErrorBuilder; @@ -90,7 +89,7 @@ private function getReturnType(ReturnStatementsNode $node, Scope $scope): Type } if ($methodReflection !== null) { - return ParametersAcceptorSelector::selectSingle($methodReflection->getVariants())->getReturnType(); + return $methodReflection->getReturnType(); } return new MixedType(); diff --git a/src/Rule/ForbidUselessNullableReturnRule.php b/src/Rule/ForbidUselessNullableReturnRule.php index 15777d1..219985e 100644 --- a/src/Rule/ForbidUselessNullableReturnRule.php +++ b/src/Rule/ForbidUselessNullableReturnRule.php @@ -6,7 +6,6 @@ use PHPStan\Analyser\Scope; use PHPStan\Node\ClosureReturnStatementsNode; use PHPStan\Node\ReturnStatementsNode; -use PHPStan\Reflection\ParametersAcceptorSelector; use PHPStan\Rules\IdentifierRuleError; use PHPStan\Rules\Rule; use PHPStan\Rules\RuleErrorBuilder; @@ -39,7 +38,7 @@ public function processNode(Node $node, Scope $scope): array if ($node instanceof ClosureReturnStatementsNode) { $declaredType = $scope->getFunctionType($node->getClosureExpr()->getReturnType(), false, false); } elseif ($methodReflection !== null) { - $declaredType = ParametersAcceptorSelector::selectSingle($methodReflection->getVariants())->getReturnType(); + $declaredType = $methodReflection->getReturnType(); } else { return []; } diff --git a/src/Rule/RequirePreviousExceptionPassRule.php b/src/Rule/RequirePreviousExceptionPassRule.php index 171d9b9..fa4de65 100644 --- a/src/Rule/RequirePreviousExceptionPassRule.php +++ b/src/Rule/RequirePreviousExceptionPassRule.php @@ -171,7 +171,11 @@ private function getCallLikeParameters(CallLike $node, Scope $scope): array // FuncCall not yet supported if ($methodReflection !== null) { - return ParametersAcceptorSelector::selectSingle($methodReflection->getVariants())->getParameters(); + return ParametersAcceptorSelector::selectFromArgs( + $scope, + $node->getArgs(), + $methodReflection->getVariants(), + )->getParameters(); } return []; From 51fa966eeed3e668606912e7f636336d0b93ab14 Mon Sep 17 00:00:00 2001 From: Jan Nedbal Date: Tue, 1 Oct 2024 14:43:07 +0200 Subject: [PATCH 2/2] Bump lowest phpstan to be able to use new preferred api --- composer.json | 2 +- composer.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index e278aa5..a8e0084 100644 --- a/composer.json +++ b/composer.json @@ -11,7 +11,7 @@ ], "require": { "php": "^7.4 || ^8.0", - "phpstan/phpstan": "^1.11.0" + "phpstan/phpstan": "^1.12.5" }, "require-dev": { "editorconfig-checker/editorconfig-checker": "^10.6.0", diff --git a/composer.lock b/composer.lock index c3c06bd..69bfab5 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "c96a6052cb31cb9438f71055604c9630", + "content-hash": "c9c06c7268b4ea221c6db80af3e0e396", "packages": [ { "name": "phpstan/phpstan",