Skip to content

Commit 0c989a4

Browse files
authored
Autoremove: fix removal of transitively dead constants (#183)
1 parent 7a8354f commit 0c989a4

File tree

5 files changed

+15
-9
lines changed

5 files changed

+15
-9
lines changed

src/Formatter/RemoveDeadCodeFormatter.php

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use PHPStan\Command\AnalysisResult;
66
use PHPStan\Command\ErrorFormatter\ErrorFormatter;
77
use PHPStan\Command\Output;
8+
use ShipMonk\PHPStan\DeadCode\Enum\MemberType;
89
use ShipMonk\PHPStan\DeadCode\Graph\ClassMemberUsage;
910
use ShipMonk\PHPStan\DeadCode\Graph\UsageOrigin;
1011
use ShipMonk\PHPStan\DeadCode\Output\OutputEnhancer;
@@ -58,12 +59,13 @@ public function formatErrors(
5859
continue;
5960
}
6061

61-
/** @var array<string, array{file: string, excludedUsages: list<ClassMemberUsage>}> $metadata */
62+
/** @var array<string, array{file: string, type: MemberType::*, excludedUsages: list<ClassMemberUsage>}> $metadata */
6263
$metadata = $fileSpecificError->getMetadata();
63-
$type = $fileSpecificError->getIdentifier();
6464

6565
foreach ($metadata as $memberKey => $data) {
66-
$deadMembersByFiles[$data['file']][$type][$memberKey] = $data['excludedUsages'];
66+
$file = $data['file'];
67+
$type = $data['type'];
68+
$deadMembersByFiles[$file][$type][$memberKey] = $data['excludedUsages'];
6769
}
6870
}
6971

@@ -72,9 +74,9 @@ public function formatErrors(
7274

7375
foreach ($deadMembersByFiles as $file => $deadMembersByType) {
7476
/** @var array<string, list<ClassMemberUsage>> $deadConstants */
75-
$deadConstants = $deadMembersByType[DeadCodeRule::IDENTIFIER_CONSTANT] ?? [];
77+
$deadConstants = $deadMembersByType[MemberType::CONSTANT] ?? [];
7678
/** @var array<string, list<ClassMemberUsage>> $deadMethods */
77-
$deadMethods = $deadMembersByType[DeadCodeRule::IDENTIFIER_METHOD] ?? [];
79+
$deadMethods = $deadMembersByType[MemberType::METHOD] ?? [];
7880

7981
$membersCount += count($deadConstants) + count($deadMethods);
8082

src/Rule/DeadCodeRule.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -608,6 +608,7 @@ private function buildError(array $blackMembersGroup): IdentifierRuleError
608608
$metadata[$humanMemberString] = [
609609
'file' => $representative->getFile(),
610610
'line' => $representative->getLine(),
611+
'type' => $representative->getMember()->getMemberType(),
611612
'transitive' => false,
612613
'excludedUsages' => $excludedUsages,
613614
];
@@ -623,6 +624,7 @@ private function buildError(array $blackMembersGroup): IdentifierRuleError
623624
$metadata[$transitiveDeadMemberRef] = [
624625
'file' => $transitivelyDeadMember->getFile(),
625626
'line' => $transitivelyDeadMember->getLine(),
627+
'type' => $transitivelyDeadMember->getMember()->getMemberType(),
626628
'transitive' => true,
627629
'excludedUsages' => $excludedUsages,
628630
];

tests/Rule/DeadCodeRuleTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,7 @@ function (string $file, string $content): void {
395395

396396
$expectedOutputFile = $this->getAutoremoveOutputFilePath($file);
397397
self::assertFileExists($expectedOutputFile);
398-
self::assertSame(file_get_contents($expectedOutputFile), $this->trimFgColors($writtenOutput));
398+
self::assertSame(file_get_contents($expectedOutputFile), $this->trimFgColors($writtenOutput), "Output does not match expected: $expectedOutputFile");
399399
}
400400

401401
/**

tests/Rule/data/removing/sample.output.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@
22
• Removed constant Removal\Interface1::DEAD_IFACE_CONST2
33
• Removed constant Removal\Interface1::DEAD_IFACE_CONST3
44
• Removed constant Removal\Child2::DEAD_CONST
5+
• Removed constant Removal\Child2::TRANSITIVE_DEAD
56
• Removed method Removal\Interface1::foo
67
• Removed method Removal\Interface2::foo
78
• Removed method Removal\AbstractClass::foo
89
• Removed method Removal\Child1::foo
910
• Removed method Removal\Child2::mixedExcludedUsage
10-
! Excluded usage at data/removing/sample.php:48 left intact
11+
! Excluded usage at data/removing/sample.php:49 left intact
1112

12-
Removed 9 dead members in 1 file.
13+
Removed 10 dead members in 1 file.

tests/Rule/data/removing/sample.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,15 @@ public function foo(): void
3131
class Child2 extends AbstractClass
3232
{
3333
const USED_CONST = 1, DEAD_CONST = 2;
34+
const TRANSITIVE_DEAD = 3;
3435

3536
public function foo(): void
3637
{
3738
echo self::USED_CONST;
3839
}
3940

4041
public function mixedExcludedUsage(): void {
41-
42+
echo self::TRANSITIVE_DEAD;
4243
}
4344
}
4445

0 commit comments

Comments
 (0)