Skip to content

Commit b3cd815

Browse files
committed
Merge remote-tracking branch 'origin/1.12.x' into 2.0.x
2 parents 2de40d1 + 107a7e3 commit b3cd815

File tree

3 files changed

+22
-6
lines changed

3 files changed

+22
-6
lines changed

Diff for: composer.lock

+5-5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: src/PhpDoc/TypeNodeResolver.php

+11-1
Original file line numberDiff line numberDiff line change
@@ -1015,10 +1015,20 @@ private function resolveArrayShapeNode(ArrayShapeNode $typeNode, NameScope $name
10151015
}
10161016

10171017
$arrayType = $builder->getArray();
1018-
if ($typeNode->kind === ArrayShapeNode::KIND_LIST) {
1018+
if (in_array($typeNode->kind, [
1019+
ArrayShapeNode::KIND_LIST,
1020+
ArrayShapeNode::KIND_NON_EMPTY_LIST,
1021+
], true)) {
10191022
$arrayType = TypeCombinator::intersect($arrayType, new AccessoryArrayListType());
10201023
}
10211024

1025+
if (in_array($typeNode->kind, [
1026+
ArrayShapeNode::KIND_NON_EMPTY_ARRAY,
1027+
ArrayShapeNode::KIND_NON_EMPTY_LIST,
1028+
], true)) {
1029+
$arrayType = TypeCombinator::intersect($arrayType, new NonEmptyArrayType());
1030+
}
1031+
10221032
return $arrayType;
10231033
}
10241034

Diff for: tests/PHPStan/Analyser/nsrt/array-shape-list-optional.php

+6
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,22 @@ class Foo
99

1010
/**
1111
* @param list{0: string, 1: int, 2?: string, 3?: string} $valid1
12+
* @param non-empty-list{0: string, 1: int, 2?: string, 3?: string} $valid2
13+
* @param non-empty-array{0?: string, 1?: int, 2?: string, 3?: string} $valid3
1214
* @param list{0: string, 1: int, 2?: string, 4?: string} $invalid1
1315
* @param list{0: string, 1: int, 2?: string, foo?: string} $invalid2
1416
*/
1517
public function doFoo(
1618
$valid1,
19+
$valid2,
20+
$valid3,
1721
$invalid1,
1822
$invalid2
1923
): void
2024
{
2125
assertType('array{0: string, 1: int, 2?: string, 3?: string}&list', $valid1);
26+
assertType('array{0: string, 1: int, 2?: string, 3?: string}&list', $valid2);
27+
assertType('array{0?: string, 1?: int, 2?: string, 3?: string}&non-empty-array', $valid3);
2228
assertType('*NEVER*', $invalid1);
2329
assertType('*NEVER*', $invalid2);
2430
}

0 commit comments

Comments
 (0)