Skip to content

Commit bc91225

Browse files
authored
Merge pull request #275 from mspirkov/add-resource-pseudo-types
Add support for `open-resource` and `closed-resource`
2 parents fcadea7 + a668e9a commit bc91225

File tree

7 files changed

+145
-1
lines changed

7 files changed

+145
-1
lines changed

src/PseudoTypes/ClosedResource.php

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
/**
6+
* This file is part of phpDocumentor.
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*
11+
* @link http://phpdoc.org
12+
*/
13+
14+
namespace phpDocumentor\Reflection\PseudoTypes;
15+
16+
use phpDocumentor\Reflection\PseudoType;
17+
use phpDocumentor\Reflection\Type;
18+
use phpDocumentor\Reflection\Types\Resource_;
19+
20+
/**
21+
* Value Object representing the type 'closed-resource'.
22+
*
23+
* @psalm-immutable
24+
*/
25+
final class ClosedResource extends Resource_ implements PseudoType
26+
{
27+
public function underlyingType(): Type
28+
{
29+
return new Resource_();
30+
}
31+
32+
public function __toString(): string
33+
{
34+
return 'closed-resource';
35+
}
36+
}

src/PseudoTypes/OpenResource.php

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
/**
6+
* This file is part of phpDocumentor.
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*
11+
* @link http://phpdoc.org
12+
*/
13+
14+
namespace phpDocumentor\Reflection\PseudoTypes;
15+
16+
use phpDocumentor\Reflection\PseudoType;
17+
use phpDocumentor\Reflection\Type;
18+
use phpDocumentor\Reflection\Types\Resource_;
19+
20+
/**
21+
* Value Object representing the type 'open-resource'.
22+
*
23+
* @psalm-immutable
24+
*/
25+
final class OpenResource extends Resource_ implements PseudoType
26+
{
27+
public function underlyingType(): Type
28+
{
29+
return new Resource_();
30+
}
31+
32+
public function __toString(): string
33+
{
34+
return 'open-resource';
35+
}
36+
}

src/TypeResolver.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
use phpDocumentor\Reflection\PseudoTypes\ArrayShapeItem;
2121
use phpDocumentor\Reflection\PseudoTypes\CallableString;
2222
use phpDocumentor\Reflection\PseudoTypes\ClassString;
23+
use phpDocumentor\Reflection\PseudoTypes\ClosedResource;
2324
use phpDocumentor\Reflection\PseudoTypes\Conditional;
2425
use phpDocumentor\Reflection\PseudoTypes\ConditionalForParameter;
2526
use phpDocumentor\Reflection\PseudoTypes\ConstExpression;
@@ -56,6 +57,7 @@
5657
use phpDocumentor\Reflection\PseudoTypes\ObjectShape;
5758
use phpDocumentor\Reflection\PseudoTypes\ObjectShapeItem;
5859
use phpDocumentor\Reflection\PseudoTypes\OffsetAccess;
60+
use phpDocumentor\Reflection\PseudoTypes\OpenResource;
5961
use phpDocumentor\Reflection\PseudoTypes\PositiveInteger;
6062
use phpDocumentor\Reflection\PseudoTypes\PrivatePropertiesOf;
6163
use phpDocumentor\Reflection\PseudoTypes\PropertiesOf;
@@ -170,6 +172,8 @@ final class TypeResolver
170172
'array-key' => ArrayKey::class,
171173
'non-empty-array' => NonEmptyArray::class,
172174
'resource' => Resource_::class,
175+
'open-resource' => OpenResource::class,
176+
'closed-resource' => ClosedResource::class,
173177
'void' => Void_::class,
174178
'null' => Null_::class,
175179
'scalar' => Scalar::class,

src/Types/Resource_.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
*
2121
* @psalm-immutable
2222
*/
23-
final class Resource_ implements Type
23+
class Resource_ implements Type
2424
{
2525
/**
2626
* Returns a rendered output of the Type as it would be used in a DocBlock.
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
/**
6+
* This file is part of phpDocumentor.
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*
11+
* @link http://phpdoc.org
12+
*/
13+
14+
namespace phpDocumentor\Reflection\PseudoTypes;
15+
16+
use phpDocumentor\Reflection\Types\Resource_;
17+
use PHPUnit\Framework\TestCase;
18+
19+
final class ClosedResourceTest extends TestCase
20+
{
21+
public function testCreate(): void
22+
{
23+
$type = new ClosedResource();
24+
25+
$this->assertEquals(new Resource_(), $type->underlyingType());
26+
}
27+
28+
public function testToString(): void
29+
{
30+
$this->assertSame('closed-resource', (string) (new ClosedResource()));
31+
}
32+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
/**
6+
* This file is part of phpDocumentor.
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*
11+
* @link http://phpdoc.org
12+
*/
13+
14+
namespace phpDocumentor\Reflection\PseudoTypes;
15+
16+
use phpDocumentor\Reflection\Types\Resource_;
17+
use PHPUnit\Framework\TestCase;
18+
19+
final class OpenResourceTest extends TestCase
20+
{
21+
public function testCreate(): void
22+
{
23+
$type = new OpenResource();
24+
25+
$this->assertEquals(new Resource_(), $type->underlyingType());
26+
}
27+
28+
public function testToString(): void
29+
{
30+
$this->assertSame('open-resource', (string) (new OpenResource()));
31+
}
32+
}

tests/unit/TypeResolverTest.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
use phpDocumentor\Reflection\PseudoTypes\ArrayShapeItem;
2121
use phpDocumentor\Reflection\PseudoTypes\CallableString;
2222
use phpDocumentor\Reflection\PseudoTypes\ClassString;
23+
use phpDocumentor\Reflection\PseudoTypes\ClosedResource;
2324
use phpDocumentor\Reflection\PseudoTypes\Conditional;
2425
use phpDocumentor\Reflection\PseudoTypes\ConditionalForParameter;
2526
use phpDocumentor\Reflection\PseudoTypes\ConstExpression;
@@ -56,6 +57,7 @@
5657
use phpDocumentor\Reflection\PseudoTypes\ObjectShape;
5758
use phpDocumentor\Reflection\PseudoTypes\ObjectShapeItem;
5859
use phpDocumentor\Reflection\PseudoTypes\OffsetAccess;
60+
use phpDocumentor\Reflection\PseudoTypes\OpenResource;
5961
use phpDocumentor\Reflection\PseudoTypes\PositiveInteger;
6062
use phpDocumentor\Reflection\PseudoTypes\PrivatePropertiesOf;
6163
use phpDocumentor\Reflection\PseudoTypes\PropertiesOf;
@@ -663,6 +665,8 @@ public function provideKeywords(): array
663665
['false', Boolean::class],
664666
['false', False_::class],
665667
['resource', Resource_::class],
668+
['open-resource', OpenResource::class],
669+
['closed-resource', ClosedResource::class],
666670
['null', Null_::class],
667671
['callable', Callable_::class],
668672
['callable-string', CallableString::class],

0 commit comments

Comments
 (0)