Skip to content

Commit aa9cc3f

Browse files
committed
Better fix
1 parent 45acbeb commit aa9cc3f

File tree

2 files changed

+5
-4
lines changed

2 files changed

+5
-4
lines changed

src/Type/Php/InArrayFunctionTypeSpecifyingExtension.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,8 @@ public function specifyTypes(FunctionReflection $functionReflection, FuncCall $n
111111
|| (
112112
$context->false()
113113
&& count($arrayValueType->getFiniteTypes()) > 0
114-
&& TypeCombinator::union(...$arrayValueType->getFiniteTypes())->equals($arrayValueType) // avoid edge-case of in_array(Enum, list<Enum>, true)
114+
&& count($needleType->getFiniteTypes()) > 0
115+
&& $arrayType->isIterableAtLeastOnce()->yes()
115116
)
116117
) {
117118
$specifiedTypes = $this->typeSpecifier->create(
@@ -134,7 +135,7 @@ public function specifyTypes(FunctionReflection $functionReflection, FuncCall $n
134135
$context->true()
135136
|| (
136137
$context->false()
137-
&& count($needleType->getFiniteTypes()) > 0
138+
&& count($needleType->getFiniteTypes()) === 1
138139
)
139140
) {
140141
if ($context->true()) {

tests/PHPStan/Analyser/data/enum-in-array.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ public function testNegative4(MyEnum $enum, array $array): void
9797
{
9898
if (!in_array($enum, $array, true)) {
9999
assertType('MyEnum', $enum);
100-
assertType('array<null>', $array);
100+
assertType('array<MyEnum|null>', $array);
101101
} else {
102102
assertType('MyEnum', $enum);
103103
assertType('non-empty-array<MyEnum|null>', $array);
@@ -117,7 +117,7 @@ public function testPositive(MyEnum $enum, array $list): void
117117
}
118118

119119
assertType(MyEnum::class, $enum);
120-
assertType('list<*NEVER*>&list<MyEnum>', $list);
120+
assertType('list<MyEnum>', $list);
121121
}
122122

123123
/** @param list<MyEnum> $list */

0 commit comments

Comments
 (0)