Skip to content

Commit 5eb8099

Browse files
committed
fixup! Improved support for enum-string types
1 parent 4901208 commit 5eb8099

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

src/PhpDoc/TypeNodeResolver.php

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@
107107
use PHPStan\Type\ValueOfType;
108108
use PHPStan\Type\VoidType;
109109
use Traversable;
110+
use UnitEnum;
110111
use function array_key_exists;
111112
use function array_map;
112113
use function array_values;
@@ -238,7 +239,7 @@ private function resolveIdentifierTypeNode(IdentifierTypeNode $typeNode, NameSco
238239
return new ClassStringType();
239240

240241
case 'enum-string':
241-
return new GenericClassStringType(new ObjectType('UnitEnum'));
242+
return new GenericClassStringType(new ObjectType(UnitEnum::class));
242243

243244
case 'callable-string':
244245
return new IntersectionType([new StringType(), new CallableType()]);
@@ -698,14 +699,23 @@ static function (string $variance): TemplateTypeVariance {
698699
if (count($genericTypes) === 2) { // iterable<KeyType, ValueType>
699700
return new IterableType($genericTypes[0], $genericTypes[1]);
700701
}
701-
} elseif (in_array($mainTypeName, ['class-string', 'interface-string', 'enum-string'], true)) {
702+
} elseif (in_array($mainTypeName, ['class-string', 'interface-string'], true)) {
702703
if (count($genericTypes) === 1) {
703704
$genericType = $genericTypes[0];
704705
if ($genericType->isObject()->yes() || $genericType instanceof MixedType) {
705706
return new GenericClassStringType($genericType);
706707
}
707708
}
708709

710+
return new ErrorType();
711+
} elseif ($mainTypeName === 'enum-string') {
712+
if (count($genericTypes) === 1) {
713+
$genericType = $genericTypes[0];
714+
if ($genericType->isEnum()->yes() || $genericType instanceof MixedType) {
715+
return TypeCombinator::intersect($genericType, new ObjectType(UnitEnum::class));
716+
}
717+
}
718+
709719
return new ErrorType();
710720
} elseif ($mainTypeName === 'int') {
711721
if (count($genericTypes) === 2) { // int<min, max>, int<1, 3>

0 commit comments

Comments
 (0)