diff --git a/src/PseudoTypes/ClosedResource.php b/src/PseudoTypes/ClosedResource.php new file mode 100644 index 0000000..bb7dce1 --- /dev/null +++ b/src/PseudoTypes/ClosedResource.php @@ -0,0 +1,36 @@ + ArrayKey::class, 'non-empty-array' => NonEmptyArray::class, 'resource' => Resource_::class, + 'open-resource' => OpenResource::class, + 'closed-resource' => ClosedResource::class, 'void' => Void_::class, 'null' => Null_::class, 'scalar' => Scalar::class, diff --git a/src/Types/Resource_.php b/src/Types/Resource_.php index 1998ee0..46ad777 100644 --- a/src/Types/Resource_.php +++ b/src/Types/Resource_.php @@ -20,7 +20,7 @@ * * @psalm-immutable */ -final class Resource_ implements Type +class Resource_ implements Type { /** * Returns a rendered output of the Type as it would be used in a DocBlock. diff --git a/tests/unit/PseudoTypes/ClosedResourceTest.php b/tests/unit/PseudoTypes/ClosedResourceTest.php new file mode 100644 index 0000000..d9c435f --- /dev/null +++ b/tests/unit/PseudoTypes/ClosedResourceTest.php @@ -0,0 +1,32 @@ +assertEquals(new Resource_(), $type->underlyingType()); + } + + public function testToString(): void + { + $this->assertSame('closed-resource', (string) (new ClosedResource())); + } +} diff --git a/tests/unit/PseudoTypes/OpenResourceTest.php b/tests/unit/PseudoTypes/OpenResourceTest.php new file mode 100644 index 0000000..e73195d --- /dev/null +++ b/tests/unit/PseudoTypes/OpenResourceTest.php @@ -0,0 +1,32 @@ +assertEquals(new Resource_(), $type->underlyingType()); + } + + public function testToString(): void + { + $this->assertSame('open-resource', (string) (new OpenResource())); + } +} diff --git a/tests/unit/TypeResolverTest.php b/tests/unit/TypeResolverTest.php index 04c92c0..8576cf7 100644 --- a/tests/unit/TypeResolverTest.php +++ b/tests/unit/TypeResolverTest.php @@ -20,6 +20,7 @@ use phpDocumentor\Reflection\PseudoTypes\ArrayShapeItem; use phpDocumentor\Reflection\PseudoTypes\CallableString; use phpDocumentor\Reflection\PseudoTypes\ClassString; +use phpDocumentor\Reflection\PseudoTypes\ClosedResource; use phpDocumentor\Reflection\PseudoTypes\Conditional; use phpDocumentor\Reflection\PseudoTypes\ConditionalForParameter; use phpDocumentor\Reflection\PseudoTypes\ConstExpression; @@ -56,6 +57,7 @@ use phpDocumentor\Reflection\PseudoTypes\ObjectShape; use phpDocumentor\Reflection\PseudoTypes\ObjectShapeItem; use phpDocumentor\Reflection\PseudoTypes\OffsetAccess; +use phpDocumentor\Reflection\PseudoTypes\OpenResource; use phpDocumentor\Reflection\PseudoTypes\PositiveInteger; use phpDocumentor\Reflection\PseudoTypes\PrivatePropertiesOf; use phpDocumentor\Reflection\PseudoTypes\PropertiesOf; @@ -663,6 +665,8 @@ public function provideKeywords(): array ['false', Boolean::class], ['false', False_::class], ['resource', Resource_::class], + ['open-resource', OpenResource::class], + ['closed-resource', ClosedResource::class], ['null', Null_::class], ['callable', Callable_::class], ['callable-string', CallableString::class],