Skip to content

Commit 425d464

Browse files
committed
UnusedFunctionParametersCheck: report precise line
1 parent f6c556f commit 425d464

File tree

5 files changed

+24
-24
lines changed

5 files changed

+24
-24
lines changed

src/Rules/Classes/UnusedConstructorParametersRule.php

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
use function array_map;
1616
use function array_values;
1717
use function count;
18-
use function is_string;
1918
use function sprintf;
2019
use function strtolower;
2120

@@ -56,11 +55,11 @@ public function processNode(Node $node, Scope $scope): array
5655

5756
return $this->check->getUnusedParameters(
5857
$scope,
59-
array_map(static function (Param $parameter): string {
60-
if (!$parameter->var instanceof Variable || !is_string($parameter->var->name)) {
58+
array_map(static function (Param $parameter): Variable {
59+
if (!$parameter->var instanceof Variable) {
6160
throw new ShouldNotHappenException();
6261
}
63-
return $parameter->var->name;
62+
return $parameter->var;
6463
}, array_values(array_filter($originalNode->params, static fn (Param $parameter): bool => $parameter->flags === 0))),
6564
$originalNode->stmts,
6665
$message,

src/Rules/Functions/UnusedClosureUsesRule.php

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,8 @@
66
use PHPStan\Analyser\Scope;
77
use PHPStan\Rules\Rule;
88
use PHPStan\Rules\UnusedFunctionParametersCheck;
9-
use PHPStan\ShouldNotHappenException;
109
use function array_map;
1110
use function count;
12-
use function is_string;
1311

1412
/**
1513
* @implements Rule<Node\Expr\Closure>
@@ -34,12 +32,7 @@ public function processNode(Node $node, Scope $scope): array
3432

3533
return $this->check->getUnusedParameters(
3634
$scope,
37-
array_map(static function (Node\ClosureUse $use): string {
38-
if (!is_string($use->var->name)) {
39-
throw new ShouldNotHappenException();
40-
}
41-
return $use->var->name;
42-
}, $node->uses),
35+
array_map(static fn (Node\ClosureUse $use): Node\Expr\Variable => $use->var, $node->uses),
4336
$node->stmts,
4437
'Anonymous function has an unused use $%s.',
4538
'closure.unusedUse',

src/Rules/UnusedFunctionParametersCheck.php

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@
33
namespace PHPStan\Rules;
44

55
use PhpParser\Node;
6+
use PhpParser\Node\Expr\Variable;
67
use PHPStan\Analyser\Scope;
78
use PHPStan\Reflection\ReflectionProvider;
9+
use PHPStan\ShouldNotHappenException;
810
use PHPStan\Type\Constant\ConstantStringType;
9-
use function array_fill_keys;
10-
use function array_keys;
11+
use function array_combine;
12+
use function array_map;
1113
use function array_merge;
1214
use function is_array;
1315
use function is_string;
@@ -21,20 +23,26 @@ public function __construct(private ReflectionProvider $reflectionProvider)
2123
}
2224

2325
/**
24-
* @param string[] $parameterNames
26+
* @param Variable[] $parameterVars
2527
* @param Node[] $statements
2628
* @param 'constructor.unusedParameter'|'closure.unusedUse' $identifier
2729
* @return list<IdentifierRuleError>
2830
*/
2931
public function getUnusedParameters(
3032
Scope $scope,
31-
array $parameterNames,
33+
array $parameterVars,
3234
array $statements,
3335
string $unusedParameterMessage,
3436
string $identifier,
3537
): array
3638
{
37-
$unusedParameters = array_fill_keys($parameterNames, true);
39+
$parameterNames = array_map(static function (Variable $variable): string {
40+
if (!is_string($variable->name)) {
41+
throw new ShouldNotHappenException();
42+
}
43+
return $variable->name;
44+
}, $parameterVars);
45+
$unusedParameters = array_combine($parameterNames, $parameterVars);
3846
foreach ($this->getUsedVariables($scope, $statements) as $variableName) {
3947
if (!isset($unusedParameters[$variableName])) {
4048
continue;
@@ -43,10 +51,10 @@ public function getUnusedParameters(
4351
unset($unusedParameters[$variableName]);
4452
}
4553
$errors = [];
46-
foreach (array_keys($unusedParameters) as $name) {
54+
foreach ($unusedParameters as $name => $variable) {
4755
$errors[] = RuleErrorBuilder::message(
4856
sprintf($unusedParameterMessage, $name),
49-
)->identifier($identifier)->build();
57+
)->identifier($identifier)->line($variable->getStartLine())->build();
5058
}
5159

5260
return $errors;
@@ -66,7 +74,7 @@ private function getUsedVariables(Scope $scope, $node): array
6674
return $scope->getDefinedVariables();
6775
}
6876
}
69-
if ($node instanceof Node\Expr\Variable && is_string($node->name) && $node->name !== 'this') {
77+
if ($node instanceof Variable && is_string($node->name) && $node->name !== 'this') {
7078
return [$node->name];
7179
}
7280
if ($node instanceof Node\ClosureUse && is_string($node->var->name)) {

tests/PHPStan/Rules/Classes/UnusedConstructorParametersRuleTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@ public function testUnusedConstructorParameters(): void
2424
$this->analyse([__DIR__ . '/data/unused-constructor-parameters.php'], [
2525
[
2626
'Constructor of class UnusedConstructorParameters\Foo has an unused parameter $unusedParameter.',
27-
11,
27+
19,
2828
],
2929
[
3030
'Constructor of class UnusedConstructorParameters\Foo has an unused parameter $anotherUnusedParameter.',
31-
11,
31+
20,
3232
],
3333
]);
3434
}

tests/PHPStan/Rules/Functions/UnusedClosureUsesRuleTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@ public function testUnusedClosureUses(): void
2222
$this->analyse([__DIR__ . '/data/unused-closure-uses.php'], [
2323
[
2424
'Anonymous function has an unused use $unused.',
25-
3,
25+
6,
2626
],
2727
[
2828
'Anonymous function has an unused use $anotherUnused.',
29-
3,
29+
7,
3030
],
3131
[
3232
'Anonymous function has an unused use $usedInClosureUse.',

0 commit comments

Comments
 (0)