Skip to content

Commit 8e72e2b

Browse files
Rework
1 parent 24ef1dc commit 8e72e2b

File tree

3 files changed

+27
-7
lines changed

3 files changed

+27
-7
lines changed

src/Rules/Classes/EnumSanityRule.php

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,10 +149,20 @@ public function processNode(Node $node, Scope $scope): array
149149
$caseName = $stmt->name->name;
150150

151151
if ($enumNode->scalarType === null && $stmt->expr !== null) {
152+
$value = null;
153+
if (
154+
$stmt->expr instanceof Node\Scalar\Int_
155+
|| $stmt->expr instanceof Node\Scalar\String_
156+
|| $stmt->expr instanceof Node\Scalar\Float_
157+
) {
158+
$value = $stmt->expr->value;
159+
}
160+
152161
$errors[] = RuleErrorBuilder::message(sprintf(
153-
'Enum %s is not backed, but case %s has value.',
162+
'Enum %s is not backed, but case %s has value%s.',
154163
$classReflection->getDisplayName(),
155164
$caseName,
165+
$value !== null ? ' '.$value : '',
156166
))
157167
->identifier('enum.caseWithValue')
158168
->line($stmt->getStartLine())

tests/PHPStan/Rules/Classes/EnumSanityRuleTest.php

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ public function testRule(): void
9595
110,
9696
],
9797
[
98-
'Enum EnumSanity\EnumWithValueButNotBacked is not backed, but case FOO has value.',
98+
'Enum EnumSanity\EnumWithValueButNotBacked is not backed, but case FOO has value 1.',
9999
114,
100100
],
101101
[
@@ -146,24 +146,32 @@ public function testBug13768(): void
146146
{
147147
$this->analyse([__DIR__ . '/data/bug-13768.php'], [
148148
[
149-
'Enum Bug13768\Order is not backed, but case A has value.',
149+
'Enum Bug13768\Order is not backed, but case A has value 1.5.',
150150
7,
151151
],
152152
[
153-
'Enum Bug13768\Order is not backed, but case B has value.',
153+
'Enum Bug13768\Order is not backed, but case B has value 2.5.',
154154
8,
155155
],
156156
[
157-
'Enum Bug13768\Order is not backed, but case C has value.',
157+
'Enum Bug13768\Order is not backed, but case C has value 3.',
158158
9,
159159
],
160160
[
161-
'Enum Bug13768\Order is not backed, but case D has value.',
161+
'Enum Bug13768\Order is not backed, but case D has value 3.',
162162
10,
163163
],
164+
[
165+
'Enum Bug13768\Order is not backed, but case E has value.',
166+
11,
167+
],
168+
[
169+
'Enum Bug13768\Order is not backed, but case F has value.',
170+
12,
171+
],
164172
[
165173
'Enum Bug13768\Backed has duplicate value 1 for cases One, Two.',
166-
18,
174+
20,
167175
],
168176
]);
169177
}

tests/PHPStan/Rules/Classes/data/bug-13768.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ enum Order {
88
case B = 2.5;
99
case C = 3;
1010
case D = '3';
11+
case E = false;
12+
case F = Foo::A;
1113
}
1214

1315
class Foo

0 commit comments

Comments
 (0)