Skip to content

Commit 6813895

Browse files
committed
Updated Rector to commit 9a95b6b13e7522da28576a3e615f319b417feedb
rectorphp/rector-src@9a95b6b [dead-code] Skip substr casting removal on PHP 7.x, as can return false|string (#7449)
1 parent 12ec74a commit 6813895

3 files changed

Lines changed: 28 additions & 8 deletions

File tree

rules/CodingStyle/ClassNameImport/ClassNameImportSkipVoter/ClassLikeNameClassNameImportSkipVoter.php

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,7 @@ public function shouldSkip(File $file, FullyQualifiedObjectType $fullyQualifiedO
4545
$namespace = $scope instanceof Scope ? $scope->getNamespace() : null;
4646
$namespace = strtolower((string) $namespace);
4747
$shortNameLowered = $fullyQualifiedObjectType->getShortNameLowered();
48-
/**
49-
* on php 7.x, substr() result can return false, so force (string) is needed
50-
* @see https://github.com/rectorphp/rector-src/pull/7436
51-
*/
52-
$subClassName = (string) substr($fullyQualifiedObjectType->getClassName(), 0, -strlen($fullyQualifiedObjectType->getShortName()) - 1);
48+
$subClassName = substr($fullyQualifiedObjectType->getClassName(), 0, -strlen($fullyQualifiedObjectType->getShortName()) - 1);
5349
$fullyQualifiedObjectTypeNamespace = strtolower($subClassName);
5450
foreach ($classLikeNames as $classLikeName) {
5551
if (strtolower($classLikeName) !== $shortNameLowered) {

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 = 'd57b45e163b919f164b0b8a4622679f35663ba49';
22+
public const PACKAGE_VERSION = '9a95b6b13e7522da28576a3e615f319b417feedb';
2323
/**
2424
* @api
2525
* @var string
2626
*/
27-
public const RELEASE_DATE = '2025-10-08 13:42:40';
27+
public const RELEASE_DATE = '2025-10-08 09:20:27';
2828
/**
2929
* @var int
3030
*/

src/NodeTypeResolver/NodeTypeResolver.php

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
use PHPStan\Type\NullType;
3939
use PHPStan\Type\ObjectType;
4040
use PHPStan\Type\ObjectWithoutClassType;
41+
use PHPStan\Type\StringType;
4142
use PHPStan\Type\ThisType;
4243
use PHPStan\Type\Type;
4344
use PHPStan\Type\TypeCombinator;
@@ -54,9 +55,11 @@
5455
use Rector\NodeTypeResolver\NodeTypeCorrector\AccessoryNonEmptyStringTypeCorrector;
5556
use Rector\NodeTypeResolver\NodeTypeCorrector\GenericClassStringTypeCorrector;
5657
use Rector\NodeTypeResolver\PHPStan\ObjectWithoutClassTypeWithParentTypes;
58+
use Rector\Php\PhpVersionProvider;
5759
use Rector\StaticTypeMapper\ValueObject\Type\AliasedObjectType;
5860
use Rector\StaticTypeMapper\ValueObject\Type\ShortenedObjectType;
5961
use Rector\TypeDeclaration\PHPStan\ObjectTypeSpecifier;
62+
use Rector\ValueObject\PhpVersion;
6063
final class NodeTypeResolver
6164
{
6265
/**
@@ -91,6 +94,10 @@ final class NodeTypeResolver
9194
* @readonly
9295
*/
9396
private NodeNameResolver $nodeNameResolver;
97+
/**
98+
* @readonly
99+
*/
100+
private PhpVersionProvider $phpVersionProvider;
94101
/**
95102
* @var string
96103
*/
@@ -102,7 +109,7 @@ final class NodeTypeResolver
102109
/**
103110
* @param NodeTypeResolverInterface[] $nodeTypeResolvers
104111
*/
105-
public function __construct(ObjectTypeSpecifier $objectTypeSpecifier, ClassAnalyzer $classAnalyzer, GenericClassStringTypeCorrector $genericClassStringTypeCorrector, ReflectionProvider $reflectionProvider, AccessoryNonEmptyStringTypeCorrector $accessoryNonEmptyStringTypeCorrector, AccessoryNonEmptyArrayTypeCorrector $accessoryNonEmptyArrayTypeCorrector, RenamedClassesDataCollector $renamedClassesDataCollector, NodeNameResolver $nodeNameResolver, iterable $nodeTypeResolvers)
112+
public function __construct(ObjectTypeSpecifier $objectTypeSpecifier, ClassAnalyzer $classAnalyzer, GenericClassStringTypeCorrector $genericClassStringTypeCorrector, ReflectionProvider $reflectionProvider, AccessoryNonEmptyStringTypeCorrector $accessoryNonEmptyStringTypeCorrector, AccessoryNonEmptyArrayTypeCorrector $accessoryNonEmptyArrayTypeCorrector, RenamedClassesDataCollector $renamedClassesDataCollector, NodeNameResolver $nodeNameResolver, PhpVersionProvider $phpVersionProvider, iterable $nodeTypeResolvers)
106113
{
107114
$this->objectTypeSpecifier = $objectTypeSpecifier;
108115
$this->classAnalyzer = $classAnalyzer;
@@ -112,6 +119,7 @@ public function __construct(ObjectTypeSpecifier $objectTypeSpecifier, ClassAnaly
112119
$this->accessoryNonEmptyArrayTypeCorrector = $accessoryNonEmptyArrayTypeCorrector;
113120
$this->renamedClassesDataCollector = $renamedClassesDataCollector;
114121
$this->nodeNameResolver = $nodeNameResolver;
122+
$this->phpVersionProvider = $phpVersionProvider;
115123
foreach ($nodeTypeResolvers as $nodeTypeResolver) {
116124
if ($nodeTypeResolver instanceof NodeTypeResolverAwareInterface) {
117125
$nodeTypeResolver->autowire($this);
@@ -527,6 +535,9 @@ private function resolveNativeTypeWithBuiltinMethodCallFallback(Expr $expr, Scop
527535
if (!$functionReflection instanceof NativeFunctionReflection) {
528536
return $scope->getNativeType($expr);
529537
}
538+
if ($this->isSubstrOnPHP74($expr)) {
539+
return new UnionType([new StringType(), new ConstantBooleanType(\false)]);
540+
}
530541
return $scope->getType($expr);
531542
}
532543
return $scope->getNativeType($expr);
@@ -554,4 +565,17 @@ private function isEnumTypeMatch($call, ObjectType $objectType): bool
554565
}
555566
return $classReflection->getName() === $objectType->getClassName();
556567
}
568+
/**
569+
* substr can return false on php 7.x and bellow
570+
*/
571+
private function isSubstrOnPHP74(FuncCall $funcCall): bool
572+
{
573+
if ($funcCall->isFirstClassCallable()) {
574+
return \false;
575+
}
576+
if (!$this->nodeNameResolver->isName($funcCall, 'substr')) {
577+
return \false;
578+
}
579+
return !$this->phpVersionProvider->isAtLeastPhpVersion(PhpVersion::PHP_80);
580+
}
557581
}

0 commit comments

Comments
 (0)