diff --git a/src/Rules/UnusedFunctionParametersCheck.php b/src/Rules/UnusedFunctionParametersCheck.php index f577eaa39b..8ff02bd62d 100644 --- a/src/Rules/UnusedFunctionParametersCheck.php +++ b/src/Rules/UnusedFunctionParametersCheck.php @@ -82,8 +82,21 @@ private function getUsedVariables(Scope $scope, $node): array if ($node instanceof Node\Expr\Include_ || $node instanceof Node\Expr\Eval_) { return $scope->getDefinedVariables(); } - if ($node instanceof Variable && is_string($node->name) && $node->name !== 'this') { - return [$node->name]; + if ($node instanceof Variable) { + if (is_string($node->name)) { + if ($node->name !== 'this') { + return [$node->name]; + } + } else { + $nameType = $scope->getType($node->name); + if ($nameType->getConstantStrings() === []) { + return $scope->getDefinedVariables(); + } + + foreach ($nameType->getConstantStrings() as $constantString) { + $variableNames[] = $constantString->getValue(); + } + } } if ($node instanceof Node\ClosureUse && is_string($node->var->name)) { return [$node->var->name]; diff --git a/tests/PHPStan/Rules/Classes/data/unused-constructor-parameters-include.php b/tests/PHPStan/Rules/Classes/data/unused-constructor-parameters-include.php index 790f535f6e..e94ca5b216 100644 --- a/tests/PHPStan/Rules/Classes/data/unused-constructor-parameters-include.php +++ b/tests/PHPStan/Rules/Classes/data/unused-constructor-parameters-include.php @@ -13,3 +13,16 @@ public function __construct( } } + +class Bar +{ + + public function __construct( + $usedViaVariableVariable, + $name + ) + { + echo $$name; + } + +} diff --git a/tests/PHPStan/Rules/Functions/UnusedClosureUsesRuleTest.php b/tests/PHPStan/Rules/Functions/UnusedClosureUsesRuleTest.php index 137257162c..f7a931fb22 100644 --- a/tests/PHPStan/Rules/Functions/UnusedClosureUsesRuleTest.php +++ b/tests/PHPStan/Rules/Functions/UnusedClosureUsesRuleTest.php @@ -32,6 +32,10 @@ public function testUnusedClosureUses(): void 'Anonymous function has an unused use $usedInClosureUse.', 10, ], + [ + 'Anonymous function has an unused use $container.', + 43, + ], ]); } diff --git a/tests/PHPStan/Rules/Functions/data/unused-closure-uses.php b/tests/PHPStan/Rules/Functions/data/unused-closure-uses.php index 6b2b872e22..08a5c7f979 100644 --- a/tests/PHPStan/Rules/Functions/data/unused-closure-uses.php +++ b/tests/PHPStan/Rules/Functions/data/unused-closure-uses.php @@ -25,3 +25,21 @@ function () use ($container) { function () use ($container) { eval('echo $container;'); }; + +$aap = 684; + +$a = function () use ($aap) { + require __DIR__ . '/echo_the_value_of_aap.php'; +}; + +$name = 'container'; + +function () use ($container, $name) { + echo $$name; +}; + +$otherName = 'notContainer'; + +function () use ($container, $otherName) { + echo $$otherName; +};