diff --git a/rules-tests/TypeDeclaration/Rector/ClassMethod/ReturnUnionTypeRector/Fixture/int_or_numeric_string.php.inc b/rules-tests/TypeDeclaration/Rector/ClassMethod/ReturnUnionTypeRector/Fixture/int_or_numeric_string.php.inc new file mode 100644 index 00000000000..86816ba6d94 --- /dev/null +++ b/rules-tests/TypeDeclaration/Rector/ClassMethod/ReturnUnionTypeRector/Fixture/int_or_numeric_string.php.inc @@ -0,0 +1,57 @@ +getAssetSize($assets); + + if ($size) { + $size = (string) $size; + } + + return $size; + } +} + +?> +----- +getAssetSize($assets); + + if ($size) { + $size = (string) $size; + } + + return $size; + } +} + +?> diff --git a/src/PHPStanStaticTypeMapper/TypeMapper/IntersectionTypeMapper.php b/src/PHPStanStaticTypeMapper/TypeMapper/IntersectionTypeMapper.php index e64fb9cb1aa..b6143295d8e 100644 --- a/src/PHPStanStaticTypeMapper/TypeMapper/IntersectionTypeMapper.php +++ b/src/PHPStanStaticTypeMapper/TypeMapper/IntersectionTypeMapper.php @@ -5,6 +5,7 @@ namespace Rector\PHPStanStaticTypeMapper\TypeMapper; use PhpParser\Node; +use PhpParser\Node\Identifier; use PhpParser\Node\Name\FullyQualified; use PHPStan\PhpDocParser\Ast\Node as AstNode; use PHPStan\PhpDocParser\Ast\Type\ArrayShapeItemNode; @@ -91,6 +92,11 @@ function (AstNode $astNode): int|IdentifierTypeNode { */ public function mapToPhpParserNode(Type $type, string $typeKind): ?Node { + // accessory string types, e.g. "numeric-string&non-falsy-string", are just "string" + if ($type->isString()->yes()) { + return new Identifier('string'); + } + if (! $this->phpVersionProvider->isAtLeastPhpVersion(PhpVersionFeature::INTERSECTION_TYPES)) { return null; }