From fe31d6031197ed36b1ac4564740edf1ddace9602 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: Fri, 12 Dec 2025 13:49:52 +0400 Subject: [PATCH 1/3] Add support for `never-return` --- src/PseudoTypes/NeverReturn.php | 36 ++++++++++++++++++++++ src/TypeResolver.php | 2 ++ src/Types/Never_.php | 2 +- tests/unit/PseudoTypes/NeverReturnTest.php | 32 +++++++++++++++++++ tests/unit/TypeResolverTest.php | 2 ++ 5 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 src/PseudoTypes/NeverReturn.php create mode 100644 tests/unit/PseudoTypes/NeverReturnTest.php diff --git a/src/PseudoTypes/NeverReturn.php b/src/PseudoTypes/NeverReturn.php new file mode 100644 index 00000000..b2e87f7d --- /dev/null +++ b/src/PseudoTypes/NeverReturn.php @@ -0,0 +1,36 @@ + Parent_::class, 'iterable' => Iterable_::class, 'never' => Never_::class, + 'never-return' => NeverReturn::class, 'list' => List_::class, 'non-empty-list' => NonEmptyList::class, 'non-falsy-string' => NonFalsyString::class, diff --git a/src/Types/Never_.php b/src/Types/Never_.php index 40a99c9a..fefc0a4b 100644 --- a/src/Types/Never_.php +++ b/src/Types/Never_.php @@ -23,7 +23,7 @@ * * @psalm-immutable */ -final class Never_ implements Type +class Never_ implements Type { /** * Returns a rendered output of the Type as it would be used in a DocBlock. diff --git a/tests/unit/PseudoTypes/NeverReturnTest.php b/tests/unit/PseudoTypes/NeverReturnTest.php new file mode 100644 index 00000000..76b44327 --- /dev/null +++ b/tests/unit/PseudoTypes/NeverReturnTest.php @@ -0,0 +1,32 @@ +assertEquals(new Never_(), $type->underlyingType()); + } + + public function testToString(): void + { + $this->assertSame('never-return', (string) (new NeverReturn())); + } +} diff --git a/tests/unit/TypeResolverTest.php b/tests/unit/TypeResolverTest.php index 287688fe..4eb36224 100644 --- a/tests/unit/TypeResolverTest.php +++ b/tests/unit/TypeResolverTest.php @@ -40,6 +40,7 @@ use phpDocumentor\Reflection\PseudoTypes\LiteralString; use phpDocumentor\Reflection\PseudoTypes\LowercaseString; use phpDocumentor\Reflection\PseudoTypes\NegativeInteger; +use phpDocumentor\Reflection\PseudoTypes\NeverReturn; use phpDocumentor\Reflection\PseudoTypes\NonEmptyArray; use phpDocumentor\Reflection\PseudoTypes\NonEmptyList; use phpDocumentor\Reflection\PseudoTypes\NonEmptyLowercaseString; @@ -676,6 +677,7 @@ public function provideKeywords(): array ['parent', Parent_::class], ['iterable', Iterable_::class], ['never', Never_::class], + ['never-return', NeverReturn::class], ['literal-string', LiteralString::class], ['list', List_::class], ['non-empty-list', NonEmptyList::class], From b6df368701ad7792aaeb0ccd10028fb0717bcea4 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: Fri, 12 Dec 2025 13:52:17 +0400 Subject: [PATCH 2/3] Add support for `never-returns` --- src/PseudoTypes/NeverReturns.php | 36 +++++++++++++++++++++ src/TypeResolver.php | 2 ++ tests/unit/PseudoTypes/NeverReturnsTest.php | 32 ++++++++++++++++++ tests/unit/TypeResolverTest.php | 2 ++ 4 files changed, 72 insertions(+) create mode 100644 src/PseudoTypes/NeverReturns.php create mode 100644 tests/unit/PseudoTypes/NeverReturnsTest.php diff --git a/src/PseudoTypes/NeverReturns.php b/src/PseudoTypes/NeverReturns.php new file mode 100644 index 00000000..4c2a1a55 --- /dev/null +++ b/src/PseudoTypes/NeverReturns.php @@ -0,0 +1,36 @@ + Iterable_::class, 'never' => Never_::class, 'never-return' => NeverReturn::class, + 'never-returns' => NeverReturns::class, 'list' => List_::class, 'non-empty-list' => NonEmptyList::class, 'non-falsy-string' => NonFalsyString::class, diff --git a/tests/unit/PseudoTypes/NeverReturnsTest.php b/tests/unit/PseudoTypes/NeverReturnsTest.php new file mode 100644 index 00000000..56160b7b --- /dev/null +++ b/tests/unit/PseudoTypes/NeverReturnsTest.php @@ -0,0 +1,32 @@ +assertEquals(new Never_(), $type->underlyingType()); + } + + public function testToString(): void + { + $this->assertSame('never-returns', (string) (new NeverReturns())); + } +} diff --git a/tests/unit/TypeResolverTest.php b/tests/unit/TypeResolverTest.php index 4eb36224..ef46a84e 100644 --- a/tests/unit/TypeResolverTest.php +++ b/tests/unit/TypeResolverTest.php @@ -41,6 +41,7 @@ use phpDocumentor\Reflection\PseudoTypes\LowercaseString; use phpDocumentor\Reflection\PseudoTypes\NegativeInteger; use phpDocumentor\Reflection\PseudoTypes\NeverReturn; +use phpDocumentor\Reflection\PseudoTypes\NeverReturns; use phpDocumentor\Reflection\PseudoTypes\NonEmptyArray; use phpDocumentor\Reflection\PseudoTypes\NonEmptyList; use phpDocumentor\Reflection\PseudoTypes\NonEmptyLowercaseString; @@ -678,6 +679,7 @@ public function provideKeywords(): array ['iterable', Iterable_::class], ['never', Never_::class], ['never-return', NeverReturn::class], + ['never-returns', NeverReturns::class], ['literal-string', LiteralString::class], ['list', List_::class], ['non-empty-list', NonEmptyList::class], From a9a0d21c2585d3a8ae6f7c2254283c88e2656fc8 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: Fri, 12 Dec 2025 13:54:51 +0400 Subject: [PATCH 3/3] Add support for `no-return` --- src/PseudoTypes/NoReturn.php | 36 +++++++++++++++++++++++++ src/TypeResolver.php | 2 ++ tests/unit/PseudoTypes/NoReturnTest.php | 32 ++++++++++++++++++++++ tests/unit/TypeResolverTest.php | 2 ++ 4 files changed, 72 insertions(+) create mode 100644 src/PseudoTypes/NoReturn.php create mode 100644 tests/unit/PseudoTypes/NoReturnTest.php diff --git a/src/PseudoTypes/NoReturn.php b/src/PseudoTypes/NoReturn.php new file mode 100644 index 00000000..b05d9bd3 --- /dev/null +++ b/src/PseudoTypes/NoReturn.php @@ -0,0 +1,36 @@ + Never_::class, 'never-return' => NeverReturn::class, 'never-returns' => NeverReturns::class, + 'no-return' => NoReturn::class, 'list' => List_::class, 'non-empty-list' => NonEmptyList::class, 'non-falsy-string' => NonFalsyString::class, diff --git a/tests/unit/PseudoTypes/NoReturnTest.php b/tests/unit/PseudoTypes/NoReturnTest.php new file mode 100644 index 00000000..81b4c56e --- /dev/null +++ b/tests/unit/PseudoTypes/NoReturnTest.php @@ -0,0 +1,32 @@ +assertEquals(new Never_(), $type->underlyingType()); + } + + public function testToString(): void + { + $this->assertSame('no-return', (string) (new NoReturn())); + } +} diff --git a/tests/unit/TypeResolverTest.php b/tests/unit/TypeResolverTest.php index ef46a84e..04c92c09 100644 --- a/tests/unit/TypeResolverTest.php +++ b/tests/unit/TypeResolverTest.php @@ -50,6 +50,7 @@ use phpDocumentor\Reflection\PseudoTypes\NonNegativeInteger; use phpDocumentor\Reflection\PseudoTypes\NonPositiveInteger; use phpDocumentor\Reflection\PseudoTypes\NonZeroInteger; +use phpDocumentor\Reflection\PseudoTypes\NoReturn; use phpDocumentor\Reflection\PseudoTypes\Numeric_; use phpDocumentor\Reflection\PseudoTypes\NumericString; use phpDocumentor\Reflection\PseudoTypes\ObjectShape; @@ -680,6 +681,7 @@ public function provideKeywords(): array ['never', Never_::class], ['never-return', NeverReturn::class], ['never-returns', NeverReturns::class], + ['no-return', NoReturn::class], ['literal-string', LiteralString::class], ['list', List_::class], ['non-empty-list', NonEmptyList::class],