Skip to content

Commit c586014

Browse files
committed
MixedType::toArrayKey() returns BenevolentUnionType
1 parent 48f8990 commit c586014

9 files changed

+25
-25
lines changed

Diff for: src/Type/MixedType.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -600,7 +600,7 @@ public function toArray(): Type
600600

601601
public function toArrayKey(): Type
602602
{
603-
return new UnionType([new IntegerType(), new StringType()]);
603+
return new BenevolentUnionType([new IntegerType(), new StringType()]);
604604
}
605605

606606
public function isIterable(): TrinaryLogic

Diff for: tests/PHPStan/Analyser/LegacyNodeScopeResolverTest.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -3328,7 +3328,7 @@ public function dataLiteralArraysKeys(): array
33283328
"'BooleansArray'",
33293329
],
33303330
[
3331-
'int|string',
3331+
'(int|string)',
33323332
"'UnknownConstantArray'",
33333333
],
33343334
];
@@ -9147,7 +9147,7 @@ public function dataGeneralizeScope(): array
91479147
{
91489148
return [
91499149
[
9150-
'array<string, non-empty-array<int|string, array{saveCount: int<0, max>, removeCount: int<0, max>, loadCount: int<0, max>, hitCount: int<0, max>}>>',
9150+
'array<string, non-empty-array<array{saveCount: int<0, max>, removeCount: int<0, max>, loadCount: int<0, max>, hitCount: int<0, max>}>>',
91519151
'$statistics',
91529152
],
91539153
];

Diff for: tests/PHPStan/Analyser/nsrt/array-column-php82.php

+6-6
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,8 @@ public function testImprecise5(array $array): void
177177
assertType('array<string, DOMElement>', array_column($array, null, 'tagName'));
178178
assertType('list<mixed>', array_column($array, 'foo'));
179179
assertType('array<string, mixed>', array_column($array, 'foo', 'tagName'));
180-
assertType('array<int|string, string>', array_column($array, 'nodeName', 'foo'));
181-
assertType('array<int|string, DOMElement>', array_column($array, null, 'foo'));
180+
assertType('array<string>', array_column($array, 'nodeName', 'foo'));
181+
assertType('array<DOMElement>', array_column($array, null, 'foo'));
182182
}
183183

184184
/** @param non-empty-array<int, DOMElement> $array */
@@ -189,8 +189,8 @@ public function testObjects1(array $array): void
189189
assertType('non-empty-array<string, DOMElement>', array_column($array, null, 'tagName'));
190190
assertType('list<mixed>', array_column($array, 'foo'));
191191
assertType('array<string, mixed>', array_column($array, 'foo', 'tagName'));
192-
assertType('non-empty-array<int|string, string>', array_column($array, 'nodeName', 'foo'));
193-
assertType('non-empty-array<int|string, DOMElement>', array_column($array, null, 'foo'));
192+
assertType('non-empty-array<string>', array_column($array, 'nodeName', 'foo'));
193+
assertType('non-empty-array<DOMElement>', array_column($array, null, 'foo'));
194194
}
195195

196196
/** @param array{DOMElement} $array */
@@ -201,8 +201,8 @@ public function testObjects2(array $array): void
201201
assertType('non-empty-array<string, DOMElement>', array_column($array, null, 'tagName'));
202202
assertType('list<mixed>', array_column($array, 'foo'));
203203
assertType('array<string, mixed>', array_column($array, 'foo', 'tagName'));
204-
assertType('non-empty-array<int|string, string>', array_column($array, 'nodeName', 'foo'));
205-
assertType('non-empty-array<int|string, DOMElement>', array_column($array, null, 'foo'));
204+
assertType('non-empty-array<string>', array_column($array, 'nodeName', 'foo'));
205+
assertType('non-empty-array<DOMElement>', array_column($array, null, 'foo'));
206206
}
207207

208208
}

Diff for: tests/PHPStan/Analyser/nsrt/array-column.php

+7-7
Original file line numberDiff line numberDiff line change
@@ -191,8 +191,8 @@ public function testImprecise5(array $array): void
191191
assertType('array<string, DOMElement>', array_column($array, null, 'tagName'));
192192
assertType('list<mixed>', array_column($array, 'foo'));
193193
assertType('array<string, mixed>', array_column($array, 'foo', 'tagName'));
194-
assertType('array<int|string, string>', array_column($array, 'nodeName', 'foo'));
195-
assertType('array<int|string, DOMElement>', array_column($array, null, 'foo'));
194+
assertType('array<string>', array_column($array, 'nodeName', 'foo'));
195+
assertType('array<DOMElement>', array_column($array, null, 'foo'));
196196
}
197197

198198
/** @param non-empty-array<int, DOMElement> $array */
@@ -203,8 +203,8 @@ public function testObjects1(array $array): void
203203
assertType('non-empty-array<string, DOMElement>', array_column($array, null, 'tagName'));
204204
assertType('list<mixed>', array_column($array, 'foo'));
205205
assertType('array<string, mixed>', array_column($array, 'foo', 'tagName'));
206-
assertType('non-empty-array<int|string, string>', array_column($array, 'nodeName', 'foo'));
207-
assertType('non-empty-array<int|string, DOMElement>', array_column($array, null, 'foo'));
206+
assertType('non-empty-array<string>', array_column($array, 'nodeName', 'foo'));
207+
assertType('non-empty-array<DOMElement>', array_column($array, null, 'foo'));
208208
}
209209

210210
/** @param array{DOMElement} $array */
@@ -215,8 +215,8 @@ public function testObjects2(array $array): void
215215
assertType('non-empty-array<string, DOMElement>', array_column($array, null, 'tagName'));
216216
assertType('list<mixed>', array_column($array, 'foo'));
217217
assertType('array<string, mixed>', array_column($array, 'foo', 'tagName'));
218-
assertType('non-empty-array<int|string, string>', array_column($array, 'nodeName', 'foo'));
219-
assertType('non-empty-array<int|string, DOMElement>', array_column($array, null, 'foo'));
218+
assertType('non-empty-array<string>', array_column($array, 'nodeName', 'foo'));
219+
assertType('non-empty-array<DOMElement>', array_column($array, null, 'foo'));
220220
}
221221

222222
}
@@ -228,7 +228,7 @@ final class Foo
228228
public function doFoo(array $a): void
229229
{
230230
assertType('list<mixed>', array_column($a, 'nodeName'));
231-
assertType('array<int|string, mixed>', array_column($a, 'nodeName', 'tagName'));
231+
assertType('array', array_column($a, 'nodeName', 'tagName'));
232232
}
233233

234234
}

Diff for: tests/PHPStan/Analyser/nsrt/array-flip-php7.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
function mixedAndSubtractedArray($mixed)
88
{
99
if (is_array($mixed)) {
10-
assertType('array<int|string, (int|string)>', array_flip($mixed));
10+
assertType('array<(int|string)>', array_flip($mixed));
1111
} else {
1212
assertType('mixed~array', $mixed);
1313
assertType('null', array_flip($mixed));

Diff for: tests/PHPStan/Analyser/nsrt/array-flip-php8.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
function mixedAndSubtractedArray($mixed)
88
{
99
if (is_array($mixed)) {
10-
assertType('array<int|string, (int|string)>', array_flip($mixed));
10+
assertType('array<(int|string)>', array_flip($mixed));
1111
} else {
1212
assertType('mixed~array', $mixed);
1313
assertType('*NEVER*', array_flip($mixed));

Diff for: tests/PHPStan/Analyser/nsrt/array-flip.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ function foo3($list)
2020
{
2121
$flip = array_flip($list);
2222

23-
assertType('array<int|string, (int|string)>', $flip);
23+
assertType('array<(int|string)>', $flip);
2424
}
2525

2626
/**

Diff for: tests/PHPStan/Analyser/nsrt/non-empty-array.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public function arrayFunctions($array, $list, $stringArray): void
5454
assertType('non-empty-array', array_replace($array, []));
5555
assertType('non-empty-array', array_replace($array, $array));
5656

57-
assertType('non-empty-array<int|string, (int|string)>', array_flip($array));
57+
assertType('non-empty-array<(int|string)>', array_flip($array));
5858
assertType('non-empty-array<string, (int|string)>', array_flip($stringArray));
5959
}
6060
}

Diff for: tests/PHPStan/Rules/Arrays/data/slevomat-foreach-array-key-exists-bug.php

+5-5
Original file line numberDiff line numberDiff line change
@@ -15,26 +15,26 @@ public function doFoo(array $percentageIntervals, array $changes): void
1515
if ($percentageInterval->isInInterval((float) $changeInPercents)) {
1616
$key = $percentageInterval->getFormatted();
1717
if (array_key_exists($key, $intervalResults)) {
18-
assertType('array<int|string, array{itemsCount: mixed, interval: mixed}>', $intervalResults);
18+
assertType('array<array{itemsCount: mixed, interval: mixed}>', $intervalResults);
1919
assertType('array{itemsCount: mixed, interval: mixed}', $intervalResults[$key]);
2020
$intervalResults[$key]['itemsCount'] += $itemsCount;
21-
assertType('non-empty-array<int|string, array{itemsCount: (array|float|int), interval: mixed}>', $intervalResults);
21+
assertType('non-empty-array<array{itemsCount: (array|float|int), interval: mixed}>', $intervalResults);
2222
assertType('array{itemsCount: (array|float|int), interval: mixed}', $intervalResults[$key]);
2323
} else {
24-
assertType('array<int|string, array{itemsCount: mixed, interval: mixed}>', $intervalResults);
24+
assertType('array<array{itemsCount: mixed, interval: mixed}>', $intervalResults);
2525
assertType('array{itemsCount: mixed, interval: mixed}', $intervalResults[$key]);
2626
$intervalResults[$key] = [
2727
'itemsCount' => $itemsCount,
2828
'interval' => $percentageInterval,
2929
];
30-
assertType('non-empty-array<int|string, array{itemsCount: mixed, interval: mixed}>', $intervalResults);
30+
assertType('non-empty-array<array{itemsCount: mixed, interval: mixed}>', $intervalResults);
3131
assertType('array{itemsCount: mixed, interval: mixed}', $intervalResults[$key]);
3232
}
3333
}
3434
}
3535
}
3636

37-
assertType('array<int|string, array{itemsCount: mixed, interval: mixed}>', $intervalResults);
37+
assertType('array<array{itemsCount: mixed, interval: mixed}>', $intervalResults);
3838
foreach ($intervalResults as $data) {
3939
echo $data['interval'];
4040
}

0 commit comments

Comments
 (0)