Skip to content

Commit 912a0db

Browse files
committed
Updated Rector to commit 224e316578ee891cb715eb864899a3bbbf0c5bcc
rectorphp/rector-src@224e316 add object support to DocblockReturnArrayFromDirectArrayInstanceRector (#7795)
1 parent 393ee4b commit 912a0db

File tree

3 files changed

+22
-8
lines changed

3 files changed

+22
-8
lines changed

rules/Privatization/TypeManipulator/TypeNormalizer.php

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
declare (strict_types=1);
44
namespace Rector\Privatization\TypeManipulator;
55

6+
use PHPStan\PhpDocParser\Ast\Type\TypeNode;
67
use PHPStan\Type\Accessory\AccessoryLiteralStringType;
78
use PHPStan\Type\Accessory\AccessoryNonEmptyStringType;
89
use PHPStan\Type\Accessory\AccessoryNonFalsyStringType;
@@ -17,13 +18,15 @@
1718
use PHPStan\Type\IntegerType;
1819
use PHPStan\Type\MixedType;
1920
use PHPStan\Type\NeverType;
21+
use PHPStan\Type\ObjectType;
2022
use PHPStan\Type\StringType;
2123
use PHPStan\Type\Type;
2224
use PHPStan\Type\TypeTraverser;
2325
use PHPStan\Type\UnionType;
2426
use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory;
2527
use Rector\NodeTypeResolver\PHPStan\TypeHasher;
2628
use Rector\StaticTypeMapper\StaticTypeMapper;
29+
use Rector\StaticTypeMapper\ValueObject\Type\ShortenedObjectType;
2730
final class TypeNormalizer
2831
{
2932
/**
@@ -121,10 +124,8 @@ public function generalizeConstantTypes(Type $type): Type
121124
$uniqueGeneralizedUnionTypes = $this->typeFactory->uniquateTypes($generalizedUnionedTypes);
122125
if (count($uniqueGeneralizedUnionTypes) > 1) {
123126
$generalizedUnionType = new UnionType($uniqueGeneralizedUnionTypes);
124-
// avoid too huge print in docblock
125-
$unionedDocType = $this->staticTypeMapper->mapPHPStanTypeToPHPStanPhpDocTypeNode($generalizedUnionType);
126-
// too long
127-
if (strlen((string) $unionedDocType) > self::MAX_PRINTED_UNION_DOC_LENGTH && $this->avoidPrintedDocblockTrimming($generalizedUnionType) === \false) {
127+
$shortUnionedDocType = $this->resolveNameShortDocTypeNode($generalizedUnionType);
128+
if (strlen((string) $shortUnionedDocType) > self::MAX_PRINTED_UNION_DOC_LENGTH && $this->avoidPrintedDocblockTrimming($generalizedUnionType) === \false) {
128129
$alwaysKnownArrayType = $this->narrowToAlwaysKnownArrayType($generalizedUnionType);
129130
if ($alwaysKnownArrayType instanceof ArrayType) {
130131
return $alwaysKnownArrayType;
@@ -180,4 +181,17 @@ private function avoidPrintedDocblockTrimming(UnionType $unionType): bool
180181
}
181182
return $unionType->getObjectClassNames() !== [];
182183
}
184+
private function resolveNameShortDocTypeNode(UnionType $unionType): TypeNode
185+
{
186+
// we have to converet name to short here, to make sure the not FQN, but short name is counted to the full length
187+
$objectShortGeneralizedUnionType = TypeTraverser::map($unionType, function (Type $type, callable $traverseCallback): Type {
188+
if ($type instanceof ObjectType && strpos($type->getClassName(), '\\') !== \false) {
189+
// after last "\\"
190+
$shortClassName = (string) substr($type->getClassName(), strrpos($type->getClassName(), '\\') + 1);
191+
return new ShortenedObjectType($shortClassName, $type->getClassName());
192+
}
193+
return $traverseCallback($type, $traverseCallback);
194+
});
195+
return $this->staticTypeMapper->mapPHPStanTypeToPHPStanPhpDocTypeNode($objectShortGeneralizedUnionType);
196+
}
183197
}

rules/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,8 @@ public function refactor(Node $node): ?Node
113113
if (!$returnedType instanceof ConstantArrayType) {
114114
return null;
115115
}
116-
if ($returnedType->getReferencedClasses() !== []) {
117-
// better handled by shared-interface/class rule, to avoid turning objects to mixed
116+
// better handled by shared-interface/class rule, to avoid turning objects to mixed
117+
if ($returnedType->getReferencedClasses() !== [] && count($returnedType->getReferencedClasses()) === count($returnedType->getValueTypes())) {
118118
return null;
119119
}
120120
$genericTypeNode = $this->constantArrayTypeGeneralizer->generalize($returnedType);

src/Application/VersionResolver.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@ final class VersionResolver
1919
* @api
2020
* @var string
2121
*/
22-
public const PACKAGE_VERSION = '566b3beb53e71df7d271a38ea5f97bef767c2ec8';
22+
public const PACKAGE_VERSION = '224e316578ee891cb715eb864899a3bbbf0c5bcc';
2323
/**
2424
* @api
2525
* @var string
2626
*/
27-
public const RELEASE_DATE = '2026-01-02 16:47:30';
27+
public const RELEASE_DATE = '2026-01-02 16:21:39';
2828
/**
2929
* @var int
3030
*/

0 commit comments

Comments
 (0)