From b83331281126dc50796c6647db4002142607a89a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D0=BA=D1=81=D0=B8=D0=BC=20=D0=A1=D0=BF=D0=B8?= =?UTF-8?q?=D1=80=D0=BA=D0=BE=D0=B2?= Date: Thu, 27 Nov 2025 11:14:03 +0400 Subject: [PATCH 1/4] Add support for `non-empty-array` with generics --- src/TypeResolver.php | 3 +++ tests/unit/TypeResolverTest.php | 27 +++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/src/TypeResolver.php b/src/TypeResolver.php index 9e2ba205..fc50569a 100644 --- a/src/TypeResolver.php +++ b/src/TypeResolver.php @@ -392,6 +392,9 @@ private function createFromGeneric(GenericTypeNode $type, Context $context): Typ case 'array': return $this->createArray($type->genericTypes, $context); + case 'non-empty-array': + return new NonEmptyArray(...array_reverse($this->createTypesByTypeNodes($type->genericTypes, $context))); + case 'class-string': $subType = $this->createType($type->genericTypes[0], $context); if (!$subType instanceof Object_ || $subType->getFqsen() === null) { diff --git a/tests/unit/TypeResolverTest.php b/tests/unit/TypeResolverTest.php index a1da11e3..a79fd9f6 100644 --- a/tests/unit/TypeResolverTest.php +++ b/tests/unit/TypeResolverTest.php @@ -1081,6 +1081,29 @@ public function genericsProvider(): array ) ), ], + [ + 'non-empty-array', + new NonEmptyArray( + new Compound( + [ + new String_(), + new Integer(), + ] + ) + ), + ], + [ + 'non-empty-array', + new NonEmptyArray( + new Object_(new Fqsen('\\phpDocumentor\\Foo\\Bar')), + new Compound( + [ + new String_(), + new Integer(), + ] + ) + ), + ], [ 'Collection[]', new Array_( @@ -1107,6 +1130,10 @@ public function genericsProvider(): array 'List', new List_(new Object_(new Fqsen('\\phpDocumentor\\Foo'))), ], + [ + 'non-empty-list', + new NonEmptyList(new Object_(new Fqsen('\\phpDocumentor\\Foo'))), + ], [ 'int<1, 100>', new IntegerRange('1', '100'), From 381c4a90659c43b0fd11cbe967114e64f6518a95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D0=BA=D1=81=D0=B8=D0=BC=20=D0=A1=D0=BF=D0=B8?= =?UTF-8?q?=D1=80=D0=BA=D0=BE=D0=B2?= Date: Thu, 27 Nov 2025 11:17:24 +0400 Subject: [PATCH 2/4] fix cs --- src/TypeResolver.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/TypeResolver.php b/src/TypeResolver.php index fc50569a..0c4232f1 100644 --- a/src/TypeResolver.php +++ b/src/TypeResolver.php @@ -393,7 +393,9 @@ private function createFromGeneric(GenericTypeNode $type, Context $context): Typ return $this->createArray($type->genericTypes, $context); case 'non-empty-array': - return new NonEmptyArray(...array_reverse($this->createTypesByTypeNodes($type->genericTypes, $context))); + return new NonEmptyArray( + ...array_reverse($this->createTypesByTypeNodes($type->genericTypes, $context)) + ); case 'class-string': $subType = $this->createType($type->genericTypes[0], $context); From bade201bf045b6a28cff90d32d876635d5ea101b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D0=BA=D1=81=D0=B8=D0=BC=20=D0=A1=D0=BF=D0=B8?= =?UTF-8?q?=D1=80=D0=BA=D0=BE=D0=B2?= Date: Thu, 27 Nov 2025 11:20:07 +0400 Subject: [PATCH 3/4] try fix cs --- src/TypeResolver.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/TypeResolver.php b/src/TypeResolver.php index 0c4232f1..21a3d0a6 100644 --- a/src/TypeResolver.php +++ b/src/TypeResolver.php @@ -393,9 +393,8 @@ private function createFromGeneric(GenericTypeNode $type, Context $context): Typ return $this->createArray($type->genericTypes, $context); case 'non-empty-array': - return new NonEmptyArray( - ...array_reverse($this->createTypesByTypeNodes($type->genericTypes, $context)) - ); + $genericTypes = array_reverse($this->createTypesByTypeNodes($type->genericTypes, $context)); + return new NonEmptyArray(...$genericTypes); case 'class-string': $subType = $this->createType($type->genericTypes[0], $context); From 62fd36c9941afd0c88281c226750c306de03bf6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D0=BA=D1=81=D0=B8=D0=BC=20=D0=A1=D0=BF=D0=B8?= =?UTF-8?q?=D1=80=D0=BA=D0=BE=D0=B2?= Date: Thu, 27 Nov 2025 11:21:06 +0400 Subject: [PATCH 4/4] fix cs --- src/TypeResolver.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/TypeResolver.php b/src/TypeResolver.php index 21a3d0a6..de20a1dd 100644 --- a/src/TypeResolver.php +++ b/src/TypeResolver.php @@ -394,6 +394,7 @@ private function createFromGeneric(GenericTypeNode $type, Context $context): Typ case 'non-empty-array': $genericTypes = array_reverse($this->createTypesByTypeNodes($type->genericTypes, $context)); + return new NonEmptyArray(...$genericTypes); case 'class-string':