From 1556d66b0ea352f6cf8e42c4dda3f5fd7da60133 Mon Sep 17 00:00:00 2001 From: Carlos Granados Date: Wed, 13 Nov 2024 07:59:51 +0000 Subject: [PATCH] Updated Rector to commit fb3c33aec495946d0bd1b9422b9b65f44665defd https://github.com/carlos-granados/rector-src/commit/f7ea3dbfeb4e02ab42442dd9e90283e8af098e4f [PHP8.3] add new rectors for get_class()/get_parent_class() without arguments (#6405) https://github.com/carlos-granados/rector-src/commit/1afc64719771eae635df76bf5f85b225b459b3d6 Rectify (#6408) https://github.com/carlos-granados/rector-src/commit/afe7c46c0387e27e1eae37cf76f8a3a4119a1d39 [DeadCode] Skip nullable @ template on RemoveUselessReturnTagRector (#6409) https://github.com/carlos-granados/rector-src/commit/293eb9701e8035c7d1e57ba0627a637ad70c7c16 [Php81] Skip Doctrine Embeddable on ReadOnlyPropertyRector (#6411) https://github.com/carlos-granados/rector-src/commit/1b1807b0f8426641e13e5914389e1c118b3a3d14 [Privatization] Skip with parameter on PrivatizeLocalGetterToPropertyRector (#6412) https://github.com/carlos-granados/rector-src/commit/2c6790841ec149b1849c5b931b7b46648fe2f18e Fix ClassDependencyManipulator to add dependency on right position (#6413) https://github.com/carlos-granados/rector-src/commit/29e89320f0b5c81e2130320ac55f0821daaf4e14 [automated] Apply Coding Standard (#6414) https://github.com/carlos-granados/rector-src/commit/3949fc260b51c4355f86d21a26db7d2e4cae0b49 Move instanceof PHPStan Type to ->is*() take 1 (#6416) https://github.com/carlos-granados/rector-src/commit/0cac71a900cfa8d353231bc728e65d47b755b434 [CodeQuality] Add fixture test for skip nullable array from property with default value (#6417) https://github.com/carlos-granados/rector-src/commit/d2db35ef07cb9819544caec477d63c150e3e196c [Php80] Returns null on no change on ClassPropertyAssignToConstructorPromotionRector (#6418) https://github.com/carlos-granados/rector-src/commit/06adce3c1a50de37f64eb9afe9635834540402f4 use ->isInteger()->yes() on ReturnTypeFromStrictNewArrayRector (#6419) https://github.com/carlos-granados/rector-src/commit/bcfb5981444172d8ccf82e783b5a217385ea83c7 Add ClassNameFromObjectTypeResolver to cover TypeWithClassName instance checks (#6420) https://github.com/carlos-granados/rector-src/commit/84bb59697d2cf5d564b5a2ace9be4f3496d6f131 [StaticTypeMapper] Reduce instanceof TypeWithClassName usage via ClassNameFromObjectTypeResolver (#6421) https://github.com/carlos-granados/rector-src/commit/26b8b540ed08315062c007dafd572f9896b509eb [Naming] Reduce instanceof ObjectType on ExpectedNameResolver (take 5) (#6423) https://github.com/carlos-granados/rector-src/commit/5baf4870b6129cf0eee0b32ac0b117c2086e8d75 Require-dev phpstan/phpstan-deprecation-rules to show list of deprecated (#6415) https://github.com/carlos-granados/rector-src/commit/c23ba82ebce17c9d150d18de09a7d80a2a28a0e7 [deprecation] Remove deprecated PublicConstantVisibilityRector, cleanup deprecated SetListInterface (#6424) https://github.com/carlos-granados/rector-src/commit/c2053c75d6c55d2ca64f2003915aa8953c376f98 [deprecation] Deprecate AbstractScopeAwareRector in favor of single AbstractRector (#6425) https://github.com/carlos-granados/rector-src/commit/2c5cd97a3a98ab5af9efb846f6f78738e4a195a6 [deprecated] Remove deprecated AbstractTestCase (#6426) https://github.com/carlos-granados/rector-src/commit/fb3c33aec495946d0bd1b9422b9b65f44665defd Merge commit '2c5cd97a3a98ab5af9efb846f6f78738e4a195a6' --- config/set/php83.php | 3 +- .../ThrowWithPreviousExceptionRector.php | 5 +- .../ClassMethod/ExplicitReturnNullRector.php | 3 +- .../OptionalParametersAfterRequiredRector.php | 8 +- .../SimplifyEmptyCheckOnEmptyArrayRector.php | 19 ++- .../TernaryFalseExpressionToIfRector.php | 7 +- .../ForRepeatedCountToOwnVariableRector.php | 9 +- .../FuncCall/InlineIsAInstanceOfRector.php | 7 +- .../If_/SimplifyIfNullableReturnRector.php | 7 +- ...OnPropertyObjectToPropertyExistsRector.php | 11 +- .../ArrayCallableToMethodCallFactory.php | 5 +- .../FunctionFirstClassCallableRector.php | 7 +- .../NodeAnalyzer/CallCollectionAnalyzer.php | 7 +- .../PhpDoc/DeadParamTagValueNodeAnalyzer.php | 12 +- .../PhpDoc/DeadReturnTagValueNodeAnalyzer.php | 12 +- .../PhpDoc/DeadVarTagValueNodeAnalyzer.php | 12 +- .../PhpDoc/Guard/TemplateTypeRemovalGuard.php | 26 ++++ .../Assign/RemoveDoubleAssignRector.php | 9 +- .../RemoveUnusedVariableAssignRector.php | 8 +- ...RemoveUnusedPrivateClassConstantRector.php | 13 +- .../RemoveUnusedPrivateMethodRector.php | 9 +- .../RemoveUnusedPromotedPropertyRector.php | 7 +- .../If_/ReduceAlwaysFalseIfOrRector.php | 6 +- .../If_/RemoveAlwaysTrueIfConditionRector.php | 14 +- ...UnusedNonEmptyArrayBeforeForeachRector.php | 8 +- .../RemoveUnusedPrivatePropertyRector.php | 7 +- .../Guard/BreakingVariableRenameGuard.php | 7 +- .../Guard/DateTimeAtNamingConventionGuard.php | 7 +- rules/Naming/Naming/ExpectedNameResolver.php | 11 +- rules/Naming/Naming/PropertyNaming.php | 10 +- .../Switch_/ContinueToBreakInSwitchRector.php | 3 +- .../Break_/RemoveZeroBreakContinueRector.php | 3 +- .../GetCalledClassToStaticClassRector.php | 9 +- .../ClassMethod/Php4ConstructorRector.php | 8 +- ...isCallOnStaticMethodToStaticCallRector.php | 9 +- ...ticCallOnNonStaticToInstanceCallRector.php | 8 +- .../PublicConstantVisibilityRector.php | 64 -------- .../Rector/FuncCall/GetClassOnNullRector.php | 10 +- .../ClassOnThisVariableObjectRector.php | 7 +- ...ertyAssignToConstructorPromotionRector.php | 5 + .../Array_/FirstClassCallableRector.php | 8 +- .../NullToStrictStringFuncCallArgRector.php | 3 +- .../Property/ReadOnlyPropertyRector.php | 8 +- .../Rector/Class_/ReadOnlyClassRector.php | 8 +- ...moveGetClassGetParentClassNoArgsRector.php | 73 +++++++++ .../PrivatizeFinalClassMethodRector.php | 9 +- .../PrivatizeLocalGetterToPropertyRector.php | 3 + .../Rector/MethodCall/RenameMethodRector.php | 8 +- .../UnitializedPropertyAnalyzer.php | 6 +- .../NodeFactory/ExactCompareFactory.php | 15 +- .../AbstractFalsyScalarRuleFixerRector.php | 4 +- .../BooleanInBooleanNotRuleFixerRector.php | 5 +- .../Empty_/DisallowedEmptyRuleFixerRector.php | 4 +- .../BooleanInIfConditionRuleFixerRector.php | 5 +- ...ooleanInTernaryOperatorRuleFixerRector.php | 5 +- .../DisallowedShortTernaryRuleFixerRector.php | 4 +- .../TypeProvidingExprFromClassResolver.php | 5 +- .../Class_/AddInterfaceByTraitRector.php | 9 +- .../StaticCallToMethodCallRector.php | 7 +- .../NodeAnalyzer/CallTypesResolver.php | 12 +- .../NodeAnalyzer/CallerParamMatcher.php | 3 +- .../ClassMethodParamTypeCompleter.php | 5 +- .../TypeExpressionFromVarTagResolver.php | 3 +- ...eturnTypeFromBooleanConstReturnsRector.php | 8 +- ...turnTypeFromBooleanStrictReturnsRector.php | 15 +- ...mericReturnTypeFromStrictReturnsRector.php | 8 +- ...eturnTypeFromStrictScalarReturnsRector.php | 8 +- .../ParamTypeByMethodCallTypeRector.php | 8 +- .../ParamTypeByParentCallTypeRector.php | 9 +- .../ClassMethod/ReturnNeverTypeRector.php | 9 +- .../ClassMethod/ReturnNullableTypeRector.php | 9 +- .../ReturnTypeFromMockObjectRector.php | 8 +- .../ReturnTypeFromReturnCastRector.php | 9 +- .../ReturnTypeFromReturnDirectArrayRector.php | 9 +- .../ReturnTypeFromReturnNewRector.php | 9 +- ...turnTypeFromStrictConstantReturnRector.php | 9 +- ...ReturnTypeFromStrictFluentReturnRector.php | 9 +- .../ReturnTypeFromStrictNativeCallRector.php | 9 +- .../ReturnTypeFromStrictNewArrayRector.php | 11 +- .../ReturnTypeFromStrictParamRector.php | 9 +- .../ReturnTypeFromStrictTypedCallRector.php | 11 +- ...eturnTypeFromStrictTypedPropertyRector.php | 9 +- .../ReturnTypeFromSymfonySerializerRector.php | 9 +- .../ClassMethod/ReturnUnionTypeRector.php | 9 +- ...eturnTypeFromStrictScalarReturnsRector.php | 8 +- ...eturnTypeFromStrictStringReturnsRector.php | 8 +- .../ReturnTypeFromStrictTernaryRector.php | 8 +- .../AddClosureNeverReturnTypeRector.php | 9 +- ...mptyOnNullableObjectToInstanceOfRector.php | 9 +- ...dReturnTypeDeclarationFromYieldsRector.php | 9 +- .../AddPropertyTypeDeclarationRector.php | 9 +- .../PropertyTypeDefaultValueAnalyzer.php | 3 +- .../TrustedClassMethodPropertyTypeInferer.php | 2 +- .../TypeInferer/SplArrayFixedTypeNarrower.php | 11 +- .../ChangeMethodVisibilityRector.php | 9 +- src/Application/VersionResolver.php | 4 +- .../Rector/ScopeAwareRectorInterface.php | 4 + src/NodeAnalyzer/PropertyAnalyzer.php | 10 +- src/NodeAnalyzer/PropertyPresenceChecker.php | 10 +- .../ClassDependencyManipulator.php | 3 + .../ClassInsertManipulator.php | 79 +++++----- src/NodeManipulator/PropertyManipulator.php | 2 +- src/NodeTypeResolver/NodeTypeResolver.php | 2 +- .../PHPStan/Type/StaticTypeAnalyzer.php | 3 +- .../PHPStan/Type/TypeFactory.php | 17 +-- .../TypeComparator/ScalarTypeComparator.php | 3 +- .../TypeComparator/TypeComparator.php | 3 +- src/PHPStan/ScopeFetcher.php | 23 +++ .../DoctrineTypeAnalyzer.php | 9 +- .../TypeMapper/ArrayTypeMapper.php | 2 +- .../TypeMapper/BooleanTypeMapper.php | 13 +- .../TypeMapper/UnionTypeMapper.php | 3 +- .../Utils/TypeUnwrapper.php | 24 +-- ...nnotationToAttributeIntegerValueCaster.php | 5 +- src/PhpParser/AstResolver.php | 7 +- src/PhpParser/Node/Value/ValueResolver.php | 4 +- .../NodeFinder/LocalMethodCallFinder.php | 7 +- .../NodeFinder/PropertyFetchFinder.php | 6 +- src/Rector/AbstractScopeAwareRector.php | 4 + src/Reflection/ReflectionResolver.php | 23 +-- src/Set/ValueObject/LevelSetList.php | 3 +- src/Set/ValueObject/SetList.php | 3 +- .../ClassNameFromObjectTypeResolver.php | 17 +++ .../ValueObject/Type/AliasedObjectType.php | 7 +- src/Testing/PHPUnit/AbstractTestCase.php | 34 ----- src/ValueObject/Error/SystemError.php | 4 - src/ValueObject/PhpVersionFeature.php | 6 + vendor/autoload.php | 2 +- vendor/composer/autoload_classmap.php | 17 +-- vendor/composer/autoload_real.php | 10 +- vendor/composer/autoload_static.php | 25 +--- vendor/composer/installed.json | 74 +++++----- vendor/composer/installed.php | 2 +- vendor/composer/pcre/composer.json | 4 +- .../PregMatchTypeSpecifyingExtension.php | 16 +- vendor/composer/pcre/src/PcreException.php | 6 +- .../src/GeneratedConfig.php | 2 +- vendor/rector/rector-doctrine/composer.json | 6 +- .../config/sets/doctrine-dbal-210.php | 9 -- ...PropertyGetterByToManyAnnotationRector.php | 9 +- ...nPropertyGetterByToManyAttributeRector.php | 64 -------- ...nitializeDefaultEntityCollectionRector.php | 80 ---------- ...edPropertyFromDoctrineCollectionRector.php | 83 ----------- .../Set/SetProvider/DoctrineSetProvider.php | 2 +- .../rector/rector-downgrade-php/composer.json | 4 +- .../FuncCall/DowngradeStreamIsattyRector.php | 8 +- .../Array_/DowngradeArraySpreadRector.php | 9 +- .../DowngradeNonCapturingCatchesRector.php | 9 +- .../DowngradeMatchToSwitchRector.php | 9 +- .../DowngradeArraySpreadStringKeyRector.php | 9 +- .../DowngradeReadonlyPropertyRector.php | 3 +- .../Set/ValueObject/DowngradeLevelSetList.php | 4 +- .../src/Set/ValueObject/DowngradeSetList.php | 4 +- .../rector-phpunit/config/sets/phpunit100.php | 3 +- ...ityDocumentCreateMockToDirectNewRector.php | 30 +++- .../Rector/Class_/YieldDataProviderRector.php | 19 ++- ...rtIssetToAssertObjectHasPropertyRector.php | 139 ------------------ .../rector-phpunit/src/Set/PHPUnitSetList.php | 3 +- vendor/rector/rector-symfony/composer.json | 6 +- .../Rector/Class_/MakeCommandLazyRector.php | 68 --------- .../ServicesSetNameToSetTypeRector.php | 53 ------- .../ProcessBuilderGetProcessRector.php | 58 -------- .../ProcessBuilderInstanceRector.php | 48 ------ ...stCaseAssertSelectorTextContainsRector.php | 72 --------- .../CommandDescriptionToPropertyRector.php | 71 --------- ...ributeFromAnnotationSubnamespaceRector.php | 57 ------- .../rector-symfony/src/Set/FOSRestSetList.php | 5 +- .../rector-symfony/src/Set/JMSSetList.php | 5 +- .../src/Set/SensiolabsSetList.php | 5 +- .../src/Set/SwiftMailerSetList.php | 3 +- .../rector-symfony/src/Set/SymfonySetList.php | 5 +- .../rector-symfony/src/Set/TwigSetList.php | 3 +- vendor/scoper-autoload.php | 2 +- 173 files changed, 862 insertions(+), 1500 deletions(-) create mode 100644 rules/DeadCode/PhpDoc/Guard/TemplateTypeRemovalGuard.php delete mode 100644 rules/Php71/Rector/ClassConst/PublicConstantVisibilityRector.php create mode 100644 rules/Php83/Rector/FuncCall/RemoveGetClassGetParentClassNoArgsRector.php create mode 100644 src/PHPStan/ScopeFetcher.php create mode 100644 src/StaticTypeMapper/Resolver/ClassNameFromObjectTypeResolver.php delete mode 100644 src/Testing/PHPUnit/AbstractTestCase.php delete mode 100644 vendor/rector/rector-doctrine/config/sets/doctrine-dbal-210.php delete mode 100644 vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/AddReturnDocBlockToCollectionPropertyGetterByToManyAttributeRector.php delete mode 100644 vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/InitializeDefaultEntityCollectionRector.php delete mode 100644 vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Property/TypedPropertyFromDoctrineCollectionRector.php delete mode 100644 vendor/rector/rector-phpunit/rules/PHPUnit100/Rector/MethodCall/AssertIssetToAssertObjectHasPropertyRector.php delete mode 100644 vendor/rector/rector-symfony/rules/CodeQuality/Rector/Class_/MakeCommandLazyRector.php delete mode 100644 vendor/rector/rector-symfony/rules/Configs/Rector/Closure/ServicesSetNameToSetTypeRector.php delete mode 100644 vendor/rector/rector-symfony/rules/Symfony40/Rector/MethodCall/ProcessBuilderGetProcessRector.php delete mode 100644 vendor/rector/rector-symfony/rules/Symfony40/Rector/StaticCall/ProcessBuilderInstanceRector.php delete mode 100644 vendor/rector/rector-symfony/rules/Symfony43/Rector/MethodCall/WebTestCaseAssertSelectorTextContainsRector.php delete mode 100644 vendor/rector/rector-symfony/rules/Symfony53/Rector/Class_/CommandDescriptionToPropertyRector.php delete mode 100644 vendor/rector/rector-symfony/rules/Symfony64/Rector/Class_/ChangeRouteAttributeFromAnnotationSubnamespaceRector.php diff --git a/config/set/php83.php b/config/set/php83.php index 1490a6f52f2..7f590ec6c93 100644 --- a/config/set/php83.php +++ b/config/set/php83.php @@ -7,6 +7,7 @@ use Rector\Php83\Rector\ClassConst\AddTypeToConstRector; use Rector\Php83\Rector\ClassMethod\AddOverrideAttributeToOverriddenMethodsRector; use Rector\Php83\Rector\FuncCall\CombineHostPortLdapUriRector; +use Rector\Php83\Rector\FuncCall\RemoveGetClassGetParentClassNoArgsRector; return static function (RectorConfig $rectorConfig) : void { - $rectorConfig->rules([AddOverrideAttributeToOverriddenMethodsRector::class, AddTypeToConstRector::class, CombineHostPortLdapUriRector::class]); + $rectorConfig->rules([AddOverrideAttributeToOverriddenMethodsRector::class, AddTypeToConstRector::class, CombineHostPortLdapUriRector::class, RemoveGetClassGetParentClassNoArgsRector::class]); }; diff --git a/rules/CodeQuality/Rector/Catch_/ThrowWithPreviousExceptionRector.php b/rules/CodeQuality/Rector/Catch_/ThrowWithPreviousExceptionRector.php index 3c9c586ce15..eeb4b9f5333 100644 --- a/rules/CodeQuality/Rector/Catch_/ThrowWithPreviousExceptionRector.php +++ b/rules/CodeQuality/Rector/Catch_/ThrowWithPreviousExceptionRector.php @@ -16,9 +16,9 @@ use PHPStan\Reflection\ParametersAcceptorSelector; use PHPStan\Reflection\ReflectionProvider; use PHPStan\Type\ObjectType; -use PHPStan\Type\TypeWithClassName; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\Rector\AbstractRector; +use Rector\StaticTypeMapper\Resolver\ClassNameFromObjectTypeResolver; use Rector\ValueObject\MethodName; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; @@ -163,7 +163,8 @@ private function resolveExceptionArgumentPosition(Name $exceptionName) : ?int $parametersAcceptorWithPhpDocs = ParametersAcceptorSelector::combineAcceptors($extendedMethodReflection->getVariants()); foreach ($parametersAcceptorWithPhpDocs->getParameters() as $position => $parameterReflectionWithPhpDoc) { $parameterType = $parameterReflectionWithPhpDoc->getType(); - if (!$parameterType instanceof TypeWithClassName) { + $className = ClassNameFromObjectTypeResolver::resolve($parameterReflectionWithPhpDoc->getType()); + if ($className === null) { continue; } $objectType = new ObjectType('Throwable'); diff --git a/rules/CodeQuality/Rector/ClassMethod/ExplicitReturnNullRector.php b/rules/CodeQuality/Rector/ClassMethod/ExplicitReturnNullRector.php index 6cf5d3d168c..b453bfdb28a 100644 --- a/rules/CodeQuality/Rector/ClassMethod/ExplicitReturnNullRector.php +++ b/rules/CodeQuality/Rector/ClassMethod/ExplicitReturnNullRector.php @@ -15,7 +15,6 @@ use PhpParser\NodeTraverser; use PHPStan\Type\NullType; use PHPStan\Type\UnionType; -use PHPStan\Type\VoidType; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTypeChanger; use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory; @@ -156,7 +155,7 @@ private function transformDocUnionVoidToUnionNull($node) : void $newTypes = []; $hasChanged = \false; foreach ($returnType->getTypes() as $type) { - if ($type instanceof VoidType) { + if ($type->isVoid()->yes()) { $type = new NullType(); $hasChanged = \true; } diff --git a/rules/CodeQuality/Rector/ClassMethod/OptionalParametersAfterRequiredRector.php b/rules/CodeQuality/Rector/ClassMethod/OptionalParametersAfterRequiredRector.php index 5230ed5efa1..16ae64ca762 100644 --- a/rules/CodeQuality/Rector/ClassMethod/OptionalParametersAfterRequiredRector.php +++ b/rules/CodeQuality/Rector/ClassMethod/OptionalParametersAfterRequiredRector.php @@ -18,14 +18,15 @@ use Rector\NodeTypeResolver\PHPStan\ParametersAcceptorSelectorVariantsWrapper; use Rector\Php80\NodeResolver\ArgumentSorter; use Rector\Php80\NodeResolver\RequireOptionalParamResolver; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Rector\Reflection\ReflectionResolver; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** * @see \Rector\Tests\CodeQuality\Rector\ClassMethod\OptionalParametersAfterRequiredRector\OptionalParametersAfterRequiredRectorTest */ -final class OptionalParametersAfterRequiredRector extends AbstractScopeAwareRector +final class OptionalParametersAfterRequiredRector extends AbstractRector { /** * @readonly @@ -89,8 +90,9 @@ public function getNodeTypes() : array * @param ClassMethod|Function_|New_|MethodCall|StaticCall|FuncCall $node * @return \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|null|\PhpParser\Node\Expr\New_|\PhpParser\Node\Expr\MethodCall|\PhpParser\Node\Expr\StaticCall|\PhpParser\Node\Expr\FuncCall */ - public function refactorWithScope(Node $node, Scope $scope) + public function refactor(Node $node) { + $scope = ScopeFetcher::fetch($node); if ($node instanceof ClassMethod || $node instanceof Function_) { return $this->refactorClassMethodOrFunction($node, $scope); } diff --git a/rules/CodeQuality/Rector/Empty_/SimplifyEmptyCheckOnEmptyArrayRector.php b/rules/CodeQuality/Rector/Empty_/SimplifyEmptyCheckOnEmptyArrayRector.php index 21bfebb46f0..1c49e8ca071 100644 --- a/rules/CodeQuality/Rector/Empty_/SimplifyEmptyCheckOnEmptyArrayRector.php +++ b/rules/CodeQuality/Rector/Empty_/SimplifyEmptyCheckOnEmptyArrayRector.php @@ -17,12 +17,13 @@ use PhpParser\Node\Stmt\Property; use PHPStan\Analyser\Scope; use PHPStan\Reflection\ClassReflection; -use PHPStan\Type\ArrayType; use PHPStan\Type\MixedType; +use PHPStan\Type\Type; use Rector\NodeAnalyzer\ExprAnalyzer; use Rector\Php\ReservedKeywordAnalyzer; use Rector\PhpParser\AstResolver; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Rector\Reflection\ReflectionResolver; use Rector\TypeDeclaration\TypeInferer\PropertyTypeInferer\AllAssignNodePropertyTypeInferer; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; @@ -30,7 +31,7 @@ /** * @see \Rector\Tests\CodeQuality\Rector\Empty_\SimplifyEmptyCheckOnEmptyArrayRector\SimplifyEmptyCheckOnEmptyArrayRectorTest */ -final class SimplifyEmptyCheckOnEmptyArrayRector extends AbstractScopeAwareRector +final class SimplifyEmptyCheckOnEmptyArrayRector extends AbstractRector { /** * @readonly @@ -91,8 +92,9 @@ public function getNodeTypes() : array /** * @param Empty_|BooleanNot $node $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); if ($node instanceof BooleanNot) { if ($node->expr instanceof Empty_ && $this->isAllowedExpr($node->expr->expr, $scope)) { return new NotIdentical($node->expr->expr, new Array_()); @@ -113,7 +115,7 @@ private function isAllowedVariable(Variable $variable) : bool } private function isAllowedExpr(Expr $expr, Scope $scope) : bool { - if (!$scope->getType($expr) instanceof ArrayType) { + if (!$scope->getType($expr)->isArray()->yes()) { return \false; } if ($expr instanceof Variable) { @@ -136,7 +138,7 @@ private function isAllowedExpr(Expr $expr, Scope $scope) : bool $phpPropertyReflection = $classReflection->getNativeProperty($propertyName); $nativeType = $phpPropertyReflection->getNativeType(); if (!$nativeType instanceof MixedType) { - return $nativeType instanceof ArrayType; + return $nativeType->isArray()->yes(); } $property = $this->astResolver->resolvePropertyFromPropertyReflection($phpPropertyReflection); /** @@ -149,6 +151,9 @@ private function isAllowedExpr(Expr $expr, Scope $scope) : bool return \false; } $type = $this->allAssignNodePropertyTypeInferer->inferProperty($property, $classReflection, $this->file); - return $type instanceof ArrayType; + if (!$type instanceof Type) { + return \false; + } + return $type->isArray()->yes(); } } diff --git a/rules/CodeQuality/Rector/Expression/TernaryFalseExpressionToIfRector.php b/rules/CodeQuality/Rector/Expression/TernaryFalseExpressionToIfRector.php index f5e838c3403..4c376648cbc 100644 --- a/rules/CodeQuality/Rector/Expression/TernaryFalseExpressionToIfRector.php +++ b/rules/CodeQuality/Rector/Expression/TernaryFalseExpressionToIfRector.php @@ -9,15 +9,14 @@ use PhpParser\Node\Expr\Variable; use PhpParser\Node\Stmt\Expression; use PhpParser\Node\Stmt\If_; -use PHPStan\Analyser\Scope; use Rector\NodeAnalyzer\ExprAnalyzer; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** * @see \Rector\Tests\CodeQuality\Rector\Expression\TernaryFalseExpressionToIfRector\TernaryFalseExpressionToIfRectorTest */ -final class TernaryFalseExpressionToIfRector extends AbstractScopeAwareRector +final class TernaryFalseExpressionToIfRector extends AbstractRector { /** * @readonly @@ -62,7 +61,7 @@ public function getNodeTypes() : array /** * @param Expression $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { if (!$node->expr instanceof Ternary) { return null; diff --git a/rules/CodeQuality/Rector/For_/ForRepeatedCountToOwnVariableRector.php b/rules/CodeQuality/Rector/For_/ForRepeatedCountToOwnVariableRector.php index 2502cb38bfe..ce8320d1128 100644 --- a/rules/CodeQuality/Rector/For_/ForRepeatedCountToOwnVariableRector.php +++ b/rules/CodeQuality/Rector/For_/ForRepeatedCountToOwnVariableRector.php @@ -13,14 +13,14 @@ use PhpParser\Node\Stmt; use PhpParser\Node\Stmt\Expression; use PhpParser\Node\Stmt\For_; -use PHPStan\Analyser\Scope; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** * @see \Rector\Tests\CodeQuality\Rector\For_\ForRepeatedCountToOwnVariableRector\ForRepeatedCountToOwnVariableRectorTest */ -final class ForRepeatedCountToOwnVariableRector extends AbstractScopeAwareRector +final class ForRepeatedCountToOwnVariableRector extends AbstractRector { /** * @var string @@ -64,8 +64,9 @@ public function getNodeTypes() : array * @param For_ $node * @return Stmt[]|null */ - public function refactorWithScope(Node $node, Scope $scope) : ?array + public function refactor(Node $node) : ?array { + $scope = ScopeFetcher::fetch($node); if ($scope->hasVariableType(self::COUNTER_NAME)->yes()) { return null; } diff --git a/rules/CodeQuality/Rector/FuncCall/InlineIsAInstanceOfRector.php b/rules/CodeQuality/Rector/FuncCall/InlineIsAInstanceOfRector.php index 231f9af547b..813d859359a 100644 --- a/rules/CodeQuality/Rector/FuncCall/InlineIsAInstanceOfRector.php +++ b/rules/CodeQuality/Rector/FuncCall/InlineIsAInstanceOfRector.php @@ -13,8 +13,8 @@ use PHPStan\Type\Generic\GenericClassStringType; use PHPStan\Type\ObjectType; use PHPStan\Type\ObjectWithoutClassType; -use PHPStan\Type\TypeWithClassName; use Rector\Rector\AbstractRector; +use Rector\StaticTypeMapper\Resolver\ClassNameFromObjectTypeResolver; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** @@ -88,10 +88,7 @@ private function resolveClassName(Expr $expr) : ?string if ($type instanceof GenericClassStringType) { $type = $type->getGenericType(); } - if (!$type instanceof TypeWithClassName) { - return null; - } - return $type->getClassName(); + return ClassNameFromObjectTypeResolver::resolve($type); } private function isFirstObjectType(Expr $expr) : bool { diff --git a/rules/CodeQuality/Rector/If_/SimplifyIfNullableReturnRector.php b/rules/CodeQuality/Rector/If_/SimplifyIfNullableReturnRector.php index cb8511916ff..c47701ce778 100644 --- a/rules/CodeQuality/Rector/If_/SimplifyIfNullableReturnRector.php +++ b/rules/CodeQuality/Rector/If_/SimplifyIfNullableReturnRector.php @@ -13,7 +13,6 @@ use PhpParser\Node\Stmt\Expression; use PhpParser\Node\Stmt\If_; use PhpParser\Node\Stmt\Return_; -use PHPStan\Type\NullType; use PHPStan\Type\ObjectType; use PHPStan\Type\Type; use PHPStan\Type\UnionType; @@ -200,10 +199,10 @@ private function processSimplifyNullableReturn(UnionType $unionType, array $type if (\count($types) > 2) { return null; } - if ($types[0] instanceof FullyQualifiedObjectType && $types[1] instanceof NullType && $className === $types[0]->getClassName()) { + if ($types[0] instanceof FullyQualifiedObjectType && $types[1]->isNull()->yes() && $className === $types[0]->getClassName()) { return $this->createDirectReturn($expression, $expr, $unionType); } - if ($types[0] instanceof NullType && $types[1] instanceof FullyQualifiedObjectType && $className === $types[1]->getClassName()) { + if ($types[0]->isNull()->yes() && $types[1] instanceof FullyQualifiedObjectType && $className === $types[1]->getClassName()) { return $this->createDirectReturn($expression, $expr, $unionType); } if ($this->isNotTypedNullable($types, $className)) { @@ -219,7 +218,7 @@ private function isNotTypedNullable(array $types, string $className) : bool if (!$types[0] instanceof ObjectType) { return \true; } - if (!$types[1] instanceof NullType) { + if (!$types[1]->isNull()->yes()) { return \true; } return $className !== $types[0]->getClassName(); diff --git a/rules/CodeQuality/Rector/Isset_/IssetOnPropertyObjectToPropertyExistsRector.php b/rules/CodeQuality/Rector/Isset_/IssetOnPropertyObjectToPropertyExistsRector.php index f69c7bc3ec1..81481006c75 100644 --- a/rules/CodeQuality/Rector/Isset_/IssetOnPropertyObjectToPropertyExistsRector.php +++ b/rules/CodeQuality/Rector/Isset_/IssetOnPropertyObjectToPropertyExistsRector.php @@ -20,10 +20,10 @@ use PHPStan\Reflection\ReflectionProvider; use PHPStan\Type\MixedType; use PHPStan\Type\TypeCombinator; -use PHPStan\Type\TypeWithClassName; use Rector\PhpParser\Node\Value\ValueResolver; use Rector\Rector\AbstractRector; use Rector\Reflection\ReflectionResolver; +use Rector\StaticTypeMapper\Resolver\ClassNameFromObjectTypeResolver; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** @@ -176,15 +176,16 @@ private function createIdenticalToNull(PropertyFetch $propertyFetch) : Identical private function matchPropertyTypeClassReflection(PropertyFetch $propertyFetch) : ?ClassReflection { $propertyFetchVarType = $this->getType($propertyFetch->var); - if (!$propertyFetchVarType instanceof TypeWithClassName) { + $className = ClassNameFromObjectTypeResolver::resolve($propertyFetchVarType); + if ($className === null) { return null; } - if ($propertyFetchVarType->getClassName() === 'stdClass') { + if ($className === 'stdClass') { return null; } - if (!$this->reflectionProvider->hasClass($propertyFetchVarType->getClassName())) { + if (!$this->reflectionProvider->hasClass($className)) { return null; } - return $this->reflectionProvider->getClass($propertyFetchVarType->getClassName()); + return $this->reflectionProvider->getClass($className); } } diff --git a/rules/CodingStyle/NodeFactory/ArrayCallableToMethodCallFactory.php b/rules/CodingStyle/NodeFactory/ArrayCallableToMethodCallFactory.php index 0b276fa7b8d..370e3c68ac5 100644 --- a/rules/CodingStyle/NodeFactory/ArrayCallableToMethodCallFactory.php +++ b/rules/CodingStyle/NodeFactory/ArrayCallableToMethodCallFactory.php @@ -9,8 +9,8 @@ use PhpParser\Node\Expr\PropertyFetch; use PhpParser\Node\Expr\Variable; use PhpParser\Node\Scalar\String_; -use PHPStan\Type\TypeWithClassName; use Rector\NodeTypeResolver\NodeTypeResolver; +use Rector\StaticTypeMapper\Resolver\ClassNameFromObjectTypeResolver; final class ArrayCallableToMethodCallFactory { /** @@ -42,7 +42,8 @@ public function create(Array_ $array) : ?MethodCall return null; } $firstItemType = $this->nodeTypeResolver->getType($firstItem->value); - if (!$firstItemType instanceof TypeWithClassName) { + $className = ClassNameFromObjectTypeResolver::resolve($firstItemType); + if ($className === null) { return null; } $string = $secondItem->value; diff --git a/rules/CodingStyle/Rector/FuncCall/FunctionFirstClassCallableRector.php b/rules/CodingStyle/Rector/FuncCall/FunctionFirstClassCallableRector.php index 524ec2650e9..100563639a8 100644 --- a/rules/CodingStyle/Rector/FuncCall/FunctionFirstClassCallableRector.php +++ b/rules/CodingStyle/Rector/FuncCall/FunctionFirstClassCallableRector.php @@ -9,8 +9,7 @@ use PhpParser\Node\Name; use PhpParser\Node\Scalar\String_; use PhpParser\Node\VariadicPlaceholder; -use PHPStan\Analyser\Scope; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\Rector\AbstractRector; use Rector\ValueObject\PhpVersion; use Rector\VersionBonding\Contract\MinPhpVersionInterface; use ReflectionException; @@ -21,7 +20,7 @@ /** * @see \Rector\Tests\CodingStyle\Rector\FuncCall\FunctionFirstClassCallableRector\FunctionFirstClassCallableRectorTest */ -final class FunctionFirstClassCallableRector extends AbstractScopeAwareRector implements MinPhpVersionInterface +final class FunctionFirstClassCallableRector extends AbstractRector implements MinPhpVersionInterface { public function getRuleDefinition() : RuleDefinition { @@ -53,7 +52,7 @@ public function getNodeTypes() : array { return [FuncCall::class]; } - public function refactorWithScope(Node $node, Scope $scope) : ?FuncCall + public function refactor(Node $node) : ?FuncCall { if (!$node instanceof FuncCall) { return null; diff --git a/rules/DeadCode/NodeAnalyzer/CallCollectionAnalyzer.php b/rules/DeadCode/NodeAnalyzer/CallCollectionAnalyzer.php index 866a81de21e..46e757f9ea8 100644 --- a/rules/DeadCode/NodeAnalyzer/CallCollectionAnalyzer.php +++ b/rules/DeadCode/NodeAnalyzer/CallCollectionAnalyzer.php @@ -10,10 +10,10 @@ use PhpParser\Node\Identifier; use PhpParser\Node\Name; use PHPStan\Type\MixedType; -use PHPStan\Type\TypeWithClassName; use Rector\Enum\ObjectReference; use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeTypeResolver\NodeTypeResolver; +use Rector\StaticTypeMapper\Resolver\ClassNameFromObjectTypeResolver; final class CallCollectionAnalyzer { /** @@ -39,7 +39,8 @@ public function isExists(array $calls, string $classMethodName, string $classNam foreach ($calls as $call) { $callerRoot = $call instanceof StaticCall ? $call->class : $call->var; $callerType = $this->nodeTypeResolver->getType($callerRoot); - if (!$callerType instanceof TypeWithClassName) { + $callerTypeClasName = ClassNameFromObjectTypeResolver::resolve($callerType); + if ($callerTypeClasName === null) { // handle fluent by $this->bar()->baz()->qux() // that methods don't have return type if ($callerType instanceof MixedType && !$callerType->isExplicitMixed()) { @@ -66,7 +67,7 @@ public function isExists(array $calls, string $classMethodName, string $classNam if ($this->isSelfStatic($call) && $this->shouldSkip($call, $classMethodName)) { return \true; } - if ($callerType->getClassName() !== $className) { + if ($callerTypeClasName !== $className) { continue; } if ($this->shouldSkip($call, $classMethodName)) { diff --git a/rules/DeadCode/PhpDoc/DeadParamTagValueNodeAnalyzer.php b/rules/DeadCode/PhpDoc/DeadParamTagValueNodeAnalyzer.php index 099cd4bde91..1f9351ce52f 100644 --- a/rules/DeadCode/PhpDoc/DeadParamTagValueNodeAnalyzer.php +++ b/rules/DeadCode/PhpDoc/DeadParamTagValueNodeAnalyzer.php @@ -8,10 +8,10 @@ use PhpParser\Node\Param; use PHPStan\PhpDocParser\Ast\PhpDoc\ParamTagValueNode; use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode; -use PHPStan\Type\Generic\TemplateType; use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTypeChanger; use Rector\BetterPhpDocParser\ValueObject\Type\BracketsAwareUnionTypeNode; use Rector\DeadCode\PhpDoc\Guard\StandaloneTypeRemovalGuard; +use Rector\DeadCode\PhpDoc\Guard\TemplateTypeRemovalGuard; use Rector\DeadCode\TypeNodeAnalyzer\GenericTypeNodeAnalyzer; use Rector\DeadCode\TypeNodeAnalyzer\MixedArrayTypeNodeAnalyzer; use Rector\NodeNameResolver\NodeNameResolver; @@ -60,7 +60,12 @@ final class DeadParamTagValueNodeAnalyzer * @var \Rector\StaticTypeMapper\StaticTypeMapper */ private $staticTypeMapper; - public function __construct(NodeNameResolver $nodeNameResolver, TypeComparator $typeComparator, GenericTypeNodeAnalyzer $genericTypeNodeAnalyzer, MixedArrayTypeNodeAnalyzer $mixedArrayTypeNodeAnalyzer, ParamAnalyzer $paramAnalyzer, PhpDocTypeChanger $phpDocTypeChanger, StandaloneTypeRemovalGuard $standaloneTypeRemovalGuard, StaticTypeMapper $staticTypeMapper) + /** + * @readonly + * @var \Rector\DeadCode\PhpDoc\Guard\TemplateTypeRemovalGuard + */ + private $templateTypeRemovalGuard; + public function __construct(NodeNameResolver $nodeNameResolver, TypeComparator $typeComparator, GenericTypeNodeAnalyzer $genericTypeNodeAnalyzer, MixedArrayTypeNodeAnalyzer $mixedArrayTypeNodeAnalyzer, ParamAnalyzer $paramAnalyzer, PhpDocTypeChanger $phpDocTypeChanger, StandaloneTypeRemovalGuard $standaloneTypeRemovalGuard, StaticTypeMapper $staticTypeMapper, TemplateTypeRemovalGuard $templateTypeRemovalGuard) { $this->nodeNameResolver = $nodeNameResolver; $this->typeComparator = $typeComparator; @@ -70,6 +75,7 @@ public function __construct(NodeNameResolver $nodeNameResolver, TypeComparator $ $this->phpDocTypeChanger = $phpDocTypeChanger; $this->standaloneTypeRemovalGuard = $standaloneTypeRemovalGuard; $this->staticTypeMapper = $staticTypeMapper; + $this->templateTypeRemovalGuard = $templateTypeRemovalGuard; } public function isDead(ParamTagValueNode $paramTagValueNode, FunctionLike $functionLike) : bool { @@ -84,7 +90,7 @@ public function isDead(ParamTagValueNode $paramTagValueNode, FunctionLike $funct return \false; } $docType = $this->staticTypeMapper->mapPHPStanPhpDocTypeNodeToPHPStanType($paramTagValueNode->type, $functionLike); - if ($docType instanceof TemplateType) { + if (!$this->templateTypeRemovalGuard->isLegal($docType)) { return \false; } if ($param->type instanceof Name && $this->nodeNameResolver->isName($param->type, 'object')) { diff --git a/rules/DeadCode/PhpDoc/DeadReturnTagValueNodeAnalyzer.php b/rules/DeadCode/PhpDoc/DeadReturnTagValueNodeAnalyzer.php index 13f7182bca9..020e610236a 100644 --- a/rules/DeadCode/PhpDoc/DeadReturnTagValueNodeAnalyzer.php +++ b/rules/DeadCode/PhpDoc/DeadReturnTagValueNodeAnalyzer.php @@ -11,12 +11,12 @@ use PHPStan\PhpDocParser\Ast\PhpDoc\ReturnTagValueNode; use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode; use PHPStan\PhpDocParser\Ast\Type\ThisTypeNode; -use PHPStan\Type\Generic\TemplateType; use PHPStan\Type\TypeCombinator; use PHPStan\Type\UnionType; use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTypeChanger; use Rector\BetterPhpDocParser\ValueObject\Type\BracketsAwareUnionTypeNode; use Rector\DeadCode\PhpDoc\Guard\StandaloneTypeRemovalGuard; +use Rector\DeadCode\PhpDoc\Guard\TemplateTypeRemovalGuard; use Rector\DeadCode\TypeNodeAnalyzer\GenericTypeNodeAnalyzer; use Rector\DeadCode\TypeNodeAnalyzer\MixedArrayTypeNodeAnalyzer; use Rector\NodeTypeResolver\Node\AttributeKey; @@ -54,7 +54,12 @@ final class DeadReturnTagValueNodeAnalyzer * @var \Rector\StaticTypeMapper\StaticTypeMapper */ private $staticTypeMapper; - public function __construct(TypeComparator $typeComparator, GenericTypeNodeAnalyzer $genericTypeNodeAnalyzer, MixedArrayTypeNodeAnalyzer $mixedArrayTypeNodeAnalyzer, StandaloneTypeRemovalGuard $standaloneTypeRemovalGuard, PhpDocTypeChanger $phpDocTypeChanger, StaticTypeMapper $staticTypeMapper) + /** + * @readonly + * @var \Rector\DeadCode\PhpDoc\Guard\TemplateTypeRemovalGuard + */ + private $templateTypeRemovalGuard; + public function __construct(TypeComparator $typeComparator, GenericTypeNodeAnalyzer $genericTypeNodeAnalyzer, MixedArrayTypeNodeAnalyzer $mixedArrayTypeNodeAnalyzer, StandaloneTypeRemovalGuard $standaloneTypeRemovalGuard, PhpDocTypeChanger $phpDocTypeChanger, StaticTypeMapper $staticTypeMapper, TemplateTypeRemovalGuard $templateTypeRemovalGuard) { $this->typeComparator = $typeComparator; $this->genericTypeNodeAnalyzer = $genericTypeNodeAnalyzer; @@ -62,6 +67,7 @@ public function __construct(TypeComparator $typeComparator, GenericTypeNodeAnaly $this->standaloneTypeRemovalGuard = $standaloneTypeRemovalGuard; $this->phpDocTypeChanger = $phpDocTypeChanger; $this->staticTypeMapper = $staticTypeMapper; + $this->templateTypeRemovalGuard = $templateTypeRemovalGuard; } /** * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_ $functionLike @@ -76,7 +82,7 @@ public function isDead(ReturnTagValueNode $returnTagValueNode, $functionLike) : return \false; } $docType = $this->staticTypeMapper->mapPHPStanPhpDocTypeNodeToPHPStanType($returnTagValueNode->type, $functionLike); - if ($docType instanceof TemplateType) { + if (!$this->templateTypeRemovalGuard->isLegal($docType)) { return \false; } $scope = $functionLike->getAttribute(AttributeKey::SCOPE); diff --git a/rules/DeadCode/PhpDoc/DeadVarTagValueNodeAnalyzer.php b/rules/DeadCode/PhpDoc/DeadVarTagValueNodeAnalyzer.php index b0c24035074..e2f953d6b97 100644 --- a/rules/DeadCode/PhpDoc/DeadVarTagValueNodeAnalyzer.php +++ b/rules/DeadCode/PhpDoc/DeadVarTagValueNodeAnalyzer.php @@ -5,11 +5,11 @@ use PhpParser\Node\Stmt\Property; use PHPStan\PhpDocParser\Ast\PhpDoc\VarTagValueNode; -use PHPStan\Type\Generic\TemplateType; use PHPStan\Type\IntersectionType; use PHPStan\Type\ObjectType; use PHPStan\Type\TypeCombinator; use PHPStan\Type\UnionType; +use Rector\DeadCode\PhpDoc\Guard\TemplateTypeRemovalGuard; use Rector\NodeTypeResolver\TypeComparator\TypeComparator; use Rector\StaticTypeMapper\StaticTypeMapper; final class DeadVarTagValueNodeAnalyzer @@ -24,10 +24,16 @@ final class DeadVarTagValueNodeAnalyzer * @var \Rector\StaticTypeMapper\StaticTypeMapper */ private $staticTypeMapper; - public function __construct(TypeComparator $typeComparator, StaticTypeMapper $staticTypeMapper) + /** + * @readonly + * @var \Rector\DeadCode\PhpDoc\Guard\TemplateTypeRemovalGuard + */ + private $templateTypeRemovalGuard; + public function __construct(TypeComparator $typeComparator, StaticTypeMapper $staticTypeMapper, TemplateTypeRemovalGuard $templateTypeRemovalGuard) { $this->typeComparator = $typeComparator; $this->staticTypeMapper = $staticTypeMapper; + $this->templateTypeRemovalGuard = $templateTypeRemovalGuard; } public function isDead(VarTagValueNode $varTagValueNode, Property $property) : bool { @@ -40,7 +46,7 @@ public function isDead(VarTagValueNode $varTagValueNode, Property $property) : b // is strict type superior to doc type? keep strict type only $propertyType = $this->staticTypeMapper->mapPhpParserNodePHPStanType($property->type); $docType = $this->staticTypeMapper->mapPHPStanPhpDocTypeNodeToPHPStanType($varTagValueNode->type, $property); - if ($docType instanceof TemplateType) { + if (!$this->templateTypeRemovalGuard->isLegal($docType)) { return \false; } if ($propertyType instanceof UnionType && !$docType instanceof UnionType) { diff --git a/rules/DeadCode/PhpDoc/Guard/TemplateTypeRemovalGuard.php b/rules/DeadCode/PhpDoc/Guard/TemplateTypeRemovalGuard.php new file mode 100644 index 00000000000..052b7c8c6fc --- /dev/null +++ b/rules/DeadCode/PhpDoc/Guard/TemplateTypeRemovalGuard.php @@ -0,0 +1,26 @@ +getTypes() : [$docType]; + foreach ($types as $type) { + if ($type instanceof TemplateType) { + return \false; + } + } + return \true; + } +} diff --git a/rules/DeadCode/Rector/Assign/RemoveDoubleAssignRector.php b/rules/DeadCode/Rector/Assign/RemoveDoubleAssignRector.php index 9cd6fd28cf0..fd9e8f7486a 100644 --- a/rules/DeadCode/Rector/Assign/RemoveDoubleAssignRector.php +++ b/rules/DeadCode/Rector/Assign/RemoveDoubleAssignRector.php @@ -15,17 +15,17 @@ use PhpParser\Node\Stmt\Function_; use PhpParser\Node\Stmt\If_; use PhpParser\Node\Stmt\Namespace_; -use PHPStan\Analyser\Scope; use Rector\DeadCode\SideEffect\SideEffectNodeDetector; use Rector\PhpParser\Node\BetterNodeFinder; use Rector\PhpParser\Node\CustomNode\FileWithoutNamespace; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** * @see \Rector\Tests\DeadCode\Rector\Assign\RemoveDoubleAssignRector\RemoveDoubleAssignRectorTest */ -final class RemoveDoubleAssignRector extends AbstractScopeAwareRector +final class RemoveDoubleAssignRector extends AbstractRector { /** * @readonly @@ -60,8 +60,9 @@ public function getNodeTypes() : array /** * @param Foreach_|FileWithoutNamespace|If_|Namespace_|ClassMethod|Function_|Closure $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); $stmts = $node->stmts; if ($stmts === null) { return null; diff --git a/rules/DeadCode/Rector/Assign/RemoveUnusedVariableAssignRector.php b/rules/DeadCode/Rector/Assign/RemoveUnusedVariableAssignRector.php index ce3f4389b71..861eda0905c 100644 --- a/rules/DeadCode/Rector/Assign/RemoveUnusedVariableAssignRector.php +++ b/rules/DeadCode/Rector/Assign/RemoveUnusedVariableAssignRector.php @@ -21,13 +21,14 @@ use Rector\NodeManipulator\StmtsManipulator; use Rector\Php\ReservedKeywordAnalyzer; use Rector\PhpParser\Node\BetterNodeFinder; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** * @see \Rector\Tests\DeadCode\Rector\Assign\RemoveUnusedVariableAssignRector\RemoveUnusedVariableAssignRectorTest */ -final class RemoveUnusedVariableAssignRector extends AbstractScopeAwareRector +final class RemoveUnusedVariableAssignRector extends AbstractRector { /** * @readonly @@ -94,7 +95,7 @@ public function getNodeTypes() : array * @param ClassMethod|Function_ $node * @return null|\PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_ */ - public function refactorWithScope(Node $node, Scope $scope) + public function refactor(Node $node) { $stmts = $node->stmts; if ($stmts === null || $stmts === []) { @@ -114,6 +115,7 @@ public function refactorWithScope(Node $node, Scope $scope) $currentStmt = $stmts[$stmtPosition]; /** @var Assign $assign */ $assign = $currentStmt->expr; + $scope = ScopeFetcher::fetch($node); if ($this->hasCallLikeInAssignExpr($assign, $scope)) { // clean safely $cleanAssignedExpr = $this->cleanCastedExpr($assign->expr); diff --git a/rules/DeadCode/Rector/ClassConst/RemoveUnusedPrivateClassConstantRector.php b/rules/DeadCode/Rector/ClassConst/RemoveUnusedPrivateClassConstantRector.php index 07fa2f35491..9f4e00bdfc6 100644 --- a/rules/DeadCode/Rector/ClassConst/RemoveUnusedPrivateClassConstantRector.php +++ b/rules/DeadCode/Rector/ClassConst/RemoveUnusedPrivateClassConstantRector.php @@ -6,17 +6,17 @@ use PhpParser\Node; use PhpParser\Node\Stmt\ClassConst; use PhpParser\NodeTraverser; -use PHPStan\Analyser\Scope; use PHPStan\Reflection\ClassReflection; use Rector\NodeManipulator\ClassConstManipulator; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Rector\Reflection\ReflectionResolver; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** * @see \Rector\Tests\DeadCode\Rector\ClassConst\RemoveUnusedPrivateClassConstantRector\RemoveUnusedPrivateClassConstantRectorTest */ -final class RemoveUnusedPrivateClassConstantRector extends AbstractScopeAwareRector +final class RemoveUnusedPrivateClassConstantRector extends AbstractRector { /** * @readonly @@ -65,9 +65,9 @@ public function getNodeTypes() : array /** * @param ClassConst $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?int + public function refactor(Node $node) : ?int { - if ($this->shouldSkipClassConst($node, $scope)) { + if ($this->shouldSkipClassConst($node)) { return null; } $classReflection = $this->reflectionResolver->resolveClassReflection($node); @@ -79,7 +79,7 @@ public function refactorWithScope(Node $node, Scope $scope) : ?int } return NodeTraverser::REMOVE_NODE; } - private function shouldSkipClassConst(ClassConst $classConst, Scope $scope) : bool + private function shouldSkipClassConst(ClassConst $classConst) : bool { if (!$classConst->isPrivate()) { return \true; @@ -87,6 +87,7 @@ private function shouldSkipClassConst(ClassConst $classConst, Scope $scope) : bo if (\count($classConst->consts) !== 1) { return \true; } + $scope = ScopeFetcher::fetch($classConst); $classReflection = $scope->getClassReflection(); if (!$classReflection instanceof ClassReflection) { return \false; diff --git a/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPrivateMethodRector.php b/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPrivateMethodRector.php index 7fbd8a46507..a7878ea276a 100644 --- a/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPrivateMethodRector.php +++ b/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPrivateMethodRector.php @@ -8,12 +8,12 @@ use PhpParser\Node\Expr\Variable; use PhpParser\Node\Stmt\Class_; use PhpParser\Node\Stmt\ClassMethod; -use PHPStan\Analyser\Scope; use PHPStan\Reflection\ClassReflection; use Rector\DeadCode\NodeAnalyzer\IsClassMethodUsedAnalyzer; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\PhpParser\Node\BetterNodeFinder; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Rector\Reflection\ReflectionResolver; use Rector\ValueObject\MethodName; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; @@ -21,7 +21,7 @@ /** * @see \Rector\Tests\DeadCode\Rector\ClassMethod\RemoveUnusedPrivateMethodRector\RemoveUnusedPrivateMethodRectorTest */ -final class RemoveUnusedPrivateMethodRector extends AbstractScopeAwareRector +final class RemoveUnusedPrivateMethodRector extends AbstractRector { /** * @readonly @@ -81,8 +81,9 @@ public function getNodeTypes() : array /** * @param Class_ $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); $classMethods = $node->getMethods(); if ($classMethods === []) { return null; diff --git a/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPromotedPropertyRector.php b/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPromotedPropertyRector.php index ac56943d05a..9235c073dd8 100644 --- a/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPromotedPropertyRector.php +++ b/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPromotedPropertyRector.php @@ -8,7 +8,6 @@ use PhpParser\Node\Stmt\Class_; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\TraitUse; -use PHPStan\Analyser\Scope; use PHPStan\PhpDocParser\Ast\PhpDoc\ParamTagValueNode; use PHPStan\Reflection\ClassReflection; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo; @@ -19,7 +18,7 @@ use Rector\PhpParser\Node\BetterNodeFinder; use Rector\PhpParser\NodeFinder\PropertyFetchFinder; use Rector\Privatization\NodeManipulator\VisibilityManipulator; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\Rector\AbstractRector; use Rector\Reflection\ReflectionResolver; use Rector\ValueObject\MethodName; use Rector\ValueObject\PhpVersionFeature; @@ -30,7 +29,7 @@ /** * @see \Rector\Tests\DeadCode\Rector\ClassMethod\RemoveUnusedPromotedPropertyRector\RemoveUnusedPromotedPropertyRectorTest */ -final class RemoveUnusedPromotedPropertyRector extends AbstractScopeAwareRector implements MinPhpVersionInterface +final class RemoveUnusedPromotedPropertyRector extends AbstractRector implements MinPhpVersionInterface { /** * @readonly @@ -126,7 +125,7 @@ public function getNodeTypes() : array /** * @param Class_ $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { $constructClassMethod = $node->getMethod(MethodName::CONSTRUCT); if (!$constructClassMethod instanceof ClassMethod) { diff --git a/rules/DeadCode/Rector/If_/ReduceAlwaysFalseIfOrRector.php b/rules/DeadCode/Rector/If_/ReduceAlwaysFalseIfOrRector.php index 3c741f2504b..87e3d6d0b4b 100644 --- a/rules/DeadCode/Rector/If_/ReduceAlwaysFalseIfOrRector.php +++ b/rules/DeadCode/Rector/If_/ReduceAlwaysFalseIfOrRector.php @@ -6,7 +6,6 @@ use PhpParser\Node; use PhpParser\Node\Expr\BinaryOp\BooleanOr; use PhpParser\Node\Stmt\If_; -use PHPStan\Type\Constant\ConstantBooleanType; use Rector\DeadCode\NodeAnalyzer\SafeLeftTypeBooleanAndOrAnalyzer; use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; @@ -72,10 +71,7 @@ public function refactor(Node $node) : ?Node } $booleanOr = $node->cond; $conditionStaticType = $this->getType($booleanOr->left); - if (!$conditionStaticType instanceof ConstantBooleanType) { - return null; - } - if ($conditionStaticType->getValue()) { + if (!$conditionStaticType->isFalse()->yes()) { return null; } if (!$this->safeLeftTypeBooleanAndOrAnalyzer->isSafe($booleanOr)) { diff --git a/rules/DeadCode/Rector/If_/RemoveAlwaysTrueIfConditionRector.php b/rules/DeadCode/Rector/If_/RemoveAlwaysTrueIfConditionRector.php index 2138bea8747..b08b1e200fe 100644 --- a/rules/DeadCode/Rector/If_/RemoveAlwaysTrueIfConditionRector.php +++ b/rules/DeadCode/Rector/If_/RemoveAlwaysTrueIfConditionRector.php @@ -17,8 +17,6 @@ use PhpParser\Node\Stmt\Else_; use PhpParser\Node\Stmt\If_; use PhpParser\NodeTraverser; -use PHPStan\Type\ArrayType; -use PHPStan\Type\Constant\ConstantBooleanType; use PHPStan\Type\IntersectionType; use Rector\DeadCode\NodeAnalyzer\SafeLeftTypeBooleanAndOrAnalyzer; use Rector\NodeAnalyzer\ExprAnalyzer; @@ -104,10 +102,7 @@ public function refactor(Node $node) return null; } $conditionStaticType = $this->getType($node->cond); - if (!$conditionStaticType instanceof ConstantBooleanType) { - return null; - } - if (!$conditionStaticType->getValue()) { + if (!$conditionStaticType->isTrue()->yes()) { return null; } if ($this->shouldSkipExpr($node->cond)) { @@ -136,7 +131,7 @@ private function shouldSkipFromVariable(Expr $expr) : bool $type = $this->getType($variable); if ($type instanceof IntersectionType) { foreach ($type->getTypes() as $subType) { - if ($subType instanceof ArrayType) { + if ($subType->isArray()->yes()) { return \true; } } @@ -155,10 +150,7 @@ private function refactorIfWithBooleanAnd(If_ $if) : ?If_ } $booleanAnd = $if->cond; $leftType = $this->getType($booleanAnd->left); - if (!$leftType instanceof ConstantBooleanType) { - return null; - } - if (!$leftType->getValue()) { + if (!$leftType->isTrue()->yes()) { return null; } if (!$this->safeLeftTypeBooleanAndOrAnalyzer->isSafe($booleanAnd)) { diff --git a/rules/DeadCode/Rector/If_/RemoveUnusedNonEmptyArrayBeforeForeachRector.php b/rules/DeadCode/Rector/If_/RemoveUnusedNonEmptyArrayBeforeForeachRector.php index 1b812b22890..8dd5a2cfbb1 100644 --- a/rules/DeadCode/Rector/If_/RemoveUnusedNonEmptyArrayBeforeForeachRector.php +++ b/rules/DeadCode/Rector/If_/RemoveUnusedNonEmptyArrayBeforeForeachRector.php @@ -20,13 +20,14 @@ use Rector\NodeManipulator\IfManipulator; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\Php\ReservedKeywordAnalyzer; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** * @see \Rector\Tests\DeadCode\Rector\If_\RemoveUnusedNonEmptyArrayBeforeForeachRector\RemoveUnusedNonEmptyArrayBeforeForeachRectorTest */ -final class RemoveUnusedNonEmptyArrayBeforeForeachRector extends AbstractScopeAwareRector +final class RemoveUnusedNonEmptyArrayBeforeForeachRector extends AbstractRector { /** * @readonly @@ -102,9 +103,10 @@ public function getNodeTypes() : array * @param If_|StmtsAwareInterface $node * @return Stmt[]|Foreach_|StmtsAwareInterface|null */ - public function refactorWithScope(Node $node, Scope $scope) + public function refactor(Node $node) { if ($node instanceof If_) { + $scope = ScopeFetcher::fetch($node); return $this->refactorIf($node, $scope); } return $this->refactorStmtsAware($node); diff --git a/rules/DeadCode/Rector/Property/RemoveUnusedPrivatePropertyRector.php b/rules/DeadCode/Rector/Property/RemoveUnusedPrivatePropertyRector.php index 41083d090a7..2282a849f07 100644 --- a/rules/DeadCode/Rector/Property/RemoveUnusedPrivatePropertyRector.php +++ b/rules/DeadCode/Rector/Property/RemoveUnusedPrivatePropertyRector.php @@ -11,19 +11,18 @@ use PhpParser\Node\Stmt\Return_; use PhpParser\Node\Stmt\TraitUse; use PhpParser\NodeTraverser; -use PHPStan\Analyser\Scope; use Rector\BetterPhpDocParser\PhpDoc\DoctrineAnnotationTagValueNode; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; use Rector\DeadCode\NodeAnalyzer\PropertyWriteonlyAnalyzer; use Rector\PhpParser\NodeFinder\PropertyFetchFinder; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** * @see \Rector\Tests\DeadCode\Rector\Property\RemoveUnusedPrivatePropertyRector\RemoveUnusedPrivatePropertyRectorTest */ -final class RemoveUnusedPrivatePropertyRector extends AbstractScopeAwareRector +final class RemoveUnusedPrivatePropertyRector extends AbstractRector { /** * @readonly @@ -71,7 +70,7 @@ public function getNodeTypes() : array /** * @param Class_ $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { if ($this->shouldSkipClass($node)) { return null; diff --git a/rules/Naming/Guard/BreakingVariableRenameGuard.php b/rules/Naming/Guard/BreakingVariableRenameGuard.php index 987ff0b21a2..38930fc7a27 100644 --- a/rules/Naming/Guard/BreakingVariableRenameGuard.php +++ b/rules/Naming/Guard/BreakingVariableRenameGuard.php @@ -14,7 +14,6 @@ use PhpParser\Node\Stmt\Function_; use PHPStan\Analyser\Scope; use PHPStan\Type\ObjectType; -use PHPStan\Type\TypeWithClassName; use Rector\Naming\Naming\ConflictingNameResolver; use Rector\Naming\Naming\OverridenExistingNamesResolver; use Rector\NodeNameResolver\NodeNameResolver; @@ -22,6 +21,7 @@ use Rector\NodeTypeResolver\NodeTypeResolver; use Rector\PhpParser\Node\BetterNodeFinder; use Rector\PHPStanStaticTypeMapper\Utils\TypeUnwrapper; +use Rector\StaticTypeMapper\Resolver\ClassNameFromObjectTypeResolver; use Rector\Util\StringUtils; /** * This class check if a variable name change breaks existing code in class method @@ -178,10 +178,11 @@ private function isDateTimeAtNamingConvention(Param $param) : bool { $type = $this->nodeTypeResolver->getType($param); $type = $this->typeUnwrapper->unwrapFirstObjectTypeFromUnionType($type); - if (!$type instanceof TypeWithClassName) { + $className = ClassNameFromObjectTypeResolver::resolve($type); + if ($className === null) { return \false; } - if (!\is_a($type->getClassName(), DateTimeInterface::class, \true)) { + if (!\is_a($className, DateTimeInterface::class, \true)) { return \false; } /** @var string $currentName */ diff --git a/rules/Naming/Guard/DateTimeAtNamingConventionGuard.php b/rules/Naming/Guard/DateTimeAtNamingConventionGuard.php index 7d1a3933c86..77460d371a9 100644 --- a/rules/Naming/Guard/DateTimeAtNamingConventionGuard.php +++ b/rules/Naming/Guard/DateTimeAtNamingConventionGuard.php @@ -4,10 +4,10 @@ namespace Rector\Naming\Guard; use DateTimeInterface; -use PHPStan\Type\TypeWithClassName; use Rector\Naming\ValueObject\PropertyRename; use Rector\NodeTypeResolver\NodeTypeResolver; use Rector\PHPStanStaticTypeMapper\Utils\TypeUnwrapper; +use Rector\StaticTypeMapper\Resolver\ClassNameFromObjectTypeResolver; use Rector\Util\StringUtils; final class DateTimeAtNamingConventionGuard { @@ -30,10 +30,11 @@ public function isConflicting(PropertyRename $propertyRename) : bool { $type = $this->nodeTypeResolver->getType($propertyRename->getProperty()); $type = $this->typeUnwrapper->unwrapFirstObjectTypeFromUnionType($type); - if (!$type instanceof TypeWithClassName) { + $className = ClassNameFromObjectTypeResolver::resolve($type); + if ($className === null) { return \false; } - if (!\is_a($type->getClassName(), DateTimeInterface::class, \true)) { + if (!\is_a($className, DateTimeInterface::class, \true)) { return \false; } return StringUtils::isMatch($propertyRename->getCurrentName(), \Rector\Naming\Guard\BreakingVariableRenameGuard::AT_NAMING_REGEX); diff --git a/rules/Naming/Naming/ExpectedNameResolver.php b/rules/Naming/Naming/ExpectedNameResolver.php index 571407e60f5..fc84ad6bcf8 100644 --- a/rules/Naming/Naming/ExpectedNameResolver.php +++ b/rules/Naming/Naming/ExpectedNameResolver.php @@ -116,7 +116,7 @@ public function resolveForCall($expr) : ?string return null; } $returnedType = $this->nodeTypeResolver->getType($expr); - if (!$returnedType->isObject()->yes()) { + if (!$returnedType instanceof ObjectType) { return null; } if ($this->isDateTimeType($returnedType)) { @@ -197,14 +197,11 @@ private function resolveReturnTypeFromArrayType(ArrayType $arrayType) : ?Type /** * Skip date time, as custom naming */ - private function isDateTimeType(Type $type) : bool + private function isDateTimeType(ObjectType $objectType) : bool { - if (!$type instanceof ObjectType) { - return \false; - } - if ($type->isInstanceOf('DateTimeInterface')->yes()) { + if ($objectType->isInstanceOf('DateTimeInterface')->yes()) { return \true; } - return $type->isInstanceOf('DateTime')->yes(); + return $objectType->isInstanceOf('DateTime')->yes(); } } diff --git a/rules/Naming/Naming/PropertyNaming.php b/rules/Naming/Naming/PropertyNaming.php index f1f88f28048..6bb482e2469 100644 --- a/rules/Naming/Naming/PropertyNaming.php +++ b/rules/Naming/Naming/PropertyNaming.php @@ -15,6 +15,7 @@ use Rector\Naming\RectorNamingInflector; use Rector\Naming\ValueObject\ExpectedName; use Rector\NodeTypeResolver\NodeTypeResolver; +use Rector\StaticTypeMapper\Resolver\ClassNameFromObjectTypeResolver; use Rector\StaticTypeMapper\ValueObject\Type\AliasedObjectType; use Rector\StaticTypeMapper\ValueObject\Type\SelfObjectType; use Rector\Util\StringUtils; @@ -238,7 +239,8 @@ private function normalizeShortClassName(string $shortClassName) : string private function resolveClassNameFromType(Type $type) : ?string { $type = TypeCombinator::removeNull($type); - if (!$type instanceof TypeWithClassName) { + $className = ClassNameFromObjectTypeResolver::resolve($type); + if ($className === null) { return null; } if ($type instanceof SelfObjectType) { @@ -251,6 +253,10 @@ private function resolveClassNameFromType(Type $type) : ?string if ($type instanceof GenericObjectType) { return null; } - return $type instanceof AliasedObjectType ? $type->getClassName() : $this->nodeTypeResolver->getFullyQualifiedClassName($type); + if ($type instanceof AliasedObjectType) { + return $className; + } + /** @var TypeWithClassName $type */ + return $this->nodeTypeResolver->getFullyQualifiedClassName($type); } } diff --git a/rules/Php52/Rector/Switch_/ContinueToBreakInSwitchRector.php b/rules/Php52/Rector/Switch_/ContinueToBreakInSwitchRector.php index 77587601ba4..ee77f74d991 100644 --- a/rules/Php52/Rector/Switch_/ContinueToBreakInSwitchRector.php +++ b/rules/Php52/Rector/Switch_/ContinueToBreakInSwitchRector.php @@ -20,7 +20,6 @@ use PhpParser\Node\Stmt\While_; use PhpParser\NodeTraverser; use PHPStan\Type\Constant\ConstantIntegerType; -use PHPStan\Type\ConstantType; use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\PhpParser\Node\Value\ValueResolver; use Rector\Rector\AbstractRector; @@ -143,7 +142,7 @@ private function processContinueStatement($stmt) : void private function processVariableNum(Continue_ $continue, Variable $numVariable) { $staticType = $this->getType($numVariable); - if (!$staticType instanceof ConstantType) { + if (!$staticType->isConstantValue()->yes()) { return $continue; } if (!$staticType instanceof ConstantIntegerType) { diff --git a/rules/Php54/Rector/Break_/RemoveZeroBreakContinueRector.php b/rules/Php54/Rector/Break_/RemoveZeroBreakContinueRector.php index 93467812362..616e06063d3 100644 --- a/rules/Php54/Rector/Break_/RemoveZeroBreakContinueRector.php +++ b/rules/Php54/Rector/Break_/RemoveZeroBreakContinueRector.php @@ -10,7 +10,6 @@ use PhpParser\Node\Stmt\Break_; use PhpParser\Node\Stmt\Continue_; use PHPStan\Type\Constant\ConstantIntegerType; -use PHPStan\Type\ConstantType; use Rector\PhpParser\Node\Value\ValueResolver; use Rector\Rector\AbstractRector; use Rector\ValueObject\PhpVersionFeature; @@ -106,7 +105,7 @@ public function refactor(Node $node) : ?Node private function processVariableNum($stmt, Variable $numVariable) : ?Node { $staticType = $this->getType($numVariable); - if ($staticType instanceof ConstantType) { + if ($staticType->isConstantValue()->yes()) { if ($staticType instanceof ConstantIntegerType) { if ($staticType->getValue() === 0) { $stmt->num = null; diff --git a/rules/Php55/Rector/FuncCall/GetCalledClassToStaticClassRector.php b/rules/Php55/Rector/FuncCall/GetCalledClassToStaticClassRector.php index ed176ff2ca7..b42bd65b6ed 100644 --- a/rules/Php55/Rector/FuncCall/GetCalledClassToStaticClassRector.php +++ b/rules/Php55/Rector/FuncCall/GetCalledClassToStaticClassRector.php @@ -5,9 +5,9 @@ use PhpParser\Node; use PhpParser\Node\Expr\FuncCall; -use PHPStan\Analyser\Scope; use Rector\Enum\ObjectReference; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Rector\ValueObject\PhpVersionFeature; use Rector\VersionBonding\Contract\MinPhpVersionInterface; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; @@ -15,7 +15,7 @@ /** * @see \Rector\Tests\Php55\Rector\FuncCall\GetCalledClassToStaticClassRector\GetCalledClassToStaticClassRectorTest */ -final class GetCalledClassToStaticClassRector extends AbstractScopeAwareRector implements MinPhpVersionInterface +final class GetCalledClassToStaticClassRector extends AbstractRector implements MinPhpVersionInterface { public function getRuleDefinition() : RuleDefinition { @@ -49,8 +49,9 @@ public function getNodeTypes() : array /** * @param FuncCall $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); if (!$this->isName($node, 'get_called_class')) { return null; } diff --git a/rules/Php70/Rector/ClassMethod/Php4ConstructorRector.php b/rules/Php70/Rector/ClassMethod/Php4ConstructorRector.php index 9df393c1fc0..aee27804ffa 100644 --- a/rules/Php70/Rector/ClassMethod/Php4ConstructorRector.php +++ b/rules/Php70/Rector/ClassMethod/Php4ConstructorRector.php @@ -18,7 +18,8 @@ use Rector\NodeCollector\ScopeResolver\ParentClassScopeResolver; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\Php70\NodeAnalyzer\Php4ConstructorClassMethodAnalyzer; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Rector\ValueObject\MethodName; use Rector\ValueObject\PhpVersionFeature; use Rector\VersionBonding\Contract\MinPhpVersionInterface; @@ -27,7 +28,7 @@ /** * @see \Rector\Tests\Php70\Rector\ClassMethod\Php4ConstructorRector\Php4ConstructorRectorTest */ -final class Php4ConstructorRector extends AbstractScopeAwareRector implements MinPhpVersionInterface +final class Php4ConstructorRector extends AbstractRector implements MinPhpVersionInterface { /** * @readonly @@ -79,7 +80,7 @@ public function getNodeTypes() : array * @param Class_ $node * @return \PhpParser\Node\Stmt\Class_|int|null */ - public function refactorWithScope(Node $node, Scope $scope) + public function refactor(Node $node) { $className = $this->getName($node); if (!\is_string($className)) { @@ -89,6 +90,7 @@ public function refactorWithScope(Node $node, Scope $scope) if (!$psr4ConstructorMethod instanceof ClassMethod) { return null; } + $scope = ScopeFetcher::fetch($node); if (!$this->php4ConstructorClassMethodAnalyzer->detect($psr4ConstructorMethod, $scope)) { return null; } diff --git a/rules/Php70/Rector/MethodCall/ThisCallOnStaticMethodToStaticCallRector.php b/rules/Php70/Rector/MethodCall/ThisCallOnStaticMethodToStaticCallRector.php index 491a2a36d76..2473a3e1b26 100644 --- a/rules/Php70/Rector/MethodCall/ThisCallOnStaticMethodToStaticCallRector.php +++ b/rules/Php70/Rector/MethodCall/ThisCallOnStaticMethodToStaticCallRector.php @@ -11,12 +11,12 @@ use PhpParser\Node\Scalar\Encapsed; use PhpParser\Node\Stmt\Class_; use PhpParser\NodeTraverser; -use PHPStan\Analyser\Scope; use PHPStan\Reflection\ClassReflection; use PHPStan\Reflection\Php\PhpMethodReflection; use Rector\Enum\ObjectReference; use Rector\NodeCollector\StaticAnalyzer; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Rector\Reflection\ReflectionResolver; use Rector\ValueObject\PhpVersionFeature; use Rector\VersionBonding\Contract\MinPhpVersionInterface; @@ -25,7 +25,7 @@ /** * @see \Rector\Tests\Php70\Rector\MethodCall\ThisCallOnStaticMethodToStaticCallRector\ThisCallOnStaticMethodToStaticCallRectorTest */ -final class ThisCallOnStaticMethodToStaticCallRector extends AbstractScopeAwareRector implements MinPhpVersionInterface +final class ThisCallOnStaticMethodToStaticCallRector extends AbstractRector implements MinPhpVersionInterface { /** * @readonly @@ -90,8 +90,9 @@ public function getNodeTypes() : array /** * @param Class_ $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); if (!$scope->isInClass()) { return null; } diff --git a/rules/Php70/Rector/StaticCall/StaticCallOnNonStaticToInstanceCallRector.php b/rules/Php70/Rector/StaticCall/StaticCallOnNonStaticToInstanceCallRector.php index f296aef615d..6773f519952 100644 --- a/rules/Php70/Rector/StaticCall/StaticCallOnNonStaticToInstanceCallRector.php +++ b/rules/Php70/Rector/StaticCall/StaticCallOnNonStaticToInstanceCallRector.php @@ -18,7 +18,8 @@ use Rector\Enum\ObjectReference; use Rector\NodeCollector\ScopeResolver\ParentClassScopeResolver; use Rector\NodeCollector\StaticAnalyzer; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Rector\Reflection\ReflectionResolver; use Rector\ValueObject\PhpVersionFeature; use Rector\VersionBonding\Contract\MinPhpVersionInterface; @@ -28,7 +29,7 @@ /** * @see \Rector\Tests\Php70\Rector\StaticCall\StaticCallOnNonStaticToInstanceCallRector\StaticCallOnNonStaticToInstanceCallRectorTest */ -final class StaticCallOnNonStaticToInstanceCallRector extends AbstractScopeAwareRector implements MinPhpVersionInterface +final class StaticCallOnNonStaticToInstanceCallRector extends AbstractRector implements MinPhpVersionInterface { /** * @readonly @@ -107,8 +108,9 @@ public function getNodeTypes() : array /** * @param StaticCall $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); if ($node->name instanceof Expr) { return null; } diff --git a/rules/Php71/Rector/ClassConst/PublicConstantVisibilityRector.php b/rules/Php71/Rector/ClassConst/PublicConstantVisibilityRector.php deleted file mode 100644 index 45e1bbada7a..00000000000 --- a/rules/Php71/Rector/ClassConst/PublicConstantVisibilityRector.php +++ /dev/null @@ -1,64 +0,0 @@ -visibilityManipulator = $visibilityManipulator; - } - public function getRuleDefinition() : RuleDefinition - { - return new RuleDefinition('Add explicit public constant visibility.', [new CodeSample(<<<'CODE_SAMPLE' -class SomeClass -{ - const HEY = 'you'; -} -CODE_SAMPLE -, <<<'CODE_SAMPLE' -class SomeClass -{ - public const HEY = 'you'; -} -CODE_SAMPLE -)]); - } - /** - * @return array> - */ - public function getNodeTypes() : array - { - return [ClassConst::class]; - } - /** - * @param ClassConst $node - */ - public function refactor(Node $node) : ?Node - { - return $this->visibilityManipulator->publicize($node); - } - public function provideMinPhpVersion() : int - { - return PhpVersionFeature::CONSTANT_VISIBILITY; - } -} diff --git a/rules/Php72/Rector/FuncCall/GetClassOnNullRector.php b/rules/Php72/Rector/FuncCall/GetClassOnNullRector.php index c1cd45aa49b..065c08d490f 100644 --- a/rules/Php72/Rector/FuncCall/GetClassOnNullRector.php +++ b/rules/Php72/Rector/FuncCall/GetClassOnNullRector.php @@ -10,10 +10,8 @@ use PhpParser\Node\Expr\Ternary; use PhpParser\Node\Stmt\Class_; use PhpParser\NodeTraverser; -use PHPStan\Analyser\Scope; -use PHPStan\Type\NullType; use Rector\NodeTypeResolver\Node\AttributeKey; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\Rector\AbstractRector; use Rector\ValueObject\PhpVersionFeature; use Rector\VersionBonding\Contract\MinPhpVersionInterface; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; @@ -21,7 +19,7 @@ /** * @see \Rector\Tests\Php72\Rector\FuncCall\GetClassOnNullRector\GetClassOnNullRectorTest */ -final class GetClassOnNullRector extends AbstractScopeAwareRector implements MinPhpVersionInterface +final class GetClassOnNullRector extends AbstractRector implements MinPhpVersionInterface { public function provideMinPhpVersion() : int { @@ -61,7 +59,7 @@ public function getNodeTypes() : array /** * @param Class_ $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { $hasChanged = \false; $this->traverseNodesWithCallable($node, function (Node $node) use(&$hasChanged) { @@ -87,7 +85,7 @@ public function refactorWithScope(Node $node, Scope $scope) : ?Node } $firstArgValue = $firstArg->value; $firstArgType = $this->getType($firstArgValue); - if (!$this->nodeTypeResolver->isNullableType($firstArgValue) && !$firstArgType instanceof NullType) { + if (!$this->nodeTypeResolver->isNullableType($firstArgValue) && !$firstArgType->isNull()->yes()) { return null; } $notIdentical = new NotIdentical($firstArgValue, $this->nodeFactory->createNull()); diff --git a/rules/Php80/Rector/ClassConstFetch/ClassOnThisVariableObjectRector.php b/rules/Php80/Rector/ClassConstFetch/ClassOnThisVariableObjectRector.php index 84e4fc931f1..65d755c4828 100644 --- a/rules/Php80/Rector/ClassConstFetch/ClassOnThisVariableObjectRector.php +++ b/rules/Php80/Rector/ClassConstFetch/ClassOnThisVariableObjectRector.php @@ -9,8 +9,7 @@ use PhpParser\Node\Identifier; use PhpParser\Node\Name; use PhpParser\Node\Stmt\Class_; -use PHPStan\Analyser\Scope; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\Rector\AbstractRector; use Rector\ValueObject\PhpVersionFeature; use Rector\VersionBonding\Contract\MinPhpVersionInterface; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; @@ -21,7 +20,7 @@ * * @see \Rector\Tests\Php80\Rector\ClassConstFetch\ClassOnThisVariableObjectRector\ClassOnThisVariableObjectRectorTest */ -final class ClassOnThisVariableObjectRector extends AbstractScopeAwareRector implements MinPhpVersionInterface +final class ClassOnThisVariableObjectRector extends AbstractRector implements MinPhpVersionInterface { public function getRuleDefinition() : RuleDefinition { @@ -55,7 +54,7 @@ public function getNodeTypes() : array /** * @param Class_ $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { $className = $node->isFinal() ? 'self' : 'static'; $hasChanged = \false; diff --git a/rules/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector.php b/rules/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector.php index b404f5ef582..813bbd3815c 100644 --- a/rules/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector.php +++ b/rules/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector.php @@ -185,6 +185,7 @@ public function refactor(Node $node) : ?Node if (!$classReflection instanceof ClassReflection) { return null; } + $hasChanged = \false; foreach ($promotionCandidates as $promotionCandidate) { $param = $promotionCandidate->getParam(); if ($this->shouldSkipParam($param)) { @@ -200,6 +201,7 @@ public function refactor(Node $node) : ?Node if (!$this->renameProperty && $paramName !== $propertyName) { continue; } + $hasChanged = \true; // remove property from class $propertyStmtKey = $property->getAttribute(AttributeKey::STMT_KEY); unset($node->stmts[$propertyStmtKey]); @@ -234,6 +236,9 @@ public function refactor(Node $node) : ?Node return new PropertyFetch(new Variable('this'), $propertyName); }); } + if (!$hasChanged) { + return null; + } return $node; } public function provideMinPhpVersion() : int diff --git a/rules/Php81/Rector/Array_/FirstClassCallableRector.php b/rules/Php81/Rector/Array_/FirstClassCallableRector.php index 4ef676e4e19..b5b320b28ca 100644 --- a/rules/Php81/Rector/Array_/FirstClassCallableRector.php +++ b/rules/Php81/Rector/Array_/FirstClassCallableRector.php @@ -19,7 +19,8 @@ use PHPStan\Reflection\ReflectionProvider; use Rector\NodeCollector\NodeAnalyzer\ArrayCallableMethodMatcher; use Rector\NodeCollector\ValueObject\ArrayCallable; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Rector\Reflection\ReflectionResolver; use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType; use Rector\ValueObject\PhpVersion; @@ -29,7 +30,7 @@ /** * @see \Rector\Tests\Php81\Rector\Array_\FirstClassCallableRector\FirstClassCallableRectorTest */ -final class FirstClassCallableRector extends AbstractScopeAwareRector implements MinPhpVersionInterface +final class FirstClassCallableRector extends AbstractRector implements MinPhpVersionInterface { /** * @readonly @@ -94,11 +95,12 @@ public function getNodeTypes() : array * @param Property|ClassConst|Array_ $node * @return int|null|\PhpParser\Node\Expr\StaticCall|\PhpParser\Node\Expr\MethodCall */ - public function refactorWithScope(Node $node, Scope $scope) + public function refactor(Node $node) { if ($node instanceof Property || $node instanceof ClassConst) { return NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN; } + $scope = ScopeFetcher::fetch($node); $arrayCallable = $this->arrayCallableMethodMatcher->match($node, $scope); if (!$arrayCallable instanceof ArrayCallable) { return null; diff --git a/rules/Php81/Rector/FuncCall/NullToStrictStringFuncCallArgRector.php b/rules/Php81/Rector/FuncCall/NullToStrictStringFuncCallArgRector.php index 93ef873e63e..2e035193a1e 100644 --- a/rules/Php81/Rector/FuncCall/NullToStrictStringFuncCallArgRector.php +++ b/rules/Php81/Rector/FuncCall/NullToStrictStringFuncCallArgRector.php @@ -21,7 +21,6 @@ use PHPStan\Reflection\ParametersAcceptor; use PHPStan\Type\ErrorType; use PHPStan\Type\MixedType; -use PHPStan\Type\NullType; use PHPStan\Type\Type; use PHPStan\Type\UnionType; use Rector\NodeAnalyzer\ArgsAnalyzer; @@ -222,7 +221,7 @@ private function isValidUnionType(Type $type) : bool } private function shouldSkipType(Type $type) : bool { - return !$type instanceof MixedType && !$type instanceof NullType && !$this->isValidUnionType($type); + return !$type instanceof MixedType && !$type->isNull()->yes() && !$this->isValidUnionType($type); } private function shouldSkipTrait(Expr $expr, Type $type, bool $isTrait) : bool { diff --git a/rules/Php81/Rector/Property/ReadOnlyPropertyRector.php b/rules/Php81/Rector/Property/ReadOnlyPropertyRector.php index 0fcf2aa069f..646cd019c66 100644 --- a/rules/Php81/Rector/Property/ReadOnlyPropertyRector.php +++ b/rules/Php81/Rector/Property/ReadOnlyPropertyRector.php @@ -24,8 +24,9 @@ use Rector\NodeManipulator\PropertyManipulator; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\PhpParser\Node\BetterNodeFinder; +use Rector\PHPStan\ScopeFetcher; use Rector\Privatization\NodeManipulator\VisibilityManipulator; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\Rector\AbstractRector; use Rector\ValueObject\MethodName; use Rector\ValueObject\PhpVersionFeature; use Rector\ValueObject\Visibility; @@ -35,7 +36,7 @@ /** * @see \Rector\Tests\Php81\Rector\Property\ReadOnlyPropertyRector\ReadOnlyPropertyRectorTest */ -final class ReadOnlyPropertyRector extends AbstractScopeAwareRector implements MinPhpVersionInterface +final class ReadOnlyPropertyRector extends AbstractRector implements MinPhpVersionInterface { /** * @readonly @@ -124,8 +125,9 @@ public function getNodeTypes() : array /** * @param Class_ $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); if ($this->shouldSkip($node)) { return null; } diff --git a/rules/Php82/Rector/Class_/ReadOnlyClassRector.php b/rules/Php82/Rector/Class_/ReadOnlyClassRector.php index a4d64529b9a..12d0e6df6c7 100644 --- a/rules/Php82/Rector/Class_/ReadOnlyClassRector.php +++ b/rules/Php82/Rector/Class_/ReadOnlyClassRector.php @@ -17,8 +17,9 @@ use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\Php80\NodeAnalyzer\PhpAttributeAnalyzer; use Rector\Php81\Enum\AttributeName; +use Rector\PHPStan\ScopeFetcher; use Rector\Privatization\NodeManipulator\VisibilityManipulator; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\Rector\AbstractRector; use Rector\ValueObject\MethodName; use Rector\ValueObject\PhpVersionFeature; use Rector\ValueObject\Visibility; @@ -28,7 +29,7 @@ /** * @see \Rector\Tests\Php82\Rector\Class_\ReadOnlyClassRector\ReadOnlyClassRectorTest */ -final class ReadOnlyClassRector extends AbstractScopeAwareRector implements MinPhpVersionInterface +final class ReadOnlyClassRector extends AbstractRector implements MinPhpVersionInterface { /** * @readonly @@ -89,8 +90,9 @@ public function getNodeTypes() : array /** * @param Class_ $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); if ($this->shouldSkip($node, $scope)) { return null; } diff --git a/rules/Php83/Rector/FuncCall/RemoveGetClassGetParentClassNoArgsRector.php b/rules/Php83/Rector/FuncCall/RemoveGetClassGetParentClassNoArgsRector.php new file mode 100644 index 00000000000..7125d1968ec --- /dev/null +++ b/rules/Php83/Rector/FuncCall/RemoveGetClassGetParentClassNoArgsRector.php @@ -0,0 +1,73 @@ +> + */ + public function getNodeTypes() : array + { + return [FuncCall::class]; + } + /** + * @param FuncCall $node + */ + public function refactor(Node $node) : ?Node + { + if ($node->isFirstClassCallable()) { + return null; + } + if (\count($node->getArgs()) !== 0) { + return null; + } + $target = null; + if ($this->isName($node, 'get_class')) { + $target = 'self'; + } + if ($this->isName($node, 'get_parent_class')) { + $target = 'parent'; + } + if ($target !== null) { + return new ClassConstFetch(new Name([$target]), new VarLikeIdentifier('class')); + } + return null; + } + public function provideMinPhpVersion() : int + { + return PhpVersionFeature::DEPRECATE_GET_CLASS_WITHOUT_ARGS; + } +} diff --git a/rules/Privatization/Rector/ClassMethod/PrivatizeFinalClassMethodRector.php b/rules/Privatization/Rector/ClassMethod/PrivatizeFinalClassMethodRector.php index b8af8fa78ca..51b1949fcd8 100644 --- a/rules/Privatization/Rector/ClassMethod/PrivatizeFinalClassMethodRector.php +++ b/rules/Privatization/Rector/ClassMethod/PrivatizeFinalClassMethodRector.php @@ -7,19 +7,19 @@ use PhpParser\Node\Expr\StaticCall; use PhpParser\Node\Stmt\Class_; use PhpParser\Node\Stmt\ClassMethod; -use PHPStan\Analyser\Scope; use PHPStan\Reflection\ClassReflection; use Rector\PhpParser\Node\BetterNodeFinder; +use Rector\PHPStan\ScopeFetcher; use Rector\Privatization\Guard\OverrideByParentClassGuard; use Rector\Privatization\NodeManipulator\VisibilityManipulator; use Rector\Privatization\VisibilityGuard\ClassMethodVisibilityGuard; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** * @see \Rector\Tests\Privatization\Rector\ClassMethod\PrivatizeFinalClassMethodRector\PrivatizeFinalClassMethodRectorTest */ -final class PrivatizeFinalClassMethodRector extends AbstractScopeAwareRector +final class PrivatizeFinalClassMethodRector extends AbstractRector { /** * @readonly @@ -78,8 +78,9 @@ public function getNodeTypes() : array /** * @param Class_ $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); if (!$node->isFinal()) { return null; } diff --git a/rules/Privatization/Rector/MethodCall/PrivatizeLocalGetterToPropertyRector.php b/rules/Privatization/Rector/MethodCall/PrivatizeLocalGetterToPropertyRector.php index fb763cd2f9c..4ba350b5d68 100644 --- a/rules/Privatization/Rector/MethodCall/PrivatizeLocalGetterToPropertyRector.php +++ b/rules/Privatization/Rector/MethodCall/PrivatizeLocalGetterToPropertyRector.php @@ -107,6 +107,9 @@ public function refactor(Node $node) : ?Node } private function matchLocalPropertyFetchInGetterMethod(ClassMethod $classMethod) : ?PropertyFetch { + if ($classMethod->params !== []) { + return null; + } $stmts = (array) $classMethod->stmts; if (\count($stmts) !== 1) { return null; diff --git a/rules/Renaming/Rector/MethodCall/RenameMethodRector.php b/rules/Renaming/Rector/MethodCall/RenameMethodRector.php index 752f5b3b5da..119a0f2064f 100644 --- a/rules/Renaming/Rector/MethodCall/RenameMethodRector.php +++ b/rules/Renaming/Rector/MethodCall/RenameMethodRector.php @@ -18,7 +18,8 @@ use PHPStan\Reflection\ReflectionProvider; use Rector\Contract\Rector\ConfigurableRectorInterface; use Rector\NodeManipulator\ClassManipulator; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Rector\Reflection\ReflectionResolver; use Rector\Renaming\Contract\MethodCallRenameInterface; use Rector\Renaming\ValueObject\MethodCallRename; @@ -29,7 +30,7 @@ /** * @see \Rector\Tests\Renaming\Rector\MethodCall\RenameMethodRector\RenameMethodRectorTest */ -final class RenameMethodRector extends AbstractScopeAwareRector implements ConfigurableRectorInterface +final class RenameMethodRector extends AbstractRector implements ConfigurableRectorInterface { /** * @readonly @@ -78,8 +79,9 @@ public function getNodeTypes() : array /** * @param MethodCall|NullsafeMethodCall|StaticCall|Class_|Interface_ $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); if ($node instanceof Class_ || $node instanceof Interface_) { return $this->refactorClass($node, $scope); } diff --git a/rules/Strict/NodeAnalyzer/UnitializedPropertyAnalyzer.php b/rules/Strict/NodeAnalyzer/UnitializedPropertyAnalyzer.php index a4de880dbf7..be84d8210f4 100644 --- a/rules/Strict/NodeAnalyzer/UnitializedPropertyAnalyzer.php +++ b/rules/Strict/NodeAnalyzer/UnitializedPropertyAnalyzer.php @@ -9,10 +9,10 @@ use PhpParser\Node\Stmt\ClassLike; use PhpParser\Node\Stmt\Property; use PHPStan\Type\ThisType; -use PHPStan\Type\TypeWithClassName; use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeTypeResolver\NodeTypeResolver; use Rector\PhpParser\AstResolver; +use Rector\StaticTypeMapper\Resolver\ClassNameFromObjectTypeResolver; use Rector\TypeDeclaration\AlreadyAssignDetector\ConstructorAssignDetector; final class UnitializedPropertyAnalyzer { @@ -52,10 +52,10 @@ public function isUnitialized(Expr $expr) : bool if ($varType instanceof ThisType) { $varType = $varType->getStaticObjectType(); } - if (!$varType instanceof TypeWithClassName) { + $className = ClassNameFromObjectTypeResolver::resolve($varType); + if ($className === null) { return \false; } - $className = $varType->getClassName(); $classLike = $this->astResolver->resolveClassFromName($className); if (!$classLike instanceof ClassLike) { return \false; diff --git a/rules/Strict/NodeFactory/ExactCompareFactory.php b/rules/Strict/NodeFactory/ExactCompareFactory.php index d386ad69148..00279edb6b0 100644 --- a/rules/Strict/NodeFactory/ExactCompareFactory.php +++ b/rules/Strict/NodeFactory/ExactCompareFactory.php @@ -20,12 +20,11 @@ use PhpParser\Node\Name\FullyQualified; use PhpParser\Node\Scalar\LNumber; use PhpParser\Node\Scalar\String_; -use PHPStan\Type\NullType; use PHPStan\Type\Type; use PHPStan\Type\TypeCombinator; -use PHPStan\Type\TypeWithClassName; use PHPStan\Type\UnionType; use Rector\PhpParser\Node\NodeFactory; +use Rector\StaticTypeMapper\Resolver\ClassNameFromObjectTypeResolver; final class ExactCompareFactory { /** @@ -54,7 +53,7 @@ public function createIdenticalFalsyCompare(Type $exprType, Expr $expr, bool $tr return new Identical($expr, $this->nodeFactory->createFalse()); } elseif ($exprType->isArray()->yes()) { return new Identical($expr, new Array_([])); - } elseif ($exprType instanceof NullType) { + } elseif ($exprType->isNull()->yes()) { return new Identical($expr, $this->nodeFactory->createNull()); } elseif (!$exprType instanceof UnionType) { return null; @@ -100,8 +99,9 @@ private function createFromUnionType(UnionType $unionType, Expr $expr, bool $tre if ($unionType->isBoolean()->yes()) { return new Identical($expr, $this->nodeFactory->createTrue()); } - if ($unionType instanceof TypeWithClassName) { - return new Instanceof_($expr, new FullyQualified($unionType->getClassName())); + $className = ClassNameFromObjectTypeResolver::resolve($unionType); + if ($className !== null) { + return new Instanceof_($expr, new FullyQualified($className)); } $nullConstFetch = $this->nodeFactory->createNull(); $toNullNotIdentical = new NotIdentical($expr, $nullConstFetch); @@ -190,8 +190,9 @@ private function createTruthyFromUnionType(UnionType $unionType, Expr $expr, boo if ($unionType->isBoolean()->yes()) { return new NotIdentical($expr, $this->nodeFactory->createTrue()); } - if ($unionType instanceof TypeWithClassName) { - return new BooleanNot(new Instanceof_($expr, new FullyQualified($unionType->getClassName()))); + $className = ClassNameFromObjectTypeResolver::resolve($unionType); + if ($className !== null) { + return new BooleanNot(new Instanceof_($expr, new FullyQualified($className))); } $toNullIdentical = new Identical($expr, $this->nodeFactory->createNull()); if ($treatAsNonEmpty) { diff --git a/rules/Strict/Rector/AbstractFalsyScalarRuleFixerRector.php b/rules/Strict/Rector/AbstractFalsyScalarRuleFixerRector.php index 886e0c31999..2456f95fc98 100644 --- a/rules/Strict/Rector/AbstractFalsyScalarRuleFixerRector.php +++ b/rules/Strict/Rector/AbstractFalsyScalarRuleFixerRector.php @@ -4,14 +4,14 @@ namespace Rector\Strict\Rector; use Rector\Contract\Rector\ConfigurableRectorInterface; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\Rector\AbstractRector; use RectorPrefix202411\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Strict\Rector\BooleanNot\BooleanInBooleanNotRuleFixerRector\BooleanInBooleanNotRuleFixerRectorTest * * @internal */ -abstract class AbstractFalsyScalarRuleFixerRector extends AbstractScopeAwareRector implements ConfigurableRectorInterface +abstract class AbstractFalsyScalarRuleFixerRector extends AbstractRector implements ConfigurableRectorInterface { /** * @api diff --git a/rules/Strict/Rector/BooleanNot/BooleanInBooleanNotRuleFixerRector.php b/rules/Strict/Rector/BooleanNot/BooleanInBooleanNotRuleFixerRector.php index 94c5b8dbb7a..bf131f0b495 100644 --- a/rules/Strict/Rector/BooleanNot/BooleanInBooleanNotRuleFixerRector.php +++ b/rules/Strict/Rector/BooleanNot/BooleanInBooleanNotRuleFixerRector.php @@ -6,7 +6,7 @@ use PhpParser\Node; use PhpParser\Node\Expr; use PhpParser\Node\Expr\BooleanNot; -use PHPStan\Analyser\Scope; +use Rector\PHPStan\ScopeFetcher; use Rector\Strict\NodeFactory\ExactCompareFactory; use Rector\Strict\Rector\AbstractFalsyScalarRuleFixerRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; @@ -69,8 +69,9 @@ public function getNodeTypes() : array /** * @param BooleanNot $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Expr + public function refactor(Node $node) : ?Expr { + $scope = ScopeFetcher::fetch($node); $exprType = $scope->getNativeType($node->expr); if ($exprType->isBoolean()->yes()) { return null; diff --git a/rules/Strict/Rector/Empty_/DisallowedEmptyRuleFixerRector.php b/rules/Strict/Rector/Empty_/DisallowedEmptyRuleFixerRector.php index b7c9df1b14b..0337e834e59 100644 --- a/rules/Strict/Rector/Empty_/DisallowedEmptyRuleFixerRector.php +++ b/rules/Strict/Rector/Empty_/DisallowedEmptyRuleFixerRector.php @@ -14,6 +14,7 @@ use PHPStan\Analyser\Scope; use Rector\Contract\Rector\ConfigurableRectorInterface; use Rector\NodeAnalyzer\ExprAnalyzer; +use Rector\PHPStan\ScopeFetcher; use Rector\Strict\NodeAnalyzer\UnitializedPropertyAnalyzer; use Rector\Strict\NodeFactory\ExactCompareFactory; use Rector\Strict\Rector\AbstractFalsyScalarRuleFixerRector; @@ -78,8 +79,9 @@ public function getNodeTypes() : array /** * @param Empty_|BooleanNot $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?\PhpParser\Node\Expr + public function refactor(Node $node) : ?\PhpParser\Node\Expr { + $scope = ScopeFetcher::fetch($node); if ($node instanceof BooleanNot) { return $this->refactorBooleanNot($node, $scope); } diff --git a/rules/Strict/Rector/If_/BooleanInIfConditionRuleFixerRector.php b/rules/Strict/Rector/If_/BooleanInIfConditionRuleFixerRector.php index 054512b63a0..e3bb4db54bb 100644 --- a/rules/Strict/Rector/If_/BooleanInIfConditionRuleFixerRector.php +++ b/rules/Strict/Rector/If_/BooleanInIfConditionRuleFixerRector.php @@ -6,7 +6,7 @@ use PhpParser\Node; use PhpParser\Node\Expr; use PhpParser\Node\Stmt\If_; -use PHPStan\Analyser\Scope; +use Rector\PHPStan\ScopeFetcher; use Rector\Strict\NodeFactory\ExactCompareFactory; use Rector\Strict\Rector\AbstractFalsyScalarRuleFixerRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; @@ -70,9 +70,10 @@ public function getNodeTypes() : array /** * @param If_ $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?If_ + public function refactor(Node $node) : ?If_ { $hasChanged = \false; + $scope = ScopeFetcher::fetch($node); // 1. if $ifCondExprType = $scope->getNativeType($node->cond); $notIdentical = $this->exactCompareFactory->createNotIdenticalFalsyCompare($ifCondExprType, $node->cond, $this->treatAsNonEmpty); diff --git a/rules/Strict/Rector/Ternary/BooleanInTernaryOperatorRuleFixerRector.php b/rules/Strict/Rector/Ternary/BooleanInTernaryOperatorRuleFixerRector.php index e665a3951a5..8d02e781ea5 100644 --- a/rules/Strict/Rector/Ternary/BooleanInTernaryOperatorRuleFixerRector.php +++ b/rules/Strict/Rector/Ternary/BooleanInTernaryOperatorRuleFixerRector.php @@ -6,7 +6,7 @@ use PhpParser\Node; use PhpParser\Node\Expr; use PhpParser\Node\Expr\Ternary; -use PHPStan\Analyser\Scope; +use Rector\PHPStan\ScopeFetcher; use Rector\Strict\NodeFactory\ExactCompareFactory; use Rector\Strict\Rector\AbstractFalsyScalarRuleFixerRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; @@ -61,12 +61,13 @@ public function getNodeTypes() : array /** * @param Ternary $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Ternary + public function refactor(Node $node) : ?Ternary { // skip short ternary if (!$node->if instanceof Expr) { return null; } + $scope = ScopeFetcher::fetch($node); $exprType = $scope->getNativeType($node->cond); $expr = $this->exactCompareFactory->createNotIdenticalFalsyCompare($exprType, $node->cond, $this->treatAsNonEmpty); if (!$expr instanceof Expr) { diff --git a/rules/Strict/Rector/Ternary/DisallowedShortTernaryRuleFixerRector.php b/rules/Strict/Rector/Ternary/DisallowedShortTernaryRuleFixerRector.php index 8c62c7153a3..754fd7bef5f 100644 --- a/rules/Strict/Rector/Ternary/DisallowedShortTernaryRuleFixerRector.php +++ b/rules/Strict/Rector/Ternary/DisallowedShortTernaryRuleFixerRector.php @@ -8,6 +8,7 @@ use PhpParser\Node\Expr\FuncCall; use PhpParser\Node\Expr\Ternary; use PHPStan\Analyser\Scope; +use Rector\PHPStan\ScopeFetcher; use Rector\Strict\NodeFactory\ExactCompareFactory; use Rector\Strict\Rector\AbstractFalsyScalarRuleFixerRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; @@ -66,13 +67,14 @@ public function getNodeTypes() : array /** * @param Ternary $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Ternary + public function refactor(Node $node) : ?Ternary { $this->hasChanged = \false; // skip non-short ternary if ($node->if instanceof Expr) { return null; } + $scope = ScopeFetcher::fetch($node); // special case for reset() function if ($node->cond instanceof FuncCall && $this->isName($node->cond, 'reset')) { $this->refactorResetFuncCall($node, $node->cond, $scope); diff --git a/rules/Transform/NodeTypeAnalyzer/TypeProvidingExprFromClassResolver.php b/rules/Transform/NodeTypeAnalyzer/TypeProvidingExprFromClassResolver.php index b8c354fca87..709d3802b4d 100644 --- a/rules/Transform/NodeTypeAnalyzer/TypeProvidingExprFromClassResolver.php +++ b/rules/Transform/NodeTypeAnalyzer/TypeProvidingExprFromClassResolver.php @@ -18,9 +18,9 @@ use PHPStan\Type\ObjectType; use PHPStan\Type\Type; use PHPStan\Type\TypeCombinator; -use PHPStan\Type\TypeWithClassName; use Rector\Naming\Naming\PropertyNaming; use Rector\NodeNameResolver\NodeNameResolver; +use Rector\StaticTypeMapper\Resolver\ClassNameFromObjectTypeResolver; use Rector\ValueObject\MethodName; final class TypeProvidingExprFromClassResolver { @@ -107,7 +107,8 @@ private function isMatchingType(Type $readableType, ObjectType $objectType) : bo return \false; } $readableType = TypeCombinator::removeNull($readableType); - if (!$readableType instanceof TypeWithClassName) { + $className = ClassNameFromObjectTypeResolver::resolve($readableType); + if ($className === null) { return \false; } return $readableType->equals($objectType); diff --git a/rules/Transform/Rector/Class_/AddInterfaceByTraitRector.php b/rules/Transform/Rector/Class_/AddInterfaceByTraitRector.php index ec5679d3324..c25379122b9 100644 --- a/rules/Transform/Rector/Class_/AddInterfaceByTraitRector.php +++ b/rules/Transform/Rector/Class_/AddInterfaceByTraitRector.php @@ -6,10 +6,10 @@ use PhpParser\Node; use PhpParser\Node\Name\FullyQualified; use PhpParser\Node\Stmt\Class_; -use PHPStan\Analyser\Scope; use PHPStan\Reflection\ClassReflection; use Rector\Contract\Rector\ConfigurableRectorInterface; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use RectorPrefix202411\Webmozart\Assert\Assert; @@ -17,7 +17,7 @@ * @api used in rector-doctrine * @see \Rector\Tests\Transform\Rector\Class_\AddInterfaceByTraitRector\AddInterfaceByTraitRectorTest */ -final class AddInterfaceByTraitRector extends AbstractScopeAwareRector implements ConfigurableRectorInterface +final class AddInterfaceByTraitRector extends AbstractRector implements ConfigurableRectorInterface { /** * @var array @@ -49,8 +49,9 @@ public function getNodeTypes() : array /** * @param Class_ $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); $classReflection = $scope->getClassReflection(); if (!$classReflection instanceof ClassReflection) { return null; diff --git a/rules/Transform/Rector/StaticCall/StaticCallToMethodCallRector.php b/rules/Transform/Rector/StaticCall/StaticCallToMethodCallRector.php index 06e68a5cdef..34b1a1d2e76 100644 --- a/rules/Transform/Rector/StaticCall/StaticCallToMethodCallRector.php +++ b/rules/Transform/Rector/StaticCall/StaticCallToMethodCallRector.php @@ -9,10 +9,9 @@ use PhpParser\Node\Expr\StaticCall; use PhpParser\Node\Name\FullyQualified; use PhpParser\Node\Stmt\Class_; -use PHPStan\Analyser\Scope; use Rector\Contract\Rector\ConfigurableRectorInterface; use Rector\Exception\ShouldNotHappenException; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\Rector\AbstractRector; use Rector\Transform\NodeAnalyzer\FuncCallStaticCallToMethodCallAnalyzer; use Rector\Transform\ValueObject\StaticCallToMethodCall; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; @@ -21,7 +20,7 @@ /** * @see \Rector\Tests\Transform\Rector\StaticCall\StaticCallToMethodCallRector\StaticCallToMethodCallRectorTest */ -final class StaticCallToMethodCallRector extends AbstractScopeAwareRector implements ConfigurableRectorInterface +final class StaticCallToMethodCallRector extends AbstractRector implements ConfigurableRectorInterface { /** * @readonly @@ -82,7 +81,7 @@ public function getNodeTypes() : array /** * @param Class_ $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { $class = $node; $hasChanged = \false; diff --git a/rules/TypeDeclaration/NodeAnalyzer/CallTypesResolver.php b/rules/TypeDeclaration/NodeAnalyzer/CallTypesResolver.php index 69d2eb70247..462b7a68595 100644 --- a/rules/TypeDeclaration/NodeAnalyzer/CallTypesResolver.php +++ b/rules/TypeDeclaration/NodeAnalyzer/CallTypesResolver.php @@ -9,15 +9,14 @@ use PhpParser\Node\Identifier; use PHPStan\Reflection\ReflectionProvider; use PHPStan\Type\MixedType; -use PHPStan\Type\NullType; use PHPStan\Type\ObjectType; use PHPStan\Type\ThisType; use PHPStan\Type\Type; -use PHPStan\Type\TypeWithClassName; use PHPStan\Type\UnionType; use Rector\NodeTypeResolver\NodeTypeResolver; use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory; use Rector\NodeTypeResolver\TypeComparator\TypeComparator; +use Rector\StaticTypeMapper\Resolver\ClassNameFromObjectTypeResolver; final class CallTypesResolver { /** @@ -107,7 +106,7 @@ private function unionToSingleType(array $staticTypesByArgumentPosition) : array if (\count($staticTypeByArgumentPosition) !== 1) { return $staticTypeByArgumentPosition; } - if (!$staticTypeByArgumentPosition[0] instanceof NullType) { + if (!$staticTypeByArgumentPosition[0]->isNull()->yes()) { return $staticTypeByArgumentPosition; } return [new MixedType()]; @@ -120,10 +119,10 @@ private function narrowParentObjectTreeToSingleObjectChildType(Type $type) : Typ if (!$this->isTypeWithClassNameOnly($type)) { return $type; } - /** @var TypeWithClassName $firstUnionedType */ $firstUnionedType = $type->getTypes()[0]; foreach ($type->getTypes() as $unionedType) { - if (!$unionedType instanceof TypeWithClassName) { + $className = ClassNameFromObjectTypeResolver::resolve($unionedType); + if ($className === null) { return $type; } if ($unionedType->isSuperTypeOf($firstUnionedType)->yes()) { @@ -135,7 +134,8 @@ private function narrowParentObjectTreeToSingleObjectChildType(Type $type) : Typ private function isTypeWithClassNameOnly(UnionType $unionType) : bool { foreach ($unionType->getTypes() as $unionedType) { - if (!$unionedType instanceof TypeWithClassName) { + $className = ClassNameFromObjectTypeResolver::resolve($unionedType); + if ($className === null) { return \false; } } diff --git a/rules/TypeDeclaration/NodeAnalyzer/CallerParamMatcher.php b/rules/TypeDeclaration/NodeAnalyzer/CallerParamMatcher.php index 11b5fc488ac..86a74f9ea8a 100644 --- a/rules/TypeDeclaration/NodeAnalyzer/CallerParamMatcher.php +++ b/rules/TypeDeclaration/NodeAnalyzer/CallerParamMatcher.php @@ -21,7 +21,6 @@ use PHPStan\Analyser\Scope; use PHPStan\Reflection\ClassReflection; use PHPStan\Type\MixedType; -use PHPStan\Type\NullType; use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeTypeResolver\TypeComparator\TypeComparator; use Rector\PhpParser\AstResolver; @@ -82,7 +81,7 @@ public function matchCallParamType(Param $param, Param $callParam) if ($this->typeComparator->isSubtype($defaultType, $callParamType)) { return $callParam->type; } - if (!$defaultType instanceof NullType) { + if (!$defaultType->isNull()->yes()) { return null; } if ($callParam->type instanceof Name || $callParam->type instanceof Identifier) { diff --git a/rules/TypeDeclaration/NodeAnalyzer/ClassMethodParamTypeCompleter.php b/rules/TypeDeclaration/NodeAnalyzer/ClassMethodParamTypeCompleter.php index 36f381016e9..87429855d47 100644 --- a/rules/TypeDeclaration/NodeAnalyzer/ClassMethodParamTypeCompleter.php +++ b/rules/TypeDeclaration/NodeAnalyzer/ClassMethodParamTypeCompleter.php @@ -8,7 +8,6 @@ use PhpParser\Node\Identifier; use PhpParser\Node\Param; use PhpParser\Node\Stmt\ClassMethod; -use PHPStan\Type\CallableType; use PHPStan\Type\MixedType; use PHPStan\Type\ObjectType; use PHPStan\Type\Type; @@ -106,10 +105,10 @@ private function shouldSkipArgumentStaticType(ClassMethod $classMethod, Type $ar } private function isClosureAndCallableType(Type $parameterStaticType, Type $argumentStaticType) : bool { - if ($parameterStaticType instanceof CallableType && $this->isClosureObjectType($argumentStaticType)) { + if ($parameterStaticType->isCallable()->yes() && $this->isClosureObjectType($argumentStaticType)) { return \true; } - return $argumentStaticType instanceof CallableType && $this->isClosureObjectType($parameterStaticType); + return $argumentStaticType->isCallable()->yes() && $this->isClosureObjectType($parameterStaticType); } private function isClosureObjectType(Type $type) : bool { diff --git a/rules/TypeDeclaration/PhpDocParser/TypeExpressionFromVarTagResolver.php b/rules/TypeDeclaration/PhpDocParser/TypeExpressionFromVarTagResolver.php index b43d86f44dd..f221a3c4a01 100644 --- a/rules/TypeDeclaration/PhpDocParser/TypeExpressionFromVarTagResolver.php +++ b/rules/TypeDeclaration/PhpDocParser/TypeExpressionFromVarTagResolver.php @@ -24,7 +24,6 @@ use PHPStan\Type\IntegerType; use PHPStan\Type\IterableType; use PHPStan\Type\MixedType; -use PHPStan\Type\NullType; use PHPStan\Type\ObjectWithoutClassType; use PHPStan\Type\StringType; use Rector\BetterPhpDocParser\ValueObject\Type\BracketsAwareIntersectionTypeNode; @@ -50,7 +49,7 @@ public function resolveTypeExpressionFromVarTag(TypeNode $typeNode, Variable $va $arg = new Arg($variable); return new FuncCall(new Name($scalarTypeFunction), [$arg]); } - if ($scalarType instanceof NullType) { + if ($scalarType->isNull()->yes()) { return new Identical($variable, new ConstFetch(new Name('null'))); } if ($scalarType instanceof ConstantBooleanType) { diff --git a/rules/TypeDeclaration/Rector/ClassMethod/BoolReturnTypeFromBooleanConstReturnsRector.php b/rules/TypeDeclaration/Rector/ClassMethod/BoolReturnTypeFromBooleanConstReturnsRector.php index 3e51b0c2a5f..169481a9c81 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/BoolReturnTypeFromBooleanConstReturnsRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/BoolReturnTypeFromBooleanConstReturnsRector.php @@ -13,7 +13,8 @@ use PHPStan\Analyser\Scope; use Rector\PhpParser\Node\BetterNodeFinder; use Rector\PhpParser\Node\Value\ValueResolver; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer; use Rector\ValueObject\PhpVersionFeature; use Rector\VendorLocker\NodeVendorLocker\ClassMethodReturnTypeOverrideGuard; @@ -23,7 +24,7 @@ /** * @see \Rector\Tests\TypeDeclaration\Rector\ClassMethod\BoolReturnTypeFromBooleanConstReturnsRector\BoolReturnTypeFromBooleanConstReturnsRectorTest */ -final class BoolReturnTypeFromBooleanConstReturnsRector extends AbstractScopeAwareRector implements MinPhpVersionInterface +final class BoolReturnTypeFromBooleanConstReturnsRector extends AbstractRector implements MinPhpVersionInterface { /** * @readonly @@ -92,8 +93,9 @@ public function getNodeTypes() : array /** * @param ClassMethod|Function_ $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); if ($this->shouldSkip($node, $scope)) { return null; } diff --git a/rules/TypeDeclaration/Rector/ClassMethod/BoolReturnTypeFromBooleanStrictReturnsRector.php b/rules/TypeDeclaration/Rector/ClassMethod/BoolReturnTypeFromBooleanStrictReturnsRector.php index b6ad26ef78b..3c09d67aadb 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/BoolReturnTypeFromBooleanStrictReturnsRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/BoolReturnTypeFromBooleanStrictReturnsRector.php @@ -28,10 +28,10 @@ use PhpParser\Node\Stmt\Return_; use PHPStan\Analyser\Scope; use PHPStan\Reflection\ReflectionProvider; -use PHPStan\Type\BooleanType; use Rector\PhpParser\Node\BetterNodeFinder; use Rector\PhpParser\Node\Value\ValueResolver; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer; use Rector\ValueObject\PhpVersionFeature; use Rector\VendorLocker\NodeVendorLocker\ClassMethodReturnTypeOverrideGuard; @@ -41,7 +41,7 @@ /** * @see \Rector\Tests\TypeDeclaration\Rector\ClassMethod\BoolReturnTypeFromBooleanStrictReturnsRector\BoolReturnTypeFromBooleanStrictReturnsRectorTest */ -final class BoolReturnTypeFromBooleanStrictReturnsRector extends AbstractScopeAwareRector implements MinPhpVersionInterface +final class BoolReturnTypeFromBooleanStrictReturnsRector extends AbstractRector implements MinPhpVersionInterface { /** * @readonly @@ -108,8 +108,9 @@ public function getNodeTypes() : array /** * @param ClassMethod|Function_ $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); if ($this->shouldSkip($node, $scope)) { return null; } @@ -177,9 +178,11 @@ private function isNativeBooleanReturnTypeFuncCall(FuncCall $funcCall) : bool return \false; } foreach ($functionReflection->getVariants() as $parametersAcceptorWithPhpDoc) { - return $parametersAcceptorWithPhpDoc->getNativeReturnType() instanceof BooleanType; + if (!$parametersAcceptorWithPhpDoc->getNativeReturnType()->isBoolean()->yes()) { + return \false; + } } - return \false; + return \true; } private function isBooleanOp(Expr $expr) : bool { diff --git a/rules/TypeDeclaration/Rector/ClassMethod/NumericReturnTypeFromStrictReturnsRector.php b/rules/TypeDeclaration/Rector/ClassMethod/NumericReturnTypeFromStrictReturnsRector.php index 900bff35e33..de8cc7f874a 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/NumericReturnTypeFromStrictReturnsRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/NumericReturnTypeFromStrictReturnsRector.php @@ -14,7 +14,8 @@ use PhpParser\Node\Stmt\Return_; use PHPStan\Analyser\Scope; use Rector\PhpParser\Node\BetterNodeFinder; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer; use Rector\ValueObject\PhpVersionFeature; use Rector\VendorLocker\NodeVendorLocker\ClassMethodReturnTypeOverrideGuard; @@ -24,7 +25,7 @@ /** * @see \Rector\Tests\TypeDeclaration\Rector\ClassMethod\NumericReturnTypeFromStrictReturnsRector\NumericReturnTypeFromStrictReturnsRectorTest */ -final class NumericReturnTypeFromStrictReturnsRector extends AbstractScopeAwareRector implements MinPhpVersionInterface +final class NumericReturnTypeFromStrictReturnsRector extends AbstractRector implements MinPhpVersionInterface { /** * @readonly @@ -79,8 +80,9 @@ public function getNodeTypes() : array /** * @param ClassMethod|Function_ $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); if ($this->shouldSkip($node, $scope)) { return null; } diff --git a/rules/TypeDeclaration/Rector/ClassMethod/NumericReturnTypeFromStrictScalarReturnsRector.php b/rules/TypeDeclaration/Rector/ClassMethod/NumericReturnTypeFromStrictScalarReturnsRector.php index 28c63012b9f..5dfdfd6315a 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/NumericReturnTypeFromStrictScalarReturnsRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/NumericReturnTypeFromStrictScalarReturnsRector.php @@ -12,7 +12,8 @@ use PhpParser\Node\Stmt\Function_; use PHPStan\Analyser\Scope; use Rector\PhpParser\Node\BetterNodeFinder; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer; use Rector\ValueObject\PhpVersionFeature; use Rector\VendorLocker\NodeVendorLocker\ClassMethodReturnTypeOverrideGuard; @@ -22,7 +23,7 @@ /** * @see \Rector\Tests\TypeDeclaration\Rector\ClassMethod\NumericReturnTypeFromStrictScalarReturnsRector\NumericReturnTypeFromStrictScalarReturnsRectorTest */ -final class NumericReturnTypeFromStrictScalarReturnsRector extends AbstractScopeAwareRector implements MinPhpVersionInterface +final class NumericReturnTypeFromStrictScalarReturnsRector extends AbstractRector implements MinPhpVersionInterface { /** * @readonly @@ -77,8 +78,9 @@ public function getNodeTypes() : array /** * @param ClassMethod|Function_ $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); if ($this->shouldSkip($node, $scope)) { return null; } diff --git a/rules/TypeDeclaration/Rector/ClassMethod/ParamTypeByMethodCallTypeRector.php b/rules/TypeDeclaration/Rector/ClassMethod/ParamTypeByMethodCallTypeRector.php index 4d9e5e08f99..f59297378c9 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/ParamTypeByMethodCallTypeRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/ParamTypeByMethodCallTypeRector.php @@ -13,8 +13,9 @@ use PHPStan\Analyser\Scope; use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory; use Rector\PhpParser\Node\BetterNodeFinder; +use Rector\PHPStan\ScopeFetcher; use Rector\PHPStanStaticTypeMapper\Enum\TypeKind; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\Rector\AbstractRector; use Rector\StaticTypeMapper\Mapper\PhpParserNodeMapper; use Rector\StaticTypeMapper\StaticTypeMapper; use Rector\TypeDeclaration\Guard\ParamTypeAddGuard; @@ -25,7 +26,7 @@ /** * @see \Rector\Tests\TypeDeclaration\Rector\ClassMethod\ParamTypeByMethodCallTypeRector\ParamTypeByMethodCallTypeRectorTest */ -final class ParamTypeByMethodCallTypeRector extends AbstractScopeAwareRector +final class ParamTypeByMethodCallTypeRector extends AbstractRector { /** * @readonly @@ -128,8 +129,9 @@ public function getNodeTypes() : array /** * @param Class_ $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); $hasChanged = \false; foreach ($node->getMethods() as $classMethod) { if ($this->shouldSkipClassMethod($classMethod)) { diff --git a/rules/TypeDeclaration/Rector/ClassMethod/ParamTypeByParentCallTypeRector.php b/rules/TypeDeclaration/Rector/ClassMethod/ParamTypeByParentCallTypeRector.php index 00d685ba321..1bafa3a52a4 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/ParamTypeByParentCallTypeRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/ParamTypeByParentCallTypeRector.php @@ -7,12 +7,12 @@ use PhpParser\Node\Expr\StaticCall; use PhpParser\Node\Param; use PhpParser\Node\Stmt\ClassMethod; -use PHPStan\Analyser\Scope; use PHPStan\Reflection\ClassReflection; use Rector\Enum\ObjectReference; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\PhpParser\Node\BetterNodeFinder; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Rector\Reflection\ReflectionResolver; use Rector\TypeDeclaration\NodeAnalyzer\CallerParamMatcher; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; @@ -20,7 +20,7 @@ /** * @see \Rector\Tests\TypeDeclaration\Rector\ClassMethod\ParamTypeByParentCallTypeRector\ParamTypeByParentCallTypeRectorTest */ -final class ParamTypeByParentCallTypeRector extends AbstractScopeAwareRector +final class ParamTypeByParentCallTypeRector extends AbstractRector { /** * @readonly @@ -89,8 +89,9 @@ public function getNodeTypes() : array /** * @param ClassMethod $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); if ($this->shouldSkip($node)) { return null; } diff --git a/rules/TypeDeclaration/Rector/ClassMethod/ReturnNeverTypeRector.php b/rules/TypeDeclaration/Rector/ClassMethod/ReturnNeverTypeRector.php index da7587c2cb1..3fb4bfe19aa 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/ReturnNeverTypeRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/ReturnNeverTypeRector.php @@ -6,8 +6,8 @@ use PhpParser\Node; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Function_; -use PHPStan\Analyser\Scope; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Rector\TypeDeclaration\NodeManipulator\AddNeverReturnType; use Rector\ValueObject\PhpVersionFeature; use Rector\VersionBonding\Contract\MinPhpVersionInterface; @@ -16,7 +16,7 @@ /** * @see \Rector\Tests\TypeDeclaration\Rector\ClassMethod\ReturnNeverTypeRector\ReturnNeverTypeRectorTest */ -final class ReturnNeverTypeRector extends AbstractScopeAwareRector implements MinPhpVersionInterface +final class ReturnNeverTypeRector extends AbstractRector implements MinPhpVersionInterface { /** * @readonly @@ -59,8 +59,9 @@ public function getNodeTypes() : array /** * @param ClassMethod|Function_ $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); return $this->addNeverReturnType->add($node, $scope); } public function provideMinPhpVersion() : int diff --git a/rules/TypeDeclaration/Rector/ClassMethod/ReturnNullableTypeRector.php b/rules/TypeDeclaration/Rector/ClassMethod/ReturnNullableTypeRector.php index 2b5a3b6a747..eae93244a75 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/ReturnNullableTypeRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/ReturnNullableTypeRector.php @@ -7,11 +7,11 @@ use PhpParser\Node\NullableType; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Function_; -use PHPStan\Analyser\Scope; use PHPStan\Type\UnionType; +use Rector\PHPStan\ScopeFetcher; use Rector\PHPStanStaticTypeMapper\Enum\TypeKind; use Rector\PHPStanStaticTypeMapper\TypeMapper\UnionTypeMapper; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\Rector\AbstractRector; use Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer; use Rector\ValueObject\PhpVersionFeature; use Rector\VendorLocker\NodeVendorLocker\ClassMethodReturnTypeOverrideGuard; @@ -21,7 +21,7 @@ /** * @see \Rector\Tests\TypeDeclaration\Rector\ClassMethod\ReturnNullableTypeRector\ReturnNullableTypeRectorTest */ -final class ReturnNullableTypeRector extends AbstractScopeAwareRector implements MinPhpVersionInterface +final class ReturnNullableTypeRector extends AbstractRector implements MinPhpVersionInterface { /** * @readonly @@ -88,8 +88,9 @@ public function provideMinPhpVersion() : int /** * @param ClassMethod|Function_ $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); // empty body, nothing to resolve if ($node->stmts === null || $node->stmts === []) { return null; diff --git a/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromMockObjectRector.php b/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromMockObjectRector.php index bc30c5a0654..e7f625a751e 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromMockObjectRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromMockObjectRector.php @@ -14,7 +14,8 @@ use PHPStan\Type\Type; use Rector\Enum\ClassName; use Rector\PhpParser\Node\BetterNodeFinder; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer; use Rector\ValueObject\PhpVersionFeature; use Rector\VendorLocker\NodeVendorLocker\ClassMethodReturnTypeOverrideGuard; @@ -24,7 +25,7 @@ /** * @see \Rector\Tests\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromMockObjectRector\ReturnTypeFromMockObjectRectorTest */ -final class ReturnTypeFromMockObjectRector extends AbstractScopeAwareRector implements MinPhpVersionInterface +final class ReturnTypeFromMockObjectRector extends AbstractRector implements MinPhpVersionInterface { /** * @readonly @@ -82,8 +83,9 @@ public function getNodeTypes() : array /** * @param ClassMethod $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); // type is already known if ($node->returnType instanceof Node) { return null; diff --git a/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromReturnCastRector.php b/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromReturnCastRector.php index 03c9758e1fc..c3b7058e3c4 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromReturnCastRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromReturnCastRector.php @@ -6,8 +6,8 @@ use PhpParser\Node; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Function_; -use PHPStan\Analyser\Scope; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Rector\TypeDeclaration\NodeManipulator\AddReturnTypeFromCast; use Rector\ValueObject\PhpVersionFeature; use Rector\VersionBonding\Contract\MinPhpVersionInterface; @@ -16,7 +16,7 @@ /** * @see \Rector\Tests\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromReturnCastRector\ReturnTypeFromReturnCastRectorTest */ -final class ReturnTypeFromReturnCastRector extends AbstractScopeAwareRector implements MinPhpVersionInterface +final class ReturnTypeFromReturnCastRector extends AbstractRector implements MinPhpVersionInterface { /** * @readonly @@ -69,8 +69,9 @@ public function getNodeTypes() : array /** * @param ClassMethod|Function_ $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); return $this->addReturnTypeFromCast->add($node, $scope); } public function provideMinPhpVersion() : int diff --git a/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromReturnDirectArrayRector.php b/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromReturnDirectArrayRector.php index 1909d565905..a19e5bea602 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromReturnDirectArrayRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromReturnDirectArrayRector.php @@ -9,8 +9,8 @@ use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Function_; use PhpParser\Node\Stmt\Return_; -use PHPStan\Analyser\Scope; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer; use Rector\ValueObject\PhpVersionFeature; use Rector\VendorLocker\NodeVendorLocker\ClassMethodReturnTypeOverrideGuard; @@ -20,7 +20,7 @@ /** * @see \Rector\Tests\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromReturnDirectArrayRector\ReturnTypeFromReturnDirectArrayRectorTest */ -final class ReturnTypeFromReturnDirectArrayRector extends AbstractScopeAwareRector implements MinPhpVersionInterface +final class ReturnTypeFromReturnDirectArrayRector extends AbstractRector implements MinPhpVersionInterface { /** * @readonly @@ -69,8 +69,9 @@ public function getNodeTypes() : array /** * @param ClassMethod|Function_ $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); // already has return type, skip if ($node->returnType instanceof Node) { return null; diff --git a/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromReturnNewRector.php b/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromReturnNewRector.php index 82edaf3c644..305b456b340 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromReturnNewRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromReturnNewRector.php @@ -10,7 +10,6 @@ use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Function_; use PhpParser\Node\Stmt\Return_; -use PHPStan\Analyser\Scope; use PHPStan\Reflection\ClassReflection; use PHPStan\Reflection\ReflectionProvider; use PHPStan\Type\ObjectType; @@ -23,8 +22,9 @@ use Rector\NodeTypeResolver\NodeTypeResolver\NewTypeResolver; use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory; use Rector\PhpParser\Node\BetterNodeFinder; +use Rector\PHPStan\ScopeFetcher; use Rector\PHPStanStaticTypeMapper\Enum\TypeKind; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\Rector\AbstractRector; use Rector\Reflection\ReflectionResolver; use Rector\StaticTypeMapper\StaticTypeMapper; use Rector\StaticTypeMapper\ValueObject\Type\SelfStaticType; @@ -40,7 +40,7 @@ /** * @see \Rector\Tests\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromReturnNewRector\ReturnTypeFromReturnNewRectorTest */ -final class ReturnTypeFromReturnNewRector extends AbstractScopeAwareRector implements MinPhpVersionInterface +final class ReturnTypeFromReturnNewRector extends AbstractRector implements MinPhpVersionInterface { /** * @readonly @@ -143,8 +143,9 @@ public function getNodeTypes() : array /** * @param ClassMethod|Function_ $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); // already filled if ($node->returnType instanceof Node) { return null; diff --git a/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictConstantReturnRector.php b/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictConstantReturnRector.php index 7a84591e7f2..fa5cb876aed 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictConstantReturnRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictConstantReturnRector.php @@ -8,12 +8,12 @@ use PhpParser\Node\Expr\ConstFetch; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Return_; -use PHPStan\Analyser\Scope; use PHPStan\Type\Type; use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory; use Rector\PhpParser\Node\BetterNodeFinder; +use Rector\PHPStan\ScopeFetcher; use Rector\PHPStanStaticTypeMapper\Enum\TypeKind; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\Rector\AbstractRector; use Rector\StaticTypeMapper\StaticTypeMapper; use Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer; use Rector\ValueObject\PhpVersion; @@ -24,7 +24,7 @@ /** * @see \Rector\Tests\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromStrictConstantReturnRector\ReturnTypeFromStrictConstantReturnRectorTest */ -final class ReturnTypeFromStrictConstantReturnRector extends AbstractScopeAwareRector implements MinPhpVersionInterface +final class ReturnTypeFromStrictConstantReturnRector extends AbstractRector implements MinPhpVersionInterface { /** * @readonly @@ -95,8 +95,9 @@ public function getNodeTypes() : array /** * @param ClassMethod $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); if ($node->returnType instanceof Node) { return null; } diff --git a/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictFluentReturnRector.php b/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictFluentReturnRector.php index ccf618836e0..13bc00af566 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictFluentReturnRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictFluentReturnRector.php @@ -6,13 +6,13 @@ use PhpParser\Node; use PhpParser\Node\Name; use PhpParser\Node\Stmt\ClassMethod; -use PHPStan\Analyser\Scope; use PHPStan\Reflection\ClassReflection; use PHPStan\Type\ObjectType; use PHPStan\Type\StaticType; use PHPStan\Type\ThisType; use Rector\Php\PhpVersionProvider; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Rector\Reflection\ReflectionResolver; use Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer; use Rector\ValueObject\PhpVersionFeature; @@ -23,7 +23,7 @@ /** * @see \Rector\Tests\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromStrictFluentReturnRector\ReturnTypeFromStrictFluentReturnRectorTest */ -final class ReturnTypeFromStrictFluentReturnRector extends AbstractScopeAwareRector implements MinPhpVersionInterface +final class ReturnTypeFromStrictFluentReturnRector extends AbstractRector implements MinPhpVersionInterface { /** * @readonly @@ -88,8 +88,9 @@ public function provideMinPhpVersion() : int /** * @param ClassMethod $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); // already typed → skip if ($node->returnType instanceof Node) { return null; diff --git a/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictNativeCallRector.php b/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictNativeCallRector.php index 6b45e18214f..1f0158e6dc1 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictNativeCallRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictNativeCallRector.php @@ -6,8 +6,8 @@ use PhpParser\Node; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Function_; -use PHPStan\Analyser\Scope; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Rector\TypeDeclaration\NodeManipulator\AddReturnTypeFromStrictNativeCall; use Rector\ValueObject\PhpVersion; use Rector\VersionBonding\Contract\MinPhpVersionInterface; @@ -16,7 +16,7 @@ /** * @see \Rector\Tests\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromStrictNativeCallRector\ReturnTypeFromStrictNativeCallRectorTest */ -final class ReturnTypeFromStrictNativeCallRector extends AbstractScopeAwareRector implements MinPhpVersionInterface +final class ReturnTypeFromStrictNativeCallRector extends AbstractRector implements MinPhpVersionInterface { /** * @readonly @@ -59,8 +59,9 @@ public function getNodeTypes() : array /** * @param ClassMethod|Function_ $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); return $this->addReturnTypeFromStrictNativeCall->add($node, $scope); } public function provideMinPhpVersion() : int diff --git a/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictNewArrayRector.php b/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictNewArrayRector.php index 1332e25f098..d10fe9f1422 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictNewArrayRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictNewArrayRector.php @@ -16,7 +16,6 @@ use PHPStan\Analyser\Scope; use PHPStan\Type\ArrayType; use PHPStan\Type\Constant\ConstantArrayType; -use PHPStan\Type\IntegerType; use PHPStan\Type\IntersectionType; use PHPStan\Type\MixedType; use PHPStan\Type\NeverType; @@ -24,7 +23,8 @@ use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTypeChanger; use Rector\PhpParser\Node\BetterNodeFinder; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer; use Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer; use Rector\ValueObject\PhpVersion; @@ -35,7 +35,7 @@ /** * @see \Rector\Tests\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromStrictNewArrayRector\ReturnTypeFromStrictNewArrayRectorTest */ -final class ReturnTypeFromStrictNewArrayRector extends AbstractScopeAwareRector implements MinPhpVersionInterface +final class ReturnTypeFromStrictNewArrayRector extends AbstractRector implements MinPhpVersionInterface { /** * @readonly @@ -112,8 +112,9 @@ public function getNodeTypes() : array /** * @param ClassMethod|Function_ $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); if ($this->shouldSkip($node, $scope)) { return null; } @@ -262,7 +263,7 @@ private function shouldAddReturnArrayDocType(ArrayType $arrayType) : bool return \false; } // handle only simple arrays - if (!$arrayType->getKeyType() instanceof IntegerType) { + if (!$arrayType->getKeyType()->isInteger()->yes()) { return \false; } } diff --git a/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictParamRector.php b/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictParamRector.php index e03b5f9f0f8..94497b8943f 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictParamRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictParamRector.php @@ -6,8 +6,8 @@ use PhpParser\Node; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Function_; -use PHPStan\Analyser\Scope; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Rector\TypeDeclaration\NodeManipulator\AddReturnTypeFromParam; use Rector\ValueObject\PhpVersionFeature; use Rector\VersionBonding\Contract\MinPhpVersionInterface; @@ -16,7 +16,7 @@ /** * @see \Rector\Tests\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromStrictParamRector\ReturnTypeFromStrictParamRectorTest */ -final class ReturnTypeFromStrictParamRector extends AbstractScopeAwareRector implements MinPhpVersionInterface +final class ReturnTypeFromStrictParamRector extends AbstractRector implements MinPhpVersionInterface { /** * @readonly @@ -63,8 +63,9 @@ public function provideMinPhpVersion() : int /** * @param ClassMethod|Function_ $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); return $this->addReturnTypeFromParam->add($node, $scope); } } diff --git a/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictTypedCallRector.php b/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictTypedCallRector.php index d795a171225..975c4f012d3 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictTypedCallRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictTypedCallRector.php @@ -15,13 +15,13 @@ use PhpParser\Node\Stmt\Return_; use PhpParser\Node\UnionType as PhpParserUnionType; use PHPStan\Analyser\Scope; -use PHPStan\Type\NullType; use PHPStan\Type\ObjectType; use PHPStan\Type\UnionType; use Rector\Php\PhpVersionProvider; use Rector\PhpParser\Node\BetterNodeFinder; +use Rector\PHPStan\ScopeFetcher; use Rector\PHPStanStaticTypeMapper\Enum\TypeKind; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\Rector\AbstractRector; use Rector\StaticTypeMapper\StaticTypeMapper; use Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer; use Rector\TypeDeclaration\NodeAnalyzer\TypeNodeUnwrapper; @@ -35,7 +35,7 @@ /** * @see \Rector\Tests\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromStrictTypedCallRector\ReturnTypeFromStrictTypedCallRectorTest */ -final class ReturnTypeFromStrictTypedCallRector extends AbstractScopeAwareRector implements MinPhpVersionInterface +final class ReturnTypeFromStrictTypedCallRector extends AbstractRector implements MinPhpVersionInterface { /** * @readonly @@ -134,8 +134,9 @@ public function provideMinPhpVersion() : int /** * @param ClassMethod|Function_ $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); // already filled → skip if ($node->returnType instanceof Node) { return null; @@ -194,7 +195,7 @@ private function isUnionPossibleReturnsVoid($node) : bool private function processSingleUnionType($node, UnionType $unionType, NullableType $nullableType) { $types = $unionType->getTypes(); - $returnType = $types[0] instanceof ObjectType && $types[1] instanceof NullType ? new NullableType(new FullyQualified($types[0]->getClassName())) : $nullableType; + $returnType = $types[0] instanceof ObjectType && $types[1]->isNull()->yes() ? new NullableType(new FullyQualified($types[0]->getClassName())) : $nullableType; $node->returnType = $returnType; return $node; } diff --git a/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictTypedPropertyRector.php b/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictTypedPropertyRector.php index 37c8a913f4f..65296a69e14 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictTypedPropertyRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictTypedPropertyRector.php @@ -8,14 +8,14 @@ use PhpParser\Node\Expr\PropertyFetch; use PhpParser\Node\Expr\StaticPropertyFetch; use PhpParser\Node\Stmt\ClassMethod; -use PHPStan\Analyser\Scope; use PHPStan\Reflection\Php\PhpPropertyReflection; use PHPStan\Type\MixedType; use PHPStan\Type\Type; use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory; use Rector\PhpParser\Node\BetterNodeFinder; +use Rector\PHPStan\ScopeFetcher; use Rector\PHPStanStaticTypeMapper\Enum\TypeKind; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\Rector\AbstractRector; use Rector\Reflection\ReflectionResolver; use Rector\StaticTypeMapper\StaticTypeMapper; use Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer; @@ -27,7 +27,7 @@ /** * @see \Rector\Tests\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromStrictTypedPropertyRector\ReturnTypeFromStrictTypedPropertyRectorTest */ -final class ReturnTypeFromStrictTypedPropertyRector extends AbstractScopeAwareRector implements MinPhpVersionInterface +final class ReturnTypeFromStrictTypedPropertyRector extends AbstractRector implements MinPhpVersionInterface { /** * @readonly @@ -104,8 +104,9 @@ public function getNodeTypes() : array /** * @param ClassMethod $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); if ($node->returnType instanceof Node) { return null; } diff --git a/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromSymfonySerializerRector.php b/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromSymfonySerializerRector.php index b66ceed7048..e335f063e5e 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromSymfonySerializerRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromSymfonySerializerRector.php @@ -8,11 +8,11 @@ use PhpParser\Node\Name\FullyQualified; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Return_; -use PHPStan\Analyser\Scope; use PHPStan\Type\ObjectType; use Rector\NodeAnalyzer\ArgsAnalyzer; use Rector\PhpParser\Node\Value\ValueResolver; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Rector\ValueObject\PhpVersionFeature; use Rector\VendorLocker\NodeVendorLocker\ClassMethodReturnTypeOverrideGuard; use Rector\VersionBonding\Contract\MinPhpVersionInterface; @@ -21,7 +21,7 @@ /** * @see \Rector\Tests\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromSymfonySerializerRector\ReturnTypeFromSymfonySerializerRectorTest */ -final class ReturnTypeFromSymfonySerializerRector extends AbstractScopeAwareRector implements MinPhpVersionInterface +final class ReturnTypeFromSymfonySerializerRector extends AbstractRector implements MinPhpVersionInterface { /** * @readonly @@ -84,8 +84,9 @@ public function provideMinPhpVersion() : int /** * @param ClassMethod $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); if ($node->stmts === null) { return null; } diff --git a/rules/TypeDeclaration/Rector/ClassMethod/ReturnUnionTypeRector.php b/rules/TypeDeclaration/Rector/ClassMethod/ReturnUnionTypeRector.php index 506faea95a9..c657641247d 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/ReturnUnionTypeRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/ReturnUnionTypeRector.php @@ -6,8 +6,8 @@ use PhpParser\Node; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Function_; -use PHPStan\Analyser\Scope; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Rector\TypeDeclaration\NodeManipulator\AddUnionReturnType; use Rector\ValueObject\PhpVersionFeature; use Rector\VersionBonding\Contract\MinPhpVersionInterface; @@ -16,7 +16,7 @@ /** * @see \Rector\Tests\TypeDeclaration\Rector\ClassMethod\ReturnUnionTypeRector\ReturnUnionTypeRectorTest */ -final class ReturnUnionTypeRector extends AbstractScopeAwareRector implements MinPhpVersionInterface +final class ReturnUnionTypeRector extends AbstractRector implements MinPhpVersionInterface { /** * @readonly @@ -79,8 +79,9 @@ public function provideMinPhpVersion() : int /** * @param ClassMethod|Function_ $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); return $this->addUnionReturnType->add($node, $scope); } } diff --git a/rules/TypeDeclaration/Rector/ClassMethod/StringReturnTypeFromStrictScalarReturnsRector.php b/rules/TypeDeclaration/Rector/ClassMethod/StringReturnTypeFromStrictScalarReturnsRector.php index bad1e2cdb8c..2e730b0a408 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/StringReturnTypeFromStrictScalarReturnsRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/StringReturnTypeFromStrictScalarReturnsRector.php @@ -11,7 +11,8 @@ use PhpParser\Node\Stmt\Function_; use PHPStan\Analyser\Scope; use Rector\PhpParser\Node\BetterNodeFinder; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer; use Rector\ValueObject\PhpVersion; use Rector\VendorLocker\NodeVendorLocker\ClassMethodReturnTypeOverrideGuard; @@ -21,7 +22,7 @@ /** * @see \Rector\Tests\TypeDeclaration\Rector\ClassMethod\StringReturnTypeFromStrictScalarReturnsRector\StringReturnTypeFromStrictScalarReturnsRectorTest */ -final class StringReturnTypeFromStrictScalarReturnsRector extends AbstractScopeAwareRector implements MinPhpVersionInterface +final class StringReturnTypeFromStrictScalarReturnsRector extends AbstractRector implements MinPhpVersionInterface { /** * @readonly @@ -84,8 +85,9 @@ public function getNodeTypes() : array /** * @param ClassMethod|Function_ $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); // already added → skip if ($node->returnType instanceof Node) { return null; diff --git a/rules/TypeDeclaration/Rector/ClassMethod/StringReturnTypeFromStrictStringReturnsRector.php b/rules/TypeDeclaration/Rector/ClassMethod/StringReturnTypeFromStrictStringReturnsRector.php index 25566a1800e..788570a869c 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/StringReturnTypeFromStrictStringReturnsRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/StringReturnTypeFromStrictStringReturnsRector.php @@ -13,7 +13,8 @@ use PhpParser\Node\Stmt\Return_; use PHPStan\Analyser\Scope; use Rector\PhpParser\Node\BetterNodeFinder; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer; use Rector\ValueObject\PhpVersion; use Rector\VendorLocker\NodeVendorLocker\ClassMethodReturnTypeOverrideGuard; @@ -23,7 +24,7 @@ /** * @see \Rector\Tests\TypeDeclaration\Rector\ClassMethod\StringReturnTypeFromStrictStringReturnsRector\StringReturnTypeFromStrictStringReturnsRectorTest */ -final class StringReturnTypeFromStrictStringReturnsRector extends AbstractScopeAwareRector implements MinPhpVersionInterface +final class StringReturnTypeFromStrictStringReturnsRector extends AbstractRector implements MinPhpVersionInterface { /** * @readonly @@ -86,8 +87,9 @@ public function getNodeTypes() : array /** * @param ClassMethod|Function_ $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); // already added → skip if ($node->returnType instanceof Node) { return null; diff --git a/rules/TypeDeclaration/Rector/Class_/ReturnTypeFromStrictTernaryRector.php b/rules/TypeDeclaration/Rector/Class_/ReturnTypeFromStrictTernaryRector.php index 2781e8fb84b..066e1514174 100644 --- a/rules/TypeDeclaration/Rector/Class_/ReturnTypeFromStrictTernaryRector.php +++ b/rules/TypeDeclaration/Rector/Class_/ReturnTypeFromStrictTernaryRector.php @@ -13,8 +13,9 @@ use PHPStan\Type\UnionType; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\PhpParser\Node\BetterNodeFinder; +use Rector\PHPStan\ScopeFetcher; use Rector\PHPStanStaticTypeMapper\Enum\TypeKind; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\Rector\AbstractRector; use Rector\StaticTypeMapper\StaticTypeMapper; use Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer; use Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer; @@ -26,7 +27,7 @@ /** * @see \Rector\Tests\TypeDeclaration\Rector\Class_\ReturnTypeFromStrictTernaryRector\ReturnTypeFromStrictTernaryRectorTest */ -final class ReturnTypeFromStrictTernaryRector extends AbstractScopeAwareRector implements MinPhpVersionInterface +final class ReturnTypeFromStrictTernaryRector extends AbstractRector implements MinPhpVersionInterface { /** * @readonly @@ -93,8 +94,9 @@ public function getNodeTypes() : array /** * @param ClassMethod|Function_ $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); if ($this->shouldSkip($node, $scope)) { return null; } diff --git a/rules/TypeDeclaration/Rector/Closure/AddClosureNeverReturnTypeRector.php b/rules/TypeDeclaration/Rector/Closure/AddClosureNeverReturnTypeRector.php index 264def049c5..8b0caff5af4 100644 --- a/rules/TypeDeclaration/Rector/Closure/AddClosureNeverReturnTypeRector.php +++ b/rules/TypeDeclaration/Rector/Closure/AddClosureNeverReturnTypeRector.php @@ -5,8 +5,8 @@ use PhpParser\Node; use PhpParser\Node\Expr\Closure; -use PHPStan\Analyser\Scope; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Rector\TypeDeclaration\NodeManipulator\AddNeverReturnType; use Rector\ValueObject\PhpVersionFeature; use Rector\VersionBonding\Contract\MinPhpVersionInterface; @@ -15,7 +15,7 @@ /** * @see \Rector\Tests\TypeDeclaration\Rector\Closure\AddClosureNeverReturnTypeRector\AddClosureNeverReturnTypeRectorTest */ -final class AddClosureNeverReturnTypeRector extends AbstractScopeAwareRector implements MinPhpVersionInterface +final class AddClosureNeverReturnTypeRector extends AbstractRector implements MinPhpVersionInterface { /** * @readonly @@ -50,8 +50,9 @@ public function getNodeTypes() : array /** * @param Closure $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); return $this->addNeverReturnType->add($node, $scope); } public function provideMinPhpVersion() : int diff --git a/rules/TypeDeclaration/Rector/Empty_/EmptyOnNullableObjectToInstanceOfRector.php b/rules/TypeDeclaration/Rector/Empty_/EmptyOnNullableObjectToInstanceOfRector.php index 0a3a00366b1..97c042bec7c 100644 --- a/rules/TypeDeclaration/Rector/Empty_/EmptyOnNullableObjectToInstanceOfRector.php +++ b/rules/TypeDeclaration/Rector/Empty_/EmptyOnNullableObjectToInstanceOfRector.php @@ -9,19 +9,19 @@ use PhpParser\Node\Expr\Empty_; use PhpParser\Node\Expr\Instanceof_; use PhpParser\Node\Name; -use PHPStan\Analyser\Scope; use PHPStan\Type\ObjectType; use PHPStan\Type\TypeCombinator; use PHPStan\Type\UnionType; +use Rector\PHPStan\ScopeFetcher; use Rector\PHPStanStaticTypeMapper\Enum\TypeKind; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\Rector\AbstractRector; use Rector\StaticTypeMapper\StaticTypeMapper; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** * @see \Rector\Tests\TypeDeclaration\Rector\Empty_\EmptyOnNullableObjectToInstanceOfRector\EmptyOnNullableObjectToInstanceOfRectorTest */ -final class EmptyOnNullableObjectToInstanceOfRector extends AbstractScopeAwareRector +final class EmptyOnNullableObjectToInstanceOfRector extends AbstractRector { /** * @readonly @@ -73,7 +73,7 @@ public function getNodeTypes() : array * @param Empty_|BooleanNot $node * @return null|\PhpParser\Node\Expr\Instanceof_|\PhpParser\Node\Expr\BooleanNot */ - public function refactorWithScope(Node $node, Scope $scope) + public function refactor(Node $node) { if ($node instanceof BooleanNot) { if (!$node->expr instanceof Empty_) { @@ -88,6 +88,7 @@ public function refactorWithScope(Node $node, Scope $scope) if ($empty->expr instanceof ArrayDimFetch) { return null; } + $scope = ScopeFetcher::fetch($node); $exprType = $scope->getNativeType($empty->expr); if (!$exprType instanceof UnionType) { return null; diff --git a/rules/TypeDeclaration/Rector/FunctionLike/AddReturnTypeDeclarationFromYieldsRector.php b/rules/TypeDeclaration/Rector/FunctionLike/AddReturnTypeDeclarationFromYieldsRector.php index e21f959cd51..f1a69612d01 100644 --- a/rules/TypeDeclaration/Rector/FunctionLike/AddReturnTypeDeclarationFromYieldsRector.php +++ b/rules/TypeDeclaration/Rector/FunctionLike/AddReturnTypeDeclarationFromYieldsRector.php @@ -17,13 +17,13 @@ use PhpParser\Node\Stmt\Expression; use PhpParser\Node\Stmt\Function_; use PhpParser\NodeTraverser; -use PHPStan\Analyser\Scope; use PHPStan\Type\MixedType; use PHPStan\Type\Type; use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory; use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; +use Rector\PHPStan\ScopeFetcher; use Rector\PHPStanStaticTypeMapper\Enum\TypeKind; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\Rector\AbstractRector; use Rector\StaticTypeMapper\StaticTypeMapper; use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedGenericObjectType; use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType; @@ -35,7 +35,7 @@ /** * @see \Rector\Tests\TypeDeclaration\Rector\FunctionLike\AddReturnTypeDeclarationFromYieldsRector\AddReturnTypeDeclarationFromYieldsRectorTest */ -final class AddReturnTypeDeclarationFromYieldsRector extends AbstractScopeAwareRector implements MinPhpVersionInterface +final class AddReturnTypeDeclarationFromYieldsRector extends AbstractRector implements MinPhpVersionInterface { /** * @readonly @@ -99,8 +99,9 @@ public function getNodeTypes() : array /** * @param Function_|ClassMethod $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); $yieldNodes = $this->findCurrentScopeYieldNodes($node); if ($yieldNodes === []) { return null; diff --git a/rules/TypeDeclaration/Rector/Property/AddPropertyTypeDeclarationRector.php b/rules/TypeDeclaration/Rector/Property/AddPropertyTypeDeclarationRector.php index a556d165a5e..365902cf029 100644 --- a/rules/TypeDeclaration/Rector/Property/AddPropertyTypeDeclarationRector.php +++ b/rules/TypeDeclaration/Rector/Property/AddPropertyTypeDeclarationRector.php @@ -5,13 +5,13 @@ use PhpParser\Node; use PhpParser\Node\Stmt\Property; -use PHPStan\Analyser\Scope; use PHPStan\Reflection\ClassReflection; use PHPStan\Type\StringType; use Rector\Contract\Rector\ConfigurableRectorInterface; use Rector\Exception\ShouldNotHappenException; +use Rector\PHPStan\ScopeFetcher; use Rector\PHPStanStaticTypeMapper\Enum\TypeKind; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\Rector\AbstractRector; use Rector\StaticTypeMapper\StaticTypeMapper; use Rector\TypeDeclaration\ValueObject\AddPropertyTypeDeclaration; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; @@ -20,7 +20,7 @@ /** * @see \Rector\Tests\TypeDeclaration\Rector\Property\AddPropertyTypeDeclarationRector\AddPropertyTypeDeclarationRectorTest */ -final class AddPropertyTypeDeclarationRector extends AbstractScopeAwareRector implements ConfigurableRectorInterface +final class AddPropertyTypeDeclarationRector extends AbstractRector implements ConfigurableRectorInterface { /** * @readonly @@ -61,8 +61,9 @@ public function getNodeTypes() : array /** * @param Property $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); // type is already known if ($node->type !== null) { return null; diff --git a/rules/TypeDeclaration/TypeAnalyzer/PropertyTypeDefaultValueAnalyzer.php b/rules/TypeDeclaration/TypeAnalyzer/PropertyTypeDefaultValueAnalyzer.php index 861fea028f1..86bddc0b5a0 100644 --- a/rules/TypeDeclaration/TypeAnalyzer/PropertyTypeDefaultValueAnalyzer.php +++ b/rules/TypeDeclaration/TypeAnalyzer/PropertyTypeDefaultValueAnalyzer.php @@ -5,7 +5,6 @@ use PhpParser\Node\Expr; use PhpParser\Node\Stmt\PropertyProperty; -use PHPStan\Type\ArrayType; use PHPStan\Type\Type; use Rector\StaticTypeMapper\StaticTypeMapper; final class PropertyTypeDefaultValueAnalyzer @@ -26,7 +25,7 @@ public function doesConflictWithDefaultValue(PropertyProperty $propertyProperty, } // the defaults can be in conflict $defaultType = $this->staticTypeMapper->mapPhpParserNodePHPStanType($propertyProperty->default); - if ($defaultType instanceof ArrayType && $propertyType instanceof ArrayType) { + if ($defaultType->isArray()->yes() && $propertyType->isArray()->yes()) { return \false; } // type is not matching, skip it diff --git a/rules/TypeDeclaration/TypeInferer/PropertyTypeInferer/TrustedClassMethodPropertyTypeInferer.php b/rules/TypeDeclaration/TypeInferer/PropertyTypeInferer/TrustedClassMethodPropertyTypeInferer.php index 3580addf43f..670508a441d 100644 --- a/rules/TypeDeclaration/TypeInferer/PropertyTypeInferer/TrustedClassMethodPropertyTypeInferer.php +++ b/rules/TypeDeclaration/TypeInferer/PropertyTypeInferer/TrustedClassMethodPropertyTypeInferer.php @@ -195,7 +195,7 @@ private function isParamNullable(Param $param) : bool } if ($param->default instanceof Expr) { $defaultValueStaticType = $this->nodeTypeResolver->getType($param->default); - if ($defaultValueStaticType instanceof NullType) { + if ($defaultValueStaticType->isNull()->yes()) { return \true; } } diff --git a/rules/TypeDeclaration/TypeInferer/SplArrayFixedTypeNarrower.php b/rules/TypeDeclaration/TypeInferer/SplArrayFixedTypeNarrower.php index 18b7850382b..30ba1aec090 100644 --- a/rules/TypeDeclaration/TypeInferer/SplArrayFixedTypeNarrower.php +++ b/rules/TypeDeclaration/TypeInferer/SplArrayFixedTypeNarrower.php @@ -6,7 +6,7 @@ use PHPStan\Type\Generic\GenericObjectType; use PHPStan\Type\ObjectType; use PHPStan\Type\Type; -use PHPStan\Type\TypeWithClassName; +use Rector\StaticTypeMapper\Resolver\ClassNameFromObjectTypeResolver; final class SplArrayFixedTypeNarrower { public function narrow(Type $paramType) : Type @@ -14,22 +14,23 @@ public function narrow(Type $paramType) : Type if ($paramType->isSuperTypeOf(new ObjectType('SplFixedArray'))->no()) { return $paramType; } - if (!$paramType instanceof TypeWithClassName) { + $className = ClassNameFromObjectTypeResolver::resolve($paramType); + if ($className === null) { return $paramType; } if ($paramType instanceof GenericObjectType) { return $paramType; } $types = []; - if ($paramType->getClassName() === 'PhpCsFixer\\Tokenizer\\Tokens') { + if ($className === 'PhpCsFixer\\Tokenizer\\Tokens') { $types[] = new ObjectType('PhpCsFixer\\Tokenizer\\Token'); } - if ($paramType->getClassName() === 'PhpCsFixer\\Doctrine\\Annotation\\Tokens') { + if ($className === 'PhpCsFixer\\Doctrine\\Annotation\\Tokens') { $types[] = new ObjectType('PhpCsFixer\\Doctrine\\Annotation\\Token'); } if ($types === []) { return $paramType; } - return new GenericObjectType($paramType->getClassName(), $types); + return new GenericObjectType($className, $types); } } diff --git a/rules/Visibility/Rector/ClassMethod/ChangeMethodVisibilityRector.php b/rules/Visibility/Rector/ClassMethod/ChangeMethodVisibilityRector.php index 783bf83e39c..f7a6f7af87d 100644 --- a/rules/Visibility/Rector/ClassMethod/ChangeMethodVisibilityRector.php +++ b/rules/Visibility/Rector/ClassMethod/ChangeMethodVisibilityRector.php @@ -5,11 +5,11 @@ use PhpParser\Node; use PhpParser\Node\Stmt\ClassMethod; -use PHPStan\Analyser\Scope; use Rector\Contract\Rector\ConfigurableRectorInterface; use Rector\NodeCollector\ScopeResolver\ParentClassScopeResolver; +use Rector\PHPStan\ScopeFetcher; use Rector\Privatization\NodeManipulator\VisibilityManipulator; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\Rector\AbstractRector; use Rector\ValueObject\Visibility; use Rector\Visibility\ValueObject\ChangeMethodVisibility; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; @@ -18,7 +18,7 @@ /** * @see \Rector\Tests\Visibility\Rector\ClassMethod\ChangeMethodVisibilityRector\ChangeMethodVisibilityRectorTest */ -final class ChangeMethodVisibilityRector extends AbstractScopeAwareRector implements ConfigurableRectorInterface +final class ChangeMethodVisibilityRector extends AbstractRector implements ConfigurableRectorInterface { /** * @readonly @@ -83,8 +83,9 @@ public function getNodeTypes() : array /** * @param ClassMethod $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { + $scope = ScopeFetcher::fetch($node); if ($this->methodVisibilities === []) { return null; } diff --git a/src/Application/VersionResolver.php b/src/Application/VersionResolver.php index 17c7214349b..2766e2bb700 100644 --- a/src/Application/VersionResolver.php +++ b/src/Application/VersionResolver.php @@ -19,12 +19,12 @@ final class VersionResolver * @api * @var string */ - public const PACKAGE_VERSION = '88ac600b6afbc35fe034c43da6f35e57ea6b7ca0'; + public const PACKAGE_VERSION = 'fb3c33aec495946d0bd1b9422b9b65f44665defd'; /** * @api * @var string */ - public const RELEASE_DATE = '2024-11-06 16:45:35'; + public const RELEASE_DATE = '2024-11-13 08:57:12'; /** * @var int */ diff --git a/src/Contract/Rector/ScopeAwareRectorInterface.php b/src/Contract/Rector/ScopeAwareRectorInterface.php index 7af811c7ec5..f41a140ff03 100644 --- a/src/Contract/Rector/ScopeAwareRectorInterface.php +++ b/src/Contract/Rector/ScopeAwareRectorInterface.php @@ -6,6 +6,10 @@ use PhpParser\Node; use PhpParser\NodeTraverser; use PHPStan\Analyser\Scope; +/** + * @deprecated This class is deprecated, as too granular. + * Use \Rector\Rector\AbstractRector instead with help of \Rector\PHPStan\ScopeFetcher + */ interface ScopeAwareRectorInterface extends \Rector\Contract\Rector\RectorInterface { /** diff --git a/src/NodeAnalyzer/PropertyAnalyzer.php b/src/NodeAnalyzer/PropertyAnalyzer.php index 92b9a322406..ea1210ca30c 100644 --- a/src/NodeAnalyzer/PropertyAnalyzer.php +++ b/src/NodeAnalyzer/PropertyAnalyzer.php @@ -4,12 +4,10 @@ namespace Rector\NodeAnalyzer; use PhpParser\Node\Stmt\Property; -use PHPStan\Type\CallableType; -use PHPStan\Type\NullType; use PHPStan\Type\Type; -use PHPStan\Type\TypeWithClassName; use PHPStan\Type\UnionType; use Rector\NodeTypeResolver\NodeTypeResolver; +use Rector\StaticTypeMapper\Resolver\ClassNameFromObjectTypeResolver; use Rector\StaticTypeMapper\ValueObject\Type\NonExistingObjectType; final class PropertyAnalyzer { @@ -25,7 +23,7 @@ public function __construct(NodeTypeResolver $nodeTypeResolver) public function hasForbiddenType(Property $property) : bool { $propertyType = $this->nodeTypeResolver->getType($property); - if ($propertyType instanceof NullType) { + if ($propertyType->isNull()->yes()) { return \true; } if ($this->isForbiddenType($propertyType)) { @@ -51,9 +49,9 @@ private function isForbiddenType(Type $type) : bool } private function isCallableType(Type $type) : bool { - if ($type instanceof TypeWithClassName && $type->getClassName() === 'Closure') { + if (ClassNameFromObjectTypeResolver::resolve($type) === 'Closure') { return \false; } - return $type instanceof CallableType; + return $type->isCallable()->yes(); } } diff --git a/src/NodeAnalyzer/PropertyPresenceChecker.php b/src/NodeAnalyzer/PropertyPresenceChecker.php index 8c03cbca58e..059b2106c54 100644 --- a/src/NodeAnalyzer/PropertyPresenceChecker.php +++ b/src/NodeAnalyzer/PropertyPresenceChecker.php @@ -10,11 +10,11 @@ use PHPStan\Reflection\Php\PhpPropertyReflection; use PHPStan\Reflection\ReflectionProvider; use PHPStan\Type\Type; -use PHPStan\Type\TypeWithClassName; use Rector\NodeNameResolver\NodeNameResolver; use Rector\Php80\NodeAnalyzer\PromotedPropertyResolver; use Rector\PhpParser\AstResolver; use Rector\PostRector\ValueObject\PropertyMetadata; +use Rector\StaticTypeMapper\Resolver\ClassNameFromObjectTypeResolver; /** * Can be local property, parent property etc. */ @@ -106,14 +106,14 @@ private function matchPropertyByType(PropertyMetadata $propertyMetadata, PhpProp if (!$propertyMetadata->getType() instanceof Type) { return null; } - if (!$propertyMetadata->getType() instanceof TypeWithClassName) { + if (ClassNameFromObjectTypeResolver::resolve($propertyMetadata->getType()) === null) { return null; } - if (!$phpPropertyReflection->getWritableType() instanceof TypeWithClassName) { + if (ClassNameFromObjectTypeResolver::resolve($phpPropertyReflection->getWritableType()) === null) { return null; } - $propertyObjectTypeWithClassName = $propertyMetadata->getType(); - if (!$propertyObjectTypeWithClassName->equals($phpPropertyReflection->getWritableType())) { + $type = $propertyMetadata->getType(); + if (!$type->equals($phpPropertyReflection->getWritableType())) { return null; } return $this->astResolver->resolvePropertyFromPropertyReflection($phpPropertyReflection); diff --git a/src/NodeManipulator/ClassDependencyManipulator.php b/src/NodeManipulator/ClassDependencyManipulator.php index 3e24022e969..0aaaa401af8 100644 --- a/src/NodeManipulator/ClassDependencyManipulator.php +++ b/src/NodeManipulator/ClassDependencyManipulator.php @@ -23,6 +23,9 @@ use Rector\TypeDeclaration\NodeAnalyzer\AutowiredClassMethodOrPropertyAnalyzer; use Rector\ValueObject\MethodName; use Rector\ValueObject\PhpVersionFeature; +/** + * @see \Rector\Tests\NodeManipulator\ClassDependencyManipulatorTest + */ final class ClassDependencyManipulator { /** diff --git a/src/NodeManipulator/ClassInsertManipulator.php b/src/NodeManipulator/ClassInsertManipulator.php index ed48b4296a1..c669096d350 100644 --- a/src/NodeManipulator/ClassInsertManipulator.php +++ b/src/NodeManipulator/ClassInsertManipulator.php @@ -3,7 +3,6 @@ declare (strict_types=1); namespace Rector\NodeManipulator; -use PhpParser\Node\Stmt; use PhpParser\Node\Stmt\Class_; use PhpParser\Node\Stmt\ClassConst; use PhpParser\Node\Stmt\ClassMethod; @@ -24,19 +23,47 @@ public function __construct(NodeFactory $nodeFactory) } /** * @api - * @param \PhpParser\Node\Stmt\Property|\PhpParser\Node\Stmt\ClassConst|\PhpParser\Node\Stmt\ClassMethod $stmt + * @param \PhpParser\Node\Stmt\Property|\PhpParser\Node\Stmt\ClassConst|\PhpParser\Node\Stmt\ClassMethod $addedStmt */ - public function addAsFirstMethod(Class_ $class, $stmt) : void + public function addAsFirstMethod(Class_ $class, $addedStmt) : void { $scope = $class->getAttribute(AttributeKey::SCOPE); - $stmt->setAttribute(AttributeKey::SCOPE, $scope); - if ($this->isSuccessToInsertBeforeFirstMethod($class, $stmt)) { + $addedStmt->setAttribute(AttributeKey::SCOPE, $scope); + // no stmts? add this one + if ($class->stmts === []) { + $class->stmts[] = $addedStmt; return; } - if ($this->isSuccessToInsertAfterLastProperty($class, $stmt)) { + $newClassStmts = []; + $isAdded = \false; + foreach ($class->stmts as $key => $classStmt) { + $nextStmt = $class->stmts[$key + 1] ?? null; + if ($isAdded === \false) { + // first class method + if ($classStmt instanceof ClassMethod) { + $newClassStmts[] = $addedStmt; + $newClassStmts[] = $classStmt; + $isAdded = \true; + continue; + } + // after last property + if ($classStmt instanceof Property && !$nextStmt instanceof Property) { + $newClassStmts[] = $classStmt; + $newClassStmts[] = $addedStmt; + $isAdded = \true; + continue; + } + } + $newClassStmts[] = $classStmt; + } + // still not added? try after last trait + // @todo + if ($isAdded) { + $class->stmts = $newClassStmts; return; } - $class->stmts[] = $stmt; + // keep added at least as first stmt + $class->stmts = \array_merge([$addedStmt], $class->stmts); } /** * @internal Use PropertyAdder service instead @@ -50,42 +77,4 @@ public function addPropertyToClass(Class_ $class, string $name, ?Type $type) : v $property = $this->nodeFactory->createPrivatePropertyFromNameAndType($name, $type); $this->addAsFirstMethod($class, $property); } - /** - * @param Stmt[] $stmts - * @return Stmt[] - */ - private function insertBefore(array $stmts, Stmt $stmt, int $key) : array - { - \array_splice($stmts, $key, 0, [$stmt]); - return $stmts; - } - /** - * @param \PhpParser\Node\Stmt\ClassConst|\PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Property $stmt - */ - private function isSuccessToInsertBeforeFirstMethod(Class_ $class, $stmt) : bool - { - foreach ($class->stmts as $key => $classStmt) { - if (!$classStmt instanceof ClassMethod) { - continue; - } - $class->stmts = $this->insertBefore($class->stmts, $stmt, $key); - return \true; - } - return \false; - } - /** - * @param \PhpParser\Node\Stmt\ClassConst|\PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Property $stmt - */ - private function isSuccessToInsertAfterLastProperty(Class_ $class, $stmt) : bool - { - $previousElement = null; - foreach ($class->stmts as $key => $classStmt) { - if ($previousElement instanceof Property && !$classStmt instanceof Property) { - $class->stmts = $this->insertBefore($class->stmts, $stmt, $key); - return \true; - } - $previousElement = $classStmt; - } - return \false; - } } diff --git a/src/NodeManipulator/PropertyManipulator.php b/src/NodeManipulator/PropertyManipulator.php index 58e91b8acf9..819681c14d1 100644 --- a/src/NodeManipulator/PropertyManipulator.php +++ b/src/NodeManipulator/PropertyManipulator.php @@ -92,7 +92,7 @@ final class PropertyManipulator /** * @var string[]|class-string[] */ - private const DOCTRINE_PROPERTY_ANNOTATIONS = ['Doctrine\\ORM\\Mapping\\Entity', 'Doctrine\\ORM\\Mapping\\Table', 'Doctrine\\ORM\\Mapping\\MappedSuperclass']; + private const DOCTRINE_PROPERTY_ANNOTATIONS = ['Doctrine\\ORM\\Mapping\\Entity', 'Doctrine\\ORM\\Mapping\\Table', 'Doctrine\\ORM\\Mapping\\MappedSuperclass', 'Doctrine\\ORM\\Mapping\\Embeddable']; public function __construct(\Rector\NodeManipulator\AssignManipulator $assignManipulator, BetterNodeFinder $betterNodeFinder, PhpDocInfoFactory $phpDocInfoFactory, PropertyFetchFinder $propertyFetchFinder, NodeNameResolver $nodeNameResolver, PhpAttributeAnalyzer $phpAttributeAnalyzer, NodeTypeResolver $nodeTypeResolver, PromotedPropertyResolver $promotedPropertyResolver, ConstructorAssignDetector $constructorAssignDetector, AstResolver $astResolver, PropertyFetchAnalyzer $propertyFetchAnalyzer) { $this->assignManipulator = $assignManipulator; diff --git a/src/NodeTypeResolver/NodeTypeResolver.php b/src/NodeTypeResolver/NodeTypeResolver.php index 5f8fcae3fc7..5b7daa4e907 100644 --- a/src/NodeTypeResolver/NodeTypeResolver.php +++ b/src/NodeTypeResolver/NodeTypeResolver.php @@ -381,7 +381,7 @@ private function isAnonymousObjectType(Type $type) : bool } private function isUnionTypeable(Type $first, Type $second) : bool { - return !$first instanceof UnionType && !$second instanceof UnionType && !$second instanceof NullType; + return !$first instanceof UnionType && !$second instanceof UnionType && !$second->isNull()->yes(); } private function isMatchingUnionType(Type $resolvedType, ObjectType $requiredObjectType) : bool { diff --git a/src/NodeTypeResolver/PHPStan/Type/StaticTypeAnalyzer.php b/src/NodeTypeResolver/PHPStan/Type/StaticTypeAnalyzer.php index b94e8619479..e91936e2b6c 100644 --- a/src/NodeTypeResolver/PHPStan/Type/StaticTypeAnalyzer.php +++ b/src/NodeTypeResolver/PHPStan/Type/StaticTypeAnalyzer.php @@ -7,7 +7,6 @@ use PHPStan\Type\Constant\ConstantArrayType; use PHPStan\Type\ConstantScalarType; use PHPStan\Type\MixedType; -use PHPStan\Type\NullType; use PHPStan\Type\ObjectType; use PHPStan\Type\Type; use PHPStan\Type\UnionType; @@ -41,7 +40,7 @@ public function isAlwaysTruableType(Type $type) : bool if ($type instanceof ObjectType) { return \true; } - if ($type instanceof ConstantScalarType && !$type instanceof NullType) { + if ($type instanceof ConstantScalarType && !$type->isNull()->yes()) { return (bool) $type->getValue(); } if ($type->isScalar()->yes()) { diff --git a/src/NodeTypeResolver/PHPStan/Type/TypeFactory.php b/src/NodeTypeResolver/PHPStan/Type/TypeFactory.php index b2137b85382..225709d151d 100644 --- a/src/NodeTypeResolver/PHPStan/Type/TypeFactory.php +++ b/src/NodeTypeResolver/PHPStan/Type/TypeFactory.php @@ -6,7 +6,6 @@ use PHPStan\Type\ArrayType; use PHPStan\Type\BooleanType; use PHPStan\Type\Constant\ConstantArrayType; -use PHPStan\Type\Constant\ConstantBooleanType; use PHPStan\Type\Constant\ConstantFloatType; use PHPStan\Type\Constant\ConstantIntegerType; use PHPStan\Type\Constant\ConstantStringType; @@ -93,15 +92,13 @@ private function normalizeObjectType(int $totalTypes, Type $type) : Type } private function normalizeBooleanType(bool &$hasFalse, bool &$hasTrue, Type $type) : Type { - if ($type instanceof ConstantBooleanType) { - if ($type->getValue()) { - $hasTrue = \true; - } - if ($type->getValue() === \false) { - $hasFalse = \true; - } + if ($type->isTrue()->yes()) { + $hasTrue = \true; + } + if ($type->isFalse()->yes()) { + $hasFalse = \true; } - if ($hasFalse && $hasTrue && $type instanceof ConstantBooleanType) { + if ($hasFalse && $hasTrue && ($type->isTrue()->yes() || $type->isFalse()->yes())) { return new BooleanType(); } return $type; @@ -160,7 +157,7 @@ private function removeValueFromConstantType(Type $type) : Type if ($type instanceof ConstantIntegerType) { return new IntegerType(); } - if ($type instanceof ConstantBooleanType) { + if ($type->isTrue()->yes() || $type->isFalse()->yes()) { return new BooleanType(); } return $type; diff --git a/src/NodeTypeResolver/TypeComparator/ScalarTypeComparator.php b/src/NodeTypeResolver/TypeComparator/ScalarTypeComparator.php index a7210e0092e..604df690a0f 100644 --- a/src/NodeTypeResolver/TypeComparator/ScalarTypeComparator.php +++ b/src/NodeTypeResolver/TypeComparator/ScalarTypeComparator.php @@ -3,7 +3,6 @@ declare (strict_types=1); namespace Rector\NodeTypeResolver\TypeComparator; -use PHPStan\Type\ClassStringType; use PHPStan\Type\Type; /** * @see \Rector\Tests\NodeTypeResolver\TypeComparator\ScalarTypeComparatorTest @@ -53,7 +52,7 @@ public function areDifferentScalarTypes(Type $firstType, Type $secondType) : boo if (!$firstType->isString()->yes()) { return \get_class($firstType) !== \get_class($secondType); } - if (!$secondType instanceof ClassStringType) { + if (!$secondType->isClassStringType()->yes()) { return \get_class($firstType) !== \get_class($secondType); } return \false; diff --git a/src/NodeTypeResolver/TypeComparator/TypeComparator.php b/src/NodeTypeResolver/TypeComparator/TypeComparator.php index 5a5a4a6e08c..0d77bd010e5 100644 --- a/src/NodeTypeResolver/TypeComparator/TypeComparator.php +++ b/src/NodeTypeResolver/TypeComparator/TypeComparator.php @@ -8,7 +8,6 @@ use PHPStan\Reflection\ClassReflection; use PHPStan\Type\ArrayType; use PHPStan\Type\BooleanType; -use PHPStan\Type\Constant\ConstantBooleanType; use PHPStan\Type\ConstantScalarType; use PHPStan\Type\Generic\TemplateType; use PHPStan\Type\MixedType; @@ -174,7 +173,7 @@ private function isMutualObjectSubtypes(Type $firstArrayItemType, Type $secondAr private function normalizeConstantBooleanType(Type $type) : Type { return TypeTraverser::map($type, static function (Type $type, callable $callable) : Type { - if ($type instanceof ConstantBooleanType) { + if ($type->isTrue()->yes() || $type->isFalse()->yes()) { return new BooleanType(); } return $callable($type); diff --git a/src/PHPStan/ScopeFetcher.php b/src/PHPStan/ScopeFetcher.php new file mode 100644 index 00000000000..202e01bf916 --- /dev/null +++ b/src/PHPStan/ScopeFetcher.php @@ -0,0 +1,23 @@ +getAttribute(AttributeKey::SCOPE); + if (!$currentScope instanceof Scope) { + $errorMessage = \sprintf('Scope not available on "%s" node. Fix scope refresh on changed nodes first', \get_class($node)); + throw new ShouldNotHappenException($errorMessage); + } + return $currentScope; + } +} diff --git a/src/PHPStanStaticTypeMapper/DoctrineTypeAnalyzer.php b/src/PHPStanStaticTypeMapper/DoctrineTypeAnalyzer.php index 410a0d1cfd6..7bfea910c4f 100644 --- a/src/PHPStanStaticTypeMapper/DoctrineTypeAnalyzer.php +++ b/src/PHPStanStaticTypeMapper/DoctrineTypeAnalyzer.php @@ -3,7 +3,6 @@ declare (strict_types=1); namespace Rector\PHPStanStaticTypeMapper; -use PHPStan\Type\ArrayType; use PHPStan\Type\ObjectType; use PHPStan\Type\Type; use PHPStan\Type\UnionType; @@ -14,20 +13,20 @@ public function isDoctrineCollectionWithIterableUnionType(Type $type) : bool if (!$type instanceof UnionType) { return \false; } - $arrayType = null; + $isArrayType = \false; $hasDoctrineCollectionType = \false; foreach ($type->getTypes() as $unionedType) { if ($this->isInstanceOfCollectionType($unionedType)) { $hasDoctrineCollectionType = \true; } - if ($unionedType instanceof ArrayType) { - $arrayType = $unionedType; + if ($unionedType->isArray()->yes()) { + $isArrayType = \true; } } if (!$hasDoctrineCollectionType) { return \false; } - return $arrayType instanceof ArrayType; + return $isArrayType; } public function isInstanceOfCollectionType(Type $type) : bool { diff --git a/src/PHPStanStaticTypeMapper/TypeMapper/ArrayTypeMapper.php b/src/PHPStanStaticTypeMapper/TypeMapper/ArrayTypeMapper.php index 03ff5836977..a872ace4650 100644 --- a/src/PHPStanStaticTypeMapper/TypeMapper/ArrayTypeMapper.php +++ b/src/PHPStanStaticTypeMapper/TypeMapper/ArrayTypeMapper.php @@ -176,7 +176,7 @@ private function isIntegerKeyAndNonNestedArray(ArrayType $arrayType) : bool if (!$arrayType->getKeyType()->isInteger()->yes()) { return \false; } - return !$arrayType->getItemType() instanceof ArrayType; + return !$arrayType->getItemType()->isArray()->yes(); } private function isClassStringArrayType(ArrayType $arrayType) : bool { diff --git a/src/PHPStanStaticTypeMapper/TypeMapper/BooleanTypeMapper.php b/src/PHPStanStaticTypeMapper/TypeMapper/BooleanTypeMapper.php index 14662ace74b..ee390bedb9c 100644 --- a/src/PHPStanStaticTypeMapper/TypeMapper/BooleanTypeMapper.php +++ b/src/PHPStanStaticTypeMapper/TypeMapper/BooleanTypeMapper.php @@ -7,7 +7,6 @@ use PhpParser\Node\Identifier; use PHPStan\PhpDocParser\Ast\Type\TypeNode; use PHPStan\Type\BooleanType; -use PHPStan\Type\Constant\ConstantBooleanType; use PHPStan\Type\Type; use Rector\Php\PhpVersionProvider; use Rector\PHPStanStaticTypeMapper\Contract\TypeMapperInterface; @@ -49,11 +48,17 @@ public function mapToPhpParserNode(Type $type, string $typeKind) : ?Node if ($typeKind === TypeKind::PROPERTY) { return new Identifier('bool'); } - if ($typeKind === TypeKind::UNION && $type instanceof ConstantBooleanType && $type->getValue() === \false) { + if ($typeKind === TypeKind::UNION && $type->isFalse()->yes()) { return new Identifier('false'); } - if ($this->phpVersionProvider->isAtLeastPhpVersion(PhpVersionFeature::NULL_FALSE_TRUE_STANDALONE_TYPE) && $type instanceof ConstantBooleanType) { - return $type->getValue() ? new Identifier('true') : new Identifier('false'); + if (!$this->phpVersionProvider->isAtLeastPhpVersion(PhpVersionFeature::NULL_FALSE_TRUE_STANDALONE_TYPE)) { + return new Identifier('bool'); + } + if ($type->isTrue()->yes()) { + return new Identifier('true'); + } + if ($type->isFalse()->yes()) { + return new Identifier('false'); } return new Identifier('bool'); } diff --git a/src/PHPStanStaticTypeMapper/TypeMapper/UnionTypeMapper.php b/src/PHPStanStaticTypeMapper/TypeMapper/UnionTypeMapper.php index 83458d09311..8f478b14bfa 100644 --- a/src/PHPStanStaticTypeMapper/TypeMapper/UnionTypeMapper.php +++ b/src/PHPStanStaticTypeMapper/TypeMapper/UnionTypeMapper.php @@ -12,7 +12,6 @@ use PhpParser\Node\NullableType; use PhpParser\Node\UnionType as PhpParserUnionType; use PHPStan\PhpDocParser\Ast\Type\TypeNode; -use PHPStan\Type\CallableType; use PHPStan\Type\Type; use PHPStan\Type\UnionType; use Rector\BetterPhpDocParser\ValueObject\Type\BracketsAwareUnionTypeNode; @@ -164,7 +163,7 @@ private function matchPhpParserUnionType(UnionType $unionType, string $typeKind) return null; } // special callable type only not allowed on property - if ($typeKind === TypeKind::PROPERTY && $unionedType instanceof CallableType) { + if ($typeKind === TypeKind::PROPERTY && $unionedType->isCallable()->yes()) { return null; } $phpParserUnionedTypes[] = $phpParserNode; diff --git a/src/PHPStanStaticTypeMapper/Utils/TypeUnwrapper.php b/src/PHPStanStaticTypeMapper/Utils/TypeUnwrapper.php index 687576043df..0a3a18b7278 100644 --- a/src/PHPStanStaticTypeMapper/Utils/TypeUnwrapper.php +++ b/src/PHPStanStaticTypeMapper/Utils/TypeUnwrapper.php @@ -3,11 +3,10 @@ declare (strict_types=1); namespace Rector\PHPStanStaticTypeMapper\Utils; -use PHPStan\Type\CallableType; use PHPStan\Type\Type; use PHPStan\Type\TypeCombinator; -use PHPStan\Type\TypeWithClassName; use PHPStan\Type\UnionType; +use Rector\StaticTypeMapper\Resolver\ClassNameFromObjectTypeResolver; final class TypeUnwrapper { public function unwrapFirstObjectTypeFromUnionType(Type $type) : Type @@ -16,20 +15,21 @@ public function unwrapFirstObjectTypeFromUnionType(Type $type) : Type return $type; } foreach ($type->getTypes() as $unionedType) { - if (!$unionedType instanceof TypeWithClassName) { + $className = ClassNameFromObjectTypeResolver::resolve($unionedType); + if ($className === null) { continue; } return $unionedType; } return $type; } - public function unwrapFirstCallableTypeFromUnionType(Type $type) : ?Type + public function unwrapFirstCallableTypeFromUnionType(Type $type) : Type { if (!$type instanceof UnionType) { return $type; } foreach ($type->getTypes() as $unionedType) { - if (!$unionedType instanceof CallableType) { + if (!$unionedType->isCallable()->yes()) { continue; } return $unionedType; @@ -38,27 +38,29 @@ public function unwrapFirstCallableTypeFromUnionType(Type $type) : ?Type } public function isIterableTypeValue(string $className, Type $type) : bool { - if (!$type instanceof TypeWithClassName) { + $typeClassName = ClassNameFromObjectTypeResolver::resolve($type); + if ($typeClassName === null) { return \false; } // get the namespace from $className $classNamespace = $this->namespace($className); // get the namespace from $parameterReflection - $reflectionNamespace = $this->namespace($type->getClassName()); + $reflectionNamespace = $this->namespace($typeClassName); // then match with - return $reflectionNamespace === $classNamespace && \substr_compare($type->getClassName(), '\\TValue', -\strlen('\\TValue')) === 0; + return $reflectionNamespace === $classNamespace && \substr_compare($typeClassName, '\\TValue', -\strlen('\\TValue')) === 0; } public function isIterableTypeKey(string $className, Type $type) : bool { - if (!$type instanceof TypeWithClassName) { + $typeClassName = ClassNameFromObjectTypeResolver::resolve($type); + if ($typeClassName === null) { return \false; } // get the namespace from $className $classNamespace = $this->namespace($className); // get the namespace from $parameterReflection - $reflectionNamespace = $this->namespace($type->getClassName()); + $reflectionNamespace = $this->namespace($typeClassName); // then match with - return $reflectionNamespace === $classNamespace && \substr_compare($type->getClassName(), '\\TKey', -\strlen('\\TKey')) === 0; + return $reflectionNamespace === $classNamespace && \substr_compare($typeClassName, '\\TKey', -\strlen('\\TKey')) === 0; } public function removeNullTypeFromUnionType(UnionType $unionType) : Type { diff --git a/src/PhpAttribute/NodeFactory/AnnotationToAttributeIntegerValueCaster.php b/src/PhpAttribute/NodeFactory/AnnotationToAttributeIntegerValueCaster.php index 1d6c48fe7ef..b53092e76e0 100644 --- a/src/PhpAttribute/NodeFactory/AnnotationToAttributeIntegerValueCaster.php +++ b/src/PhpAttribute/NodeFactory/AnnotationToAttributeIntegerValueCaster.php @@ -11,7 +11,6 @@ use PHPStan\Reflection\ParameterReflection; use PHPStan\Reflection\ParametersAcceptorSelector; use PHPStan\Reflection\ReflectionProvider; -use PHPStan\Type\IntegerType; use PHPStan\Type\Type; use PHPStan\Type\UnionType; use Rector\Php80\ValueObject\AnnotationToAttribute; @@ -71,14 +70,14 @@ public function castAttributeTypes(AnnotationToAttribute $annotationToAttribute, } private function containsInteger(Type $type) : bool { - if ($type instanceof IntegerType) { + if ($type->isInteger()->yes()) { return \true; } if (!$type instanceof UnionType) { return \false; } foreach ($type->getTypes() as $unionedType) { - if ($unionedType instanceof IntegerType) { + if ($unionedType->isInteger()->yes()) { return \true; } } diff --git a/src/PhpParser/AstResolver.php b/src/PhpParser/AstResolver.php index c3f6addd9c8..6b5bea1d2d2 100644 --- a/src/PhpParser/AstResolver.php +++ b/src/PhpParser/AstResolver.php @@ -26,13 +26,13 @@ use PHPStan\Reflection\Php\PhpFunctionReflection; use PHPStan\Reflection\Php\PhpPropertyReflection; use PHPStan\Reflection\ReflectionProvider; -use PHPStan\Type\TypeWithClassName; use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeTypeResolver\NodeScopeAndMetadataDecorator; use Rector\NodeTypeResolver\NodeTypeResolver; use Rector\PhpDocParser\PhpParser\SmartPhpParser; use Rector\PhpParser\Node\BetterNodeFinder; use Rector\Reflection\MethodReflectionResolver; +use Rector\StaticTypeMapper\Resolver\ClassNameFromObjectTypeResolver; use Rector\ValueObject\MethodName; use Throwable; /** @@ -179,14 +179,15 @@ public function resolveClassMethod(string $className, string $methodName) : ?Cla public function resolveClassMethodFromCall($call) : ?ClassMethod { $callerStaticType = $call instanceof MethodCall || $call instanceof NullsafeMethodCall ? $this->nodeTypeResolver->getType($call->var) : $this->nodeTypeResolver->getType($call->class); - if (!$callerStaticType instanceof TypeWithClassName) { + $className = ClassNameFromObjectTypeResolver::resolve($callerStaticType); + if ($className === null) { return null; } $methodName = $this->nodeNameResolver->getName($call->name); if ($methodName === null) { return null; } - return $this->resolveClassMethod($callerStaticType->getClassName(), $methodName); + return $this->resolveClassMethod($className, $methodName); } /** * @return \PhpParser\Node\Stmt\Trait_|\PhpParser\Node\Stmt\Class_|\PhpParser\Node\Stmt\Interface_|\PhpParser\Node\Stmt\Enum_|null diff --git a/src/PhpParser/Node/Value/ValueResolver.php b/src/PhpParser/Node/Value/ValueResolver.php index 7b6c07ef9df..b815a34eaba 100644 --- a/src/PhpParser/Node/Value/ValueResolver.php +++ b/src/PhpParser/Node/Value/ValueResolver.php @@ -17,7 +17,6 @@ use PHPStan\Type\Constant\ConstantArrayType; use PHPStan\Type\ConstantScalarType; use PHPStan\Type\ConstantType; -use PHPStan\Type\TypeWithClassName; use Rector\Enum\ObjectReference; use Rector\Exception\ShouldNotHappenException; use Rector\NodeAnalyzer\ConstFetchAnalyzer; @@ -26,6 +25,7 @@ use Rector\NodeTypeResolver\NodeTypeResolver; use Rector\Reflection\ClassReflectionAnalyzer; use Rector\Reflection\ReflectionResolver; +use Rector\StaticTypeMapper\Resolver\ClassNameFromObjectTypeResolver; use TypeError; /** * @see \Rector\Tests\PhpParser\Node\Value\ValueResolverTest @@ -211,7 +211,7 @@ private function extractConstantArrayTypeValue(ConstantArrayType $constantArrayT $value = $this->extractConstantArrayTypeValue($valueType); } elseif ($valueType instanceof ConstantScalarType) { $value = $valueType->getValue(); - } elseif ($valueType instanceof TypeWithClassName) { + } elseif (ClassNameFromObjectTypeResolver::resolve($valueType) !== null) { continue; } else { return null; diff --git a/src/PhpParser/NodeFinder/LocalMethodCallFinder.php b/src/PhpParser/NodeFinder/LocalMethodCallFinder.php index 3cc8229e8cf..9a9768ce5bc 100644 --- a/src/PhpParser/NodeFinder/LocalMethodCallFinder.php +++ b/src/PhpParser/NodeFinder/LocalMethodCallFinder.php @@ -8,10 +8,10 @@ use PhpParser\Node\Expr\StaticCall; use PhpParser\Node\Stmt\Class_; use PhpParser\Node\Stmt\ClassMethod; -use PHPStan\Type\TypeWithClassName; use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeTypeResolver\NodeTypeResolver; use Rector\PhpParser\Node\BetterNodeFinder; +use Rector\StaticTypeMapper\Resolver\ClassNameFromObjectTypeResolver; final class LocalMethodCallFinder { /** @@ -54,10 +54,7 @@ public function match(Class_ $class, ClassMethod $classMethod) : array return \false; } $callerType = $subNode instanceof MethodCall ? $this->nodeTypeResolver->getType($subNode->var) : $this->nodeTypeResolver->getType($subNode->class); - if (!$callerType instanceof TypeWithClassName) { - return \false; - } - return $callerType->getClassName() === $className; + return ClassNameFromObjectTypeResolver::resolve($callerType) === $className; }); return $matchingMethodCalls; } diff --git a/src/PhpParser/NodeFinder/PropertyFetchFinder.php b/src/PhpParser/NodeFinder/PropertyFetchFinder.php index 3edd83191f6..149d0afdf3f 100644 --- a/src/PhpParser/NodeFinder/PropertyFetchFinder.php +++ b/src/PhpParser/NodeFinder/PropertyFetchFinder.php @@ -22,7 +22,6 @@ use PHPStan\Reflection\ClassReflection; use PHPStan\Type\ObjectType; use PHPStan\Type\StaticType; -use PHPStan\Type\TypeWithClassName; use Rector\NodeAnalyzer\PropertyFetchAnalyzer; use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeTypeResolver\Node\AttributeKey; @@ -32,6 +31,7 @@ use Rector\PhpParser\AstResolver; use Rector\PhpParser\Node\BetterNodeFinder; use Rector\Reflection\ReflectionResolver; +use Rector\StaticTypeMapper\Resolver\ClassNameFromObjectTypeResolver; final class PropertyFetchFinder { /** @@ -248,10 +248,10 @@ private function isNamePropertyNameEquals(PropertyFetch $propertyFetch, string $ return \false; } $propertyFetchVarType = $this->nodeTypeResolver->getType($propertyFetch->var); - if (!$propertyFetchVarType instanceof TypeWithClassName) { + $propertyFetchVarTypeClassName = ClassNameFromObjectTypeResolver::resolve($propertyFetchVarType); + if ($propertyFetchVarTypeClassName === null) { return \false; } - $propertyFetchVarTypeClassName = $propertyFetchVarType->getClassName(); $classLikeName = $this->nodeNameResolver->getName($class); return $propertyFetchVarTypeClassName === $classLikeName; } diff --git a/src/Rector/AbstractScopeAwareRector.php b/src/Rector/AbstractScopeAwareRector.php index a79e85883dd..b96b135cb1c 100644 --- a/src/Rector/AbstractScopeAwareRector.php +++ b/src/Rector/AbstractScopeAwareRector.php @@ -10,6 +10,10 @@ use Rector\Contract\Rector\ScopeAwareRectorInterface; use Rector\Exception\ShouldNotHappenException; use Rector\NodeTypeResolver\Node\AttributeKey; +/** + * @deprecated This class is deprecated, as too granular. + * Use \Rector\Rector\AbstractRector instead with help of \Rector\PHPStan\ScopeFetcher + */ abstract class AbstractScopeAwareRector extends \Rector\Rector\AbstractRector implements ScopeAwareRectorInterface { /** diff --git a/src/Reflection/ReflectionResolver.php b/src/Reflection/ReflectionResolver.php index 8b2b69e5e13..a09b40487af 100644 --- a/src/Reflection/ReflectionResolver.php +++ b/src/Reflection/ReflectionResolver.php @@ -24,12 +24,12 @@ use PHPStan\Reflection\ReflectionProvider; use PHPStan\Type\BenevolentUnionType; use PHPStan\Type\TypeCombinator; -use PHPStan\Type\TypeWithClassName; use Rector\Exception\ShouldNotHappenException; use Rector\NodeAnalyzer\ClassAnalyzer; use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\NodeTypeResolver; +use Rector\StaticTypeMapper\Resolver\ClassNameFromObjectTypeResolver; use Rector\StaticTypeMapper\ValueObject\Type\ShortenedObjectType; use Rector\ValueObject\MethodName; final class ReflectionResolver @@ -99,10 +99,10 @@ public function resolveClassReflection(?Node $node) : ?ClassReflection public function resolveClassReflectionSourceObject($node) : ?ClassReflection { $objectType = $node instanceof StaticCall || $node instanceof StaticPropertyFetch ? $this->nodeTypeResolver->getType($node->class) : $this->nodeTypeResolver->getType($node->var); - if (!$objectType instanceof TypeWithClassName) { + $className = ClassNameFromObjectTypeResolver::resolve($objectType); + if ($className === null) { return null; } - $className = $objectType->getClassName(); if (!$this->reflectionProvider->hasClass($className)) { return null; } @@ -170,7 +170,8 @@ public function resolveMethodReflectionFromMethodCall(MethodCall $methodCall) : if ($callerType instanceof BenevolentUnionType) { $callerType = TypeCombinator::removeFalsey($callerType); } - if (!$callerType instanceof TypeWithClassName) { + $className = ClassNameFromObjectTypeResolver::resolve($callerType); + if ($className === null) { return null; } $methodName = $this->nodeNameResolver->getName($methodCall->name); @@ -178,7 +179,7 @@ public function resolveMethodReflectionFromMethodCall(MethodCall $methodCall) : return null; } $scope = $methodCall->getAttribute(AttributeKey::SCOPE); - return $this->resolveMethodReflection($callerType->getClassName(), $methodName, $scope); + return $this->resolveMethodReflection($className, $methodName, $scope); } /** * @param \PhpParser\Node\Expr\MethodCall|\PhpParser\Node\Expr\FuncCall|\PhpParser\Node\Expr\StaticCall $call @@ -219,11 +220,12 @@ public function resolveFunctionReflectionFromFunction(Function_ $function, Scope public function resolveMethodReflectionFromNew(New_ $new) : ?MethodReflection { $newClassType = $this->nodeTypeResolver->getType($new->class); - if (!$newClassType instanceof TypeWithClassName) { + $className = ClassNameFromObjectTypeResolver::resolve($newClassType); + if ($className === null) { return null; } $scope = $new->getAttribute(AttributeKey::SCOPE); - return $this->resolveMethodReflection($newClassType->getClassName(), MethodName::CONSTRUCT, $scope); + return $this->resolveMethodReflection($className, MethodName::CONSTRUCT, $scope); } /** * @param \PhpParser\Node\Expr\PropertyFetch|\PhpParser\Node\Expr\StaticPropertyFetch $propertyFetch @@ -235,13 +237,14 @@ public function resolvePropertyReflectionFromPropertyFetch($propertyFetch) : ?Ph return null; } $fetcheeType = $propertyFetch instanceof PropertyFetch ? $this->nodeTypeResolver->getType($propertyFetch->var) : $this->nodeTypeResolver->getType($propertyFetch->class); - if (!$fetcheeType instanceof TypeWithClassName) { + $className = ClassNameFromObjectTypeResolver::resolve($fetcheeType); + if ($className === null) { return null; } - if (!$this->reflectionProvider->hasClass($fetcheeType->getClassName())) { + if (!$this->reflectionProvider->hasClass($className)) { return null; } - $classReflection = $this->reflectionProvider->getClass($fetcheeType->getClassName()); + $classReflection = $this->reflectionProvider->getClass($className); if (!$classReflection->hasProperty($propertyName)) { return null; } diff --git a/src/Set/ValueObject/LevelSetList.php b/src/Set/ValueObject/LevelSetList.php index c8b784be869..56a82b24e33 100644 --- a/src/Set/ValueObject/LevelSetList.php +++ b/src/Set/ValueObject/LevelSetList.php @@ -3,11 +3,10 @@ declare (strict_types=1); namespace Rector\Set\ValueObject; -use Rector\Set\Contract\SetListInterface; /** * @api */ -final class LevelSetList implements SetListInterface +final class LevelSetList { /** * @var string diff --git a/src/Set/ValueObject/SetList.php b/src/Set/ValueObject/SetList.php index 19798cfe52d..e22a4453945 100644 --- a/src/Set/ValueObject/SetList.php +++ b/src/Set/ValueObject/SetList.php @@ -3,11 +3,10 @@ declare (strict_types=1); namespace Rector\Set\ValueObject; -use Rector\Set\Contract\SetListInterface; /** * @api */ -final class SetList implements SetListInterface +final class SetList { /** * @internal diff --git a/src/StaticTypeMapper/Resolver/ClassNameFromObjectTypeResolver.php b/src/StaticTypeMapper/Resolver/ClassNameFromObjectTypeResolver.php new file mode 100644 index 00000000000..86f883e7b3a --- /dev/null +++ b/src/StaticTypeMapper/Resolver/ClassNameFromObjectTypeResolver.php @@ -0,0 +1,17 @@ +getObjectClassNames(); + if (\count($objectClassNames) !== 1) { + return null; + } + return $objectClassNames[0]; + } +} diff --git a/src/StaticTypeMapper/ValueObject/Type/AliasedObjectType.php b/src/StaticTypeMapper/ValueObject/Type/AliasedObjectType.php index 08a26102042..af9f44076a8 100644 --- a/src/StaticTypeMapper/ValueObject/Type/AliasedObjectType.php +++ b/src/StaticTypeMapper/ValueObject/Type/AliasedObjectType.php @@ -8,7 +8,7 @@ use PhpParser\Node\Stmt\UseUse; use PHPStan\Type\ObjectType; use PHPStan\Type\Type; -use PHPStan\Type\TypeWithClassName; +use Rector\StaticTypeMapper\Resolver\ClassNameFromObjectTypeResolver; /** * @api */ @@ -52,12 +52,13 @@ public function areShortNamesEqual($comparedObjectType) : bool } public function equals(Type $type) : bool { + $className = ClassNameFromObjectTypeResolver::resolve($type); // compare with FQN classes - if ($type instanceof TypeWithClassName) { + if ($className !== null) { if ($type instanceof self && $this->fullyQualifiedClass === $type->getFullyQualifiedName()) { return \true; } - if ($this->fullyQualifiedClass === $type->getClassName()) { + if ($this->fullyQualifiedClass === $className) { return \true; } } diff --git a/src/Testing/PHPUnit/AbstractTestCase.php b/src/Testing/PHPUnit/AbstractTestCase.php deleted file mode 100644 index ae4395a0cb0..00000000000 --- a/src/Testing/PHPUnit/AbstractTestCase.php +++ /dev/null @@ -1,34 +0,0 @@ - $type - * @return T - */ - protected function getService(string $type) : object - { - return $this->make($type); - } -} diff --git a/src/ValueObject/Error/SystemError.php b/src/ValueObject/Error/SystemError.php index 9b40d61d4f7..1472ac2f6bc 100644 --- a/src/ValueObject/Error/SystemError.php +++ b/src/ValueObject/Error/SystemError.php @@ -38,10 +38,6 @@ public function getMessage() : string { return $this->message; } - public function getFile() : ?string - { - return $this->relativeFilePath; - } public function getLine() : ?int { return $this->line; diff --git a/src/ValueObject/PhpVersionFeature.php b/src/ValueObject/PhpVersionFeature.php index cb89f5123fe..ef7271a67b2 100644 --- a/src/ValueObject/PhpVersionFeature.php +++ b/src/ValueObject/PhpVersionFeature.php @@ -560,4 +560,10 @@ final class PhpVersionFeature * @var int */ public const DEPRECATE_HOST_PORT_SEPARATE_ARGS = \Rector\ValueObject\PhpVersion::PHP_83; + /** + * @see https://www.php.net/manual/en/migration83.deprecated.php#migration83.deprecated.core.get-class + * @see https://php.watch/versions/8.3/get_class-get_parent_class-parameterless-deprecated + * @var int + */ + public const DEPRECATE_GET_CLASS_WITHOUT_ARGS = \Rector\ValueObject\PhpVersion::PHP_83; } diff --git a/vendor/autoload.php b/vendor/autoload.php index c22dc0f0f19..3570337e845 100644 --- a/vendor/autoload.php +++ b/vendor/autoload.php @@ -22,4 +22,4 @@ require_once __DIR__ . '/composer/autoload_real.php'; -return ComposerAutoloaderInit4d4c37b878ce01a3ff505ba7def6aac7::getLoader(); +return ComposerAutoloaderInit58d677395c7d7c6a1b0f093c876515de::getLoader(); diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index 4482f4f211a..4d1574e8a8b 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -1280,6 +1280,7 @@ 'Rector\\DeadCode\\PhpDoc\\DeadReturnTagValueNodeAnalyzer' => $baseDir . '/rules/DeadCode/PhpDoc/DeadReturnTagValueNodeAnalyzer.php', 'Rector\\DeadCode\\PhpDoc\\DeadVarTagValueNodeAnalyzer' => $baseDir . '/rules/DeadCode/PhpDoc/DeadVarTagValueNodeAnalyzer.php', 'Rector\\DeadCode\\PhpDoc\\Guard\\StandaloneTypeRemovalGuard' => $baseDir . '/rules/DeadCode/PhpDoc/Guard/StandaloneTypeRemovalGuard.php', + 'Rector\\DeadCode\\PhpDoc\\Guard\\TemplateTypeRemovalGuard' => $baseDir . '/rules/DeadCode/PhpDoc/Guard/TemplateTypeRemovalGuard.php', 'Rector\\DeadCode\\PhpDoc\\TagRemover\\ParamTagRemover' => $baseDir . '/rules/DeadCode/PhpDoc/TagRemover/ParamTagRemover.php', 'Rector\\DeadCode\\PhpDoc\\TagRemover\\ReturnTagRemover' => $baseDir . '/rules/DeadCode/PhpDoc/TagRemover/ReturnTagRemover.php', 'Rector\\DeadCode\\PhpDoc\\TagRemover\\VarTagRemover' => $baseDir . '/rules/DeadCode/PhpDoc/TagRemover/VarTagRemover.php', @@ -1370,9 +1371,7 @@ 'Rector\\Doctrine\\CodeQuality\\Helper\\NodeValueNormalizer' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/Helper/NodeValueNormalizer.php', 'Rector\\Doctrine\\CodeQuality\\NodeFactory\\AttributeFactory' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/NodeFactory/AttributeFactory.php', 'Rector\\Doctrine\\CodeQuality\\Rector\\Class_\\AddReturnDocBlockToCollectionPropertyGetterByToManyAnnotationRector' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/AddReturnDocBlockToCollectionPropertyGetterByToManyAnnotationRector.php', - 'Rector\\Doctrine\\CodeQuality\\Rector\\Class_\\AddReturnDocBlockToCollectionPropertyGetterByToManyAttributeRector' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/AddReturnDocBlockToCollectionPropertyGetterByToManyAttributeRector.php', 'Rector\\Doctrine\\CodeQuality\\Rector\\Class_\\ExplicitRelationCollectionRector' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/ExplicitRelationCollectionRector.php', - 'Rector\\Doctrine\\CodeQuality\\Rector\\Class_\\InitializeDefaultEntityCollectionRector' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/InitializeDefaultEntityCollectionRector.php', 'Rector\\Doctrine\\CodeQuality\\Rector\\Class_\\MoveCurrentDateTimeDefaultInEntityToConstructorRector' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/MoveCurrentDateTimeDefaultInEntityToConstructorRector.php', 'Rector\\Doctrine\\CodeQuality\\Rector\\Class_\\RemoveEmptyTableAttributeRector' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/RemoveEmptyTableAttributeRector.php', 'Rector\\Doctrine\\CodeQuality\\Rector\\Class_\\YamlToAttributeDoctrineMappingRector' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/YamlToAttributeDoctrineMappingRector.php', @@ -1380,7 +1379,6 @@ 'Rector\\Doctrine\\CodeQuality\\Rector\\Property\\ImproveDoctrineCollectionDocTypeInEntityRector' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/Rector/Property/ImproveDoctrineCollectionDocTypeInEntityRector.php', 'Rector\\Doctrine\\CodeQuality\\Rector\\Property\\MakeEntityDateTimePropertyDateTimeInterfaceRector' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/Rector/Property/MakeEntityDateTimePropertyDateTimeInterfaceRector.php', 'Rector\\Doctrine\\CodeQuality\\Rector\\Property\\TypedPropertyFromColumnTypeRector' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/Rector/Property/TypedPropertyFromColumnTypeRector.php', - 'Rector\\Doctrine\\CodeQuality\\Rector\\Property\\TypedPropertyFromDoctrineCollectionRector' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/Rector/Property/TypedPropertyFromDoctrineCollectionRector.php', 'Rector\\Doctrine\\CodeQuality\\Rector\\Property\\TypedPropertyFromToManyRelationTypeRector' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/Rector/Property/TypedPropertyFromToManyRelationTypeRector.php', 'Rector\\Doctrine\\CodeQuality\\Rector\\Property\\TypedPropertyFromToOneRelationTypeRector' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/Rector/Property/TypedPropertyFromToOneRelationTypeRector.php', 'Rector\\Doctrine\\CodeQuality\\SetterCollectionResolver' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/SetterCollectionResolver.php', @@ -1736,6 +1734,7 @@ 'Rector\\PHPStanStaticTypeMapper\\Utils\\TypeUnwrapper' => $baseDir . '/src/PHPStanStaticTypeMapper/Utils/TypeUnwrapper.php', 'Rector\\PHPStan\\NodeVisitor\\UnreachableStatementNodeVisitor' => $baseDir . '/src/PHPStan/NodeVisitor/UnreachableStatementNodeVisitor.php', 'Rector\\PHPStan\\NodeVisitor\\WrappedNodeRestoringNodeVisitor' => $baseDir . '/src/PHPStan/NodeVisitor/WrappedNodeRestoringNodeVisitor.php', + 'Rector\\PHPStan\\ScopeFetcher' => $baseDir . '/src/PHPStan/ScopeFetcher.php', 'Rector\\PHPUnit\\AnnotationsToAttributes\\Rector\\ClassMethod\\DataProviderAnnotationToAttributeRector' => $vendorDir . '/rector/rector-phpunit/rules/AnnotationsToAttributes/Rector/ClassMethod/DataProviderAnnotationToAttributeRector.php', 'Rector\\PHPUnit\\AnnotationsToAttributes\\Rector\\ClassMethod\\DependsAnnotationWithValueToAttributeRector' => $vendorDir . '/rector/rector-phpunit/rules/AnnotationsToAttributes/Rector/ClassMethod/DependsAnnotationWithValueToAttributeRector.php', 'Rector\\PHPUnit\\AnnotationsToAttributes\\Rector\\ClassMethod\\TestWithAnnotationToAttributeRector' => $vendorDir . '/rector/rector-phpunit/rules/AnnotationsToAttributes/Rector/ClassMethod/TestWithAnnotationToAttributeRector.php', @@ -1809,7 +1808,6 @@ 'Rector\\PHPUnit\\PHPUnit100\\Rector\\Class_\\AddProphecyTraitRector' => $vendorDir . '/rector/rector-phpunit/rules/PHPUnit100/Rector/Class_/AddProphecyTraitRector.php', 'Rector\\PHPUnit\\PHPUnit100\\Rector\\Class_\\PublicDataProviderClassMethodRector' => $vendorDir . '/rector/rector-phpunit/rules/PHPUnit100/Rector/Class_/PublicDataProviderClassMethodRector.php', 'Rector\\PHPUnit\\PHPUnit100\\Rector\\Class_\\StaticDataProviderClassMethodRector' => $vendorDir . '/rector/rector-phpunit/rules/PHPUnit100/Rector/Class_/StaticDataProviderClassMethodRector.php', - 'Rector\\PHPUnit\\PHPUnit100\\Rector\\MethodCall\\AssertIssetToAssertObjectHasPropertyRector' => $vendorDir . '/rector/rector-phpunit/rules/PHPUnit100/Rector/MethodCall/AssertIssetToAssertObjectHasPropertyRector.php', 'Rector\\PHPUnit\\PHPUnit100\\Rector\\MethodCall\\RemoveSetMethodsMethodCallRector' => $vendorDir . '/rector/rector-phpunit/rules/PHPUnit100/Rector/MethodCall/RemoveSetMethodsMethodCallRector.php', 'Rector\\PHPUnit\\PHPUnit100\\Rector\\StmtsAwareInterface\\ExpectsMethodCallDecorator' => $vendorDir . '/rector/rector-phpunit/rules/PHPUnit100/Rector/StmtsAwareInterface/ExpectsMethodCallDecorator.php', 'Rector\\PHPUnit\\PHPUnit100\\Rector\\StmtsAwareInterface\\WithConsecutiveRector' => $vendorDir . '/rector/rector-phpunit/rules/PHPUnit100/Rector/StmtsAwareInterface/WithConsecutiveRector.php', @@ -1883,7 +1881,6 @@ 'Rector\\Php71\\Rector\\Assign\\AssignArrayToStringRector' => $baseDir . '/rules/Php71/Rector/Assign/AssignArrayToStringRector.php', 'Rector\\Php71\\Rector\\BinaryOp\\BinaryOpBetweenNumberAndStringRector' => $baseDir . '/rules/Php71/Rector/BinaryOp/BinaryOpBetweenNumberAndStringRector.php', 'Rector\\Php71\\Rector\\BooleanOr\\IsIterableRector' => $baseDir . '/rules/Php71/Rector/BooleanOr/IsIterableRector.php', - 'Rector\\Php71\\Rector\\ClassConst\\PublicConstantVisibilityRector' => $baseDir . '/rules/Php71/Rector/ClassConst/PublicConstantVisibilityRector.php', 'Rector\\Php71\\Rector\\FuncCall\\RemoveExtraParametersRector' => $baseDir . '/rules/Php71/Rector/FuncCall/RemoveExtraParametersRector.php', 'Rector\\Php71\\Rector\\List_\\ListToArrayDestructRector' => $baseDir . '/rules/Php71/Rector/List_/ListToArrayDestructRector.php', 'Rector\\Php71\\Rector\\TryCatch\\MultiExceptionCatchRector' => $baseDir . '/rules/Php71/Rector/TryCatch/MultiExceptionCatchRector.php', @@ -1998,6 +1995,7 @@ 'Rector\\Php83\\Rector\\ClassConst\\AddTypeToConstRector' => $baseDir . '/rules/Php83/Rector/ClassConst/AddTypeToConstRector.php', 'Rector\\Php83\\Rector\\ClassMethod\\AddOverrideAttributeToOverriddenMethodsRector' => $baseDir . '/rules/Php83/Rector/ClassMethod/AddOverrideAttributeToOverriddenMethodsRector.php', 'Rector\\Php83\\Rector\\FuncCall\\CombineHostPortLdapUriRector' => $baseDir . '/rules/Php83/Rector/FuncCall/CombineHostPortLdapUriRector.php', + 'Rector\\Php83\\Rector\\FuncCall\\RemoveGetClassGetParentClassNoArgsRector' => $baseDir . '/rules/Php83/Rector/FuncCall/RemoveGetClassGetParentClassNoArgsRector.php', 'Rector\\Php84\\Rector\\Param\\ExplicitNullableParamTypeRector' => $baseDir . '/rules/Php84/Rector/Param/ExplicitNullableParamTypeRector.php', 'Rector\\PhpAttribute\\AnnotationToAttributeMapper' => $baseDir . '/src/PhpAttribute/AnnotationToAttributeMapper.php', 'Rector\\PhpAttribute\\AnnotationToAttributeMapper\\ArrayAnnotationToAttributeMapper' => $baseDir . '/src/PhpAttribute/AnnotationToAttributeMapper/ArrayAnnotationToAttributeMapper.php', @@ -2167,6 +2165,7 @@ 'Rector\\StaticTypeMapper\\PhpParser\\NullableTypeNodeMapper' => $baseDir . '/src/StaticTypeMapper/PhpParser/NullableTypeNodeMapper.php', 'Rector\\StaticTypeMapper\\PhpParser\\StringNodeMapper' => $baseDir . '/src/StaticTypeMapper/PhpParser/StringNodeMapper.php', 'Rector\\StaticTypeMapper\\PhpParser\\UnionTypeNodeMapper' => $baseDir . '/src/StaticTypeMapper/PhpParser/UnionTypeNodeMapper.php', + 'Rector\\StaticTypeMapper\\Resolver\\ClassNameFromObjectTypeResolver' => $baseDir . '/src/StaticTypeMapper/Resolver/ClassNameFromObjectTypeResolver.php', 'Rector\\StaticTypeMapper\\StaticTypeMapper' => $baseDir . '/src/StaticTypeMapper/StaticTypeMapper.php', 'Rector\\StaticTypeMapper\\ValueObject\\Type\\AliasedObjectType' => $baseDir . '/src/StaticTypeMapper/ValueObject/Type/AliasedObjectType.php', 'Rector\\StaticTypeMapper\\ValueObject\\Type\\FullyQualifiedGenericObjectType' => $baseDir . '/src/StaticTypeMapper/ValueObject/Type/FullyQualifiedGenericObjectType.php', @@ -2203,7 +2202,6 @@ 'Rector\\Symfony\\CodeQuality\\Rector\\ClassMethod\\TemplateAnnotationToThisRenderRector' => $vendorDir . '/rector/rector-symfony/rules/CodeQuality/Rector/ClassMethod/TemplateAnnotationToThisRenderRector.php', 'Rector\\Symfony\\CodeQuality\\Rector\\Class_\\EventListenerToEventSubscriberRector' => $vendorDir . '/rector/rector-symfony/rules/CodeQuality/Rector/Class_/EventListenerToEventSubscriberRector.php', 'Rector\\Symfony\\CodeQuality\\Rector\\Class_\\LoadValidatorMetadataToAnnotationRector' => $vendorDir . '/rector/rector-symfony/rules/CodeQuality/Rector/Class_/LoadValidatorMetadataToAnnotationRector.php', - 'Rector\\Symfony\\CodeQuality\\Rector\\Class_\\MakeCommandLazyRector' => $vendorDir . '/rector/rector-symfony/rules/CodeQuality/Rector/Class_/MakeCommandLazyRector.php', 'Rector\\Symfony\\CodeQuality\\Rector\\Closure\\StringExtensionToConfigBuilderRector' => $vendorDir . '/rector/rector-symfony/rules/CodeQuality/Rector/Closure/StringExtensionToConfigBuilderRector.php', 'Rector\\Symfony\\CodeQuality\\Rector\\MethodCall\\AssertSameResponseCodeWithDebugContentsRector' => $vendorDir . '/rector/rector-symfony/rules/CodeQuality/Rector/MethodCall/AssertSameResponseCodeWithDebugContentsRector.php', 'Rector\\Symfony\\CodeQuality\\Rector\\MethodCall\\LiteralGetToRequestClassConstantRector' => $vendorDir . '/rector/rector-symfony/rules/CodeQuality/Rector/MethodCall/LiteralGetToRequestClassConstantRector.php', @@ -2225,7 +2223,6 @@ 'Rector\\Symfony\\Configs\\Rector\\Closure\\ServiceSetStringNameToClassNameRector' => $vendorDir . '/rector/rector-symfony/rules/Configs/Rector/Closure/ServiceSetStringNameToClassNameRector.php', 'Rector\\Symfony\\Configs\\Rector\\Closure\\ServiceSettersToSettersAutodiscoveryRector' => $vendorDir . '/rector/rector-symfony/rules/Configs/Rector/Closure/ServiceSettersToSettersAutodiscoveryRector.php', 'Rector\\Symfony\\Configs\\Rector\\Closure\\ServiceTagsToDefaultsAutoconfigureRector' => $vendorDir . '/rector/rector-symfony/rules/Configs/Rector/Closure/ServiceTagsToDefaultsAutoconfigureRector.php', - 'Rector\\Symfony\\Configs\\Rector\\Closure\\ServicesSetNameToSetTypeRector' => $vendorDir . '/rector/rector-symfony/rules/Configs/Rector/Closure/ServicesSetNameToSetTypeRector.php', 'Rector\\Symfony\\Configs\\ValueObject\\ServiceArguments' => $vendorDir . '/rector/rector-symfony/rules/Configs/ValueObject/ServiceArguments.php', 'Rector\\Symfony\\Contract\\Bridge\\Symfony\\Routing\\SymfonyRoutesProviderInterface' => $vendorDir . '/rector/rector-symfony/src/Contract/Bridge/Symfony/Routing/SymfonyRoutesProviderInterface.php', 'Rector\\Symfony\\Contract\\EventReferenceToMethodNameInterface' => $vendorDir . '/rector/rector-symfony/src/Contract/EventReferenceToMethodNameInterface.php', @@ -2308,9 +2305,7 @@ 'Rector\\Symfony\\Symfony40\\Rector\\ConstFetch\\ConstraintUrlOptionRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony40/Rector/ConstFetch/ConstraintUrlOptionRector.php', 'Rector\\Symfony\\Symfony40\\Rector\\MethodCall\\ContainerBuilderCompileEnvArgumentRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony40/Rector/MethodCall/ContainerBuilderCompileEnvArgumentRector.php', 'Rector\\Symfony\\Symfony40\\Rector\\MethodCall\\FormIsValidRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony40/Rector/MethodCall/FormIsValidRector.php', - 'Rector\\Symfony\\Symfony40\\Rector\\MethodCall\\ProcessBuilderGetProcessRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony40/Rector/MethodCall/ProcessBuilderGetProcessRector.php', 'Rector\\Symfony\\Symfony40\\Rector\\MethodCall\\VarDumperTestTraitMethodArgsRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony40/Rector/MethodCall/VarDumperTestTraitMethodArgsRector.php', - 'Rector\\Symfony\\Symfony40\\Rector\\StaticCall\\ProcessBuilderInstanceRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony40/Rector/StaticCall/ProcessBuilderInstanceRector.php', 'Rector\\Symfony\\Symfony42\\Rector\\MethodCall\\ContainerGetToConstructorInjectionRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony42/Rector/MethodCall/ContainerGetToConstructorInjectionRector.php', 'Rector\\Symfony\\Symfony42\\Rector\\New_\\RootNodeTreeBuilderRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony42/Rector/New_/RootNodeTreeBuilderRector.php', 'Rector\\Symfony\\Symfony42\\Rector\\New_\\StringToArrayArgumentProcessRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony42/Rector/New_/StringToArrayArgumentProcessRector.php', @@ -2320,7 +2315,6 @@ 'Rector\\Symfony\\Symfony43\\Rector\\MethodCall\\MakeDispatchFirstArgumentEventRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony43/Rector/MethodCall/MakeDispatchFirstArgumentEventRector.php', 'Rector\\Symfony\\Symfony43\\Rector\\MethodCall\\WebTestCaseAssertIsSuccessfulRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony43/Rector/MethodCall/WebTestCaseAssertIsSuccessfulRector.php', 'Rector\\Symfony\\Symfony43\\Rector\\MethodCall\\WebTestCaseAssertResponseCodeRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony43/Rector/MethodCall/WebTestCaseAssertResponseCodeRector.php', - 'Rector\\Symfony\\Symfony43\\Rector\\MethodCall\\WebTestCaseAssertSelectorTextContainsRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony43/Rector/MethodCall/WebTestCaseAssertSelectorTextContainsRector.php', 'Rector\\Symfony\\Symfony43\\Rector\\StmtsAwareInterface\\TwigBundleFilesystemLoaderToTwigRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony43/Rector/StmtsAwareInterface/TwigBundleFilesystemLoaderToTwigRector.php', 'Rector\\Symfony\\Symfony44\\Rector\\ClassMethod\\ConsoleExecuteReturnIntRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony44/Rector/ClassMethod/ConsoleExecuteReturnIntRector.php', 'Rector\\Symfony\\Symfony44\\Rector\\MethodCall\\AuthorizationCheckerIsGrantedExtractorRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony44/Rector/MethodCall/AuthorizationCheckerIsGrantedExtractorRector.php', @@ -2335,7 +2329,6 @@ 'Rector\\Symfony\\Symfony52\\Rector\\New_\\PropertyAccessorCreationBooleanToFlagsRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony52/Rector/New_/PropertyAccessorCreationBooleanToFlagsRector.php', 'Rector\\Symfony\\Symfony52\\Rector\\New_\\PropertyPathMapperToDataMapperRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony52/Rector/New_/PropertyPathMapperToDataMapperRector.php', 'Rector\\Symfony\\Symfony52\\Rector\\StaticCall\\BinaryFileResponseCreateToNewInstanceRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony52/Rector/StaticCall/BinaryFileResponseCreateToNewInstanceRector.php', - 'Rector\\Symfony\\Symfony53\\Rector\\Class_\\CommandDescriptionToPropertyRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony53/Rector/Class_/CommandDescriptionToPropertyRector.php', 'Rector\\Symfony\\Symfony53\\Rector\\StaticPropertyFetch\\KernelTestCaseContainerPropertyDeprecationRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony53/Rector/StaticPropertyFetch/KernelTestCaseContainerPropertyDeprecationRector.php', 'Rector\\Symfony\\Symfony60\\Rector\\FuncCall\\ReplaceServiceArgumentRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony60/Rector/FuncCall/ReplaceServiceArgumentRector.php', 'Rector\\Symfony\\Symfony60\\Rector\\MethodCall\\GetHelperControllerToServiceRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony60/Rector/MethodCall/GetHelperControllerToServiceRector.php', @@ -2351,7 +2344,6 @@ 'Rector\\Symfony\\Symfony62\\Rector\\MethodCall\\SimplifyFormRenderingRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony62/Rector/MethodCall/SimplifyFormRenderingRector.php', 'Rector\\Symfony\\Symfony63\\Rector\\Class_\\ParamAndEnvAttributeRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony63/Rector/Class_/ParamAndEnvAttributeRector.php', 'Rector\\Symfony\\Symfony63\\Rector\\Class_\\SignalableCommandInterfaceReturnTypeRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony63/Rector/Class_/SignalableCommandInterfaceReturnTypeRector.php', - 'Rector\\Symfony\\Symfony64\\Rector\\Class_\\ChangeRouteAttributeFromAnnotationSubnamespaceRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony64/Rector/Class_/ChangeRouteAttributeFromAnnotationSubnamespaceRector.php', 'Rector\\Symfony\\Twig134\\Rector\\Return_\\SimpleFunctionAndFilterRector' => $vendorDir . '/rector/rector-symfony/rules/Twig134/Rector/Return_/SimpleFunctionAndFilterRector.php', 'Rector\\Symfony\\TypeAnalyzer\\ArrayUnionResponseTypeAnalyzer' => $vendorDir . '/rector/rector-symfony/src/TypeAnalyzer/ArrayUnionResponseTypeAnalyzer.php', 'Rector\\Symfony\\TypeAnalyzer\\ContainerAwareAnalyzer' => $vendorDir . '/rector/rector-symfony/src/TypeAnalyzer/ContainerAwareAnalyzer.php', @@ -2383,7 +2375,6 @@ 'Rector\\Testing\\Fixture\\FixtureTempFileDumper' => $baseDir . '/src/Testing/Fixture/FixtureTempFileDumper.php', 'Rector\\Testing\\PHPUnit\\AbstractLazyTestCase' => $baseDir . '/src/Testing/PHPUnit/AbstractLazyTestCase.php', 'Rector\\Testing\\PHPUnit\\AbstractRectorTestCase' => $baseDir . '/src/Testing/PHPUnit/AbstractRectorTestCase.php', - 'Rector\\Testing\\PHPUnit\\AbstractTestCase' => $baseDir . '/src/Testing/PHPUnit/AbstractTestCase.php', 'Rector\\Testing\\PHPUnit\\StaticPHPUnitEnvironment' => $baseDir . '/src/Testing/PHPUnit/StaticPHPUnitEnvironment.php', 'Rector\\Testing\\PHPUnit\\ValueObject\\RectorTestResult' => $baseDir . '/src/Testing/PHPUnit/ValueObject/RectorTestResult.php', 'Rector\\Testing\\TestingParser\\TestingParser' => $baseDir . '/src/Testing/TestingParser/TestingParser.php', diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php index f74af415e8b..71531daa94f 100644 --- a/vendor/composer/autoload_real.php +++ b/vendor/composer/autoload_real.php @@ -2,7 +2,7 @@ // autoload_real.php @generated by Composer -class ComposerAutoloaderInit4d4c37b878ce01a3ff505ba7def6aac7 +class ComposerAutoloaderInit58d677395c7d7c6a1b0f093c876515de { private static $loader; @@ -22,17 +22,17 @@ public static function getLoader() return self::$loader; } - spl_autoload_register(array('ComposerAutoloaderInit4d4c37b878ce01a3ff505ba7def6aac7', 'loadClassLoader'), true, true); + spl_autoload_register(array('ComposerAutoloaderInit58d677395c7d7c6a1b0f093c876515de', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__)); - spl_autoload_unregister(array('ComposerAutoloaderInit4d4c37b878ce01a3ff505ba7def6aac7', 'loadClassLoader')); + spl_autoload_unregister(array('ComposerAutoloaderInit58d677395c7d7c6a1b0f093c876515de', 'loadClassLoader')); require __DIR__ . '/autoload_static.php'; - call_user_func(\Composer\Autoload\ComposerStaticInit4d4c37b878ce01a3ff505ba7def6aac7::getInitializer($loader)); + call_user_func(\Composer\Autoload\ComposerStaticInit58d677395c7d7c6a1b0f093c876515de::getInitializer($loader)); $loader->setClassMapAuthoritative(true); $loader->register(true); - $filesToLoad = \Composer\Autoload\ComposerStaticInit4d4c37b878ce01a3ff505ba7def6aac7::$files; + $filesToLoad = \Composer\Autoload\ComposerStaticInit58d677395c7d7c6a1b0f093c876515de::$files; $requireFile = \Closure::bind(static function ($fileIdentifier, $file) { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index 0e1c6b89ccc..107ec2ea700 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -4,7 +4,7 @@ namespace Composer\Autoload; -class ComposerStaticInit4d4c37b878ce01a3ff505ba7def6aac7 +class ComposerStaticInit58d677395c7d7c6a1b0f093c876515de { public static $files = array ( 'ad155f8f1cf0d418fe49e248db8c661b' => __DIR__ . '/..' . '/react/promise/src/functions_include.php', @@ -1499,6 +1499,7 @@ class ComposerStaticInit4d4c37b878ce01a3ff505ba7def6aac7 'Rector\\DeadCode\\PhpDoc\\DeadReturnTagValueNodeAnalyzer' => __DIR__ . '/../..' . '/rules/DeadCode/PhpDoc/DeadReturnTagValueNodeAnalyzer.php', 'Rector\\DeadCode\\PhpDoc\\DeadVarTagValueNodeAnalyzer' => __DIR__ . '/../..' . '/rules/DeadCode/PhpDoc/DeadVarTagValueNodeAnalyzer.php', 'Rector\\DeadCode\\PhpDoc\\Guard\\StandaloneTypeRemovalGuard' => __DIR__ . '/../..' . '/rules/DeadCode/PhpDoc/Guard/StandaloneTypeRemovalGuard.php', + 'Rector\\DeadCode\\PhpDoc\\Guard\\TemplateTypeRemovalGuard' => __DIR__ . '/../..' . '/rules/DeadCode/PhpDoc/Guard/TemplateTypeRemovalGuard.php', 'Rector\\DeadCode\\PhpDoc\\TagRemover\\ParamTagRemover' => __DIR__ . '/../..' . '/rules/DeadCode/PhpDoc/TagRemover/ParamTagRemover.php', 'Rector\\DeadCode\\PhpDoc\\TagRemover\\ReturnTagRemover' => __DIR__ . '/../..' . '/rules/DeadCode/PhpDoc/TagRemover/ReturnTagRemover.php', 'Rector\\DeadCode\\PhpDoc\\TagRemover\\VarTagRemover' => __DIR__ . '/../..' . '/rules/DeadCode/PhpDoc/TagRemover/VarTagRemover.php', @@ -1589,9 +1590,7 @@ class ComposerStaticInit4d4c37b878ce01a3ff505ba7def6aac7 'Rector\\Doctrine\\CodeQuality\\Helper\\NodeValueNormalizer' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/Helper/NodeValueNormalizer.php', 'Rector\\Doctrine\\CodeQuality\\NodeFactory\\AttributeFactory' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/NodeFactory/AttributeFactory.php', 'Rector\\Doctrine\\CodeQuality\\Rector\\Class_\\AddReturnDocBlockToCollectionPropertyGetterByToManyAnnotationRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/AddReturnDocBlockToCollectionPropertyGetterByToManyAnnotationRector.php', - 'Rector\\Doctrine\\CodeQuality\\Rector\\Class_\\AddReturnDocBlockToCollectionPropertyGetterByToManyAttributeRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/AddReturnDocBlockToCollectionPropertyGetterByToManyAttributeRector.php', 'Rector\\Doctrine\\CodeQuality\\Rector\\Class_\\ExplicitRelationCollectionRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/ExplicitRelationCollectionRector.php', - 'Rector\\Doctrine\\CodeQuality\\Rector\\Class_\\InitializeDefaultEntityCollectionRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/InitializeDefaultEntityCollectionRector.php', 'Rector\\Doctrine\\CodeQuality\\Rector\\Class_\\MoveCurrentDateTimeDefaultInEntityToConstructorRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/MoveCurrentDateTimeDefaultInEntityToConstructorRector.php', 'Rector\\Doctrine\\CodeQuality\\Rector\\Class_\\RemoveEmptyTableAttributeRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/RemoveEmptyTableAttributeRector.php', 'Rector\\Doctrine\\CodeQuality\\Rector\\Class_\\YamlToAttributeDoctrineMappingRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/YamlToAttributeDoctrineMappingRector.php', @@ -1599,7 +1598,6 @@ class ComposerStaticInit4d4c37b878ce01a3ff505ba7def6aac7 'Rector\\Doctrine\\CodeQuality\\Rector\\Property\\ImproveDoctrineCollectionDocTypeInEntityRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/Rector/Property/ImproveDoctrineCollectionDocTypeInEntityRector.php', 'Rector\\Doctrine\\CodeQuality\\Rector\\Property\\MakeEntityDateTimePropertyDateTimeInterfaceRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/Rector/Property/MakeEntityDateTimePropertyDateTimeInterfaceRector.php', 'Rector\\Doctrine\\CodeQuality\\Rector\\Property\\TypedPropertyFromColumnTypeRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/Rector/Property/TypedPropertyFromColumnTypeRector.php', - 'Rector\\Doctrine\\CodeQuality\\Rector\\Property\\TypedPropertyFromDoctrineCollectionRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/Rector/Property/TypedPropertyFromDoctrineCollectionRector.php', 'Rector\\Doctrine\\CodeQuality\\Rector\\Property\\TypedPropertyFromToManyRelationTypeRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/Rector/Property/TypedPropertyFromToManyRelationTypeRector.php', 'Rector\\Doctrine\\CodeQuality\\Rector\\Property\\TypedPropertyFromToOneRelationTypeRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/Rector/Property/TypedPropertyFromToOneRelationTypeRector.php', 'Rector\\Doctrine\\CodeQuality\\SetterCollectionResolver' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/SetterCollectionResolver.php', @@ -1955,6 +1953,7 @@ class ComposerStaticInit4d4c37b878ce01a3ff505ba7def6aac7 'Rector\\PHPStanStaticTypeMapper\\Utils\\TypeUnwrapper' => __DIR__ . '/../..' . '/src/PHPStanStaticTypeMapper/Utils/TypeUnwrapper.php', 'Rector\\PHPStan\\NodeVisitor\\UnreachableStatementNodeVisitor' => __DIR__ . '/../..' . '/src/PHPStan/NodeVisitor/UnreachableStatementNodeVisitor.php', 'Rector\\PHPStan\\NodeVisitor\\WrappedNodeRestoringNodeVisitor' => __DIR__ . '/../..' . '/src/PHPStan/NodeVisitor/WrappedNodeRestoringNodeVisitor.php', + 'Rector\\PHPStan\\ScopeFetcher' => __DIR__ . '/../..' . '/src/PHPStan/ScopeFetcher.php', 'Rector\\PHPUnit\\AnnotationsToAttributes\\Rector\\ClassMethod\\DataProviderAnnotationToAttributeRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/AnnotationsToAttributes/Rector/ClassMethod/DataProviderAnnotationToAttributeRector.php', 'Rector\\PHPUnit\\AnnotationsToAttributes\\Rector\\ClassMethod\\DependsAnnotationWithValueToAttributeRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/AnnotationsToAttributes/Rector/ClassMethod/DependsAnnotationWithValueToAttributeRector.php', 'Rector\\PHPUnit\\AnnotationsToAttributes\\Rector\\ClassMethod\\TestWithAnnotationToAttributeRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/AnnotationsToAttributes/Rector/ClassMethod/TestWithAnnotationToAttributeRector.php', @@ -2028,7 +2027,6 @@ class ComposerStaticInit4d4c37b878ce01a3ff505ba7def6aac7 'Rector\\PHPUnit\\PHPUnit100\\Rector\\Class_\\AddProphecyTraitRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/PHPUnit100/Rector/Class_/AddProphecyTraitRector.php', 'Rector\\PHPUnit\\PHPUnit100\\Rector\\Class_\\PublicDataProviderClassMethodRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/PHPUnit100/Rector/Class_/PublicDataProviderClassMethodRector.php', 'Rector\\PHPUnit\\PHPUnit100\\Rector\\Class_\\StaticDataProviderClassMethodRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/PHPUnit100/Rector/Class_/StaticDataProviderClassMethodRector.php', - 'Rector\\PHPUnit\\PHPUnit100\\Rector\\MethodCall\\AssertIssetToAssertObjectHasPropertyRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/PHPUnit100/Rector/MethodCall/AssertIssetToAssertObjectHasPropertyRector.php', 'Rector\\PHPUnit\\PHPUnit100\\Rector\\MethodCall\\RemoveSetMethodsMethodCallRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/PHPUnit100/Rector/MethodCall/RemoveSetMethodsMethodCallRector.php', 'Rector\\PHPUnit\\PHPUnit100\\Rector\\StmtsAwareInterface\\ExpectsMethodCallDecorator' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/PHPUnit100/Rector/StmtsAwareInterface/ExpectsMethodCallDecorator.php', 'Rector\\PHPUnit\\PHPUnit100\\Rector\\StmtsAwareInterface\\WithConsecutiveRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/PHPUnit100/Rector/StmtsAwareInterface/WithConsecutiveRector.php', @@ -2102,7 +2100,6 @@ class ComposerStaticInit4d4c37b878ce01a3ff505ba7def6aac7 'Rector\\Php71\\Rector\\Assign\\AssignArrayToStringRector' => __DIR__ . '/../..' . '/rules/Php71/Rector/Assign/AssignArrayToStringRector.php', 'Rector\\Php71\\Rector\\BinaryOp\\BinaryOpBetweenNumberAndStringRector' => __DIR__ . '/../..' . '/rules/Php71/Rector/BinaryOp/BinaryOpBetweenNumberAndStringRector.php', 'Rector\\Php71\\Rector\\BooleanOr\\IsIterableRector' => __DIR__ . '/../..' . '/rules/Php71/Rector/BooleanOr/IsIterableRector.php', - 'Rector\\Php71\\Rector\\ClassConst\\PublicConstantVisibilityRector' => __DIR__ . '/../..' . '/rules/Php71/Rector/ClassConst/PublicConstantVisibilityRector.php', 'Rector\\Php71\\Rector\\FuncCall\\RemoveExtraParametersRector' => __DIR__ . '/../..' . '/rules/Php71/Rector/FuncCall/RemoveExtraParametersRector.php', 'Rector\\Php71\\Rector\\List_\\ListToArrayDestructRector' => __DIR__ . '/../..' . '/rules/Php71/Rector/List_/ListToArrayDestructRector.php', 'Rector\\Php71\\Rector\\TryCatch\\MultiExceptionCatchRector' => __DIR__ . '/../..' . '/rules/Php71/Rector/TryCatch/MultiExceptionCatchRector.php', @@ -2217,6 +2214,7 @@ class ComposerStaticInit4d4c37b878ce01a3ff505ba7def6aac7 'Rector\\Php83\\Rector\\ClassConst\\AddTypeToConstRector' => __DIR__ . '/../..' . '/rules/Php83/Rector/ClassConst/AddTypeToConstRector.php', 'Rector\\Php83\\Rector\\ClassMethod\\AddOverrideAttributeToOverriddenMethodsRector' => __DIR__ . '/../..' . '/rules/Php83/Rector/ClassMethod/AddOverrideAttributeToOverriddenMethodsRector.php', 'Rector\\Php83\\Rector\\FuncCall\\CombineHostPortLdapUriRector' => __DIR__ . '/../..' . '/rules/Php83/Rector/FuncCall/CombineHostPortLdapUriRector.php', + 'Rector\\Php83\\Rector\\FuncCall\\RemoveGetClassGetParentClassNoArgsRector' => __DIR__ . '/../..' . '/rules/Php83/Rector/FuncCall/RemoveGetClassGetParentClassNoArgsRector.php', 'Rector\\Php84\\Rector\\Param\\ExplicitNullableParamTypeRector' => __DIR__ . '/../..' . '/rules/Php84/Rector/Param/ExplicitNullableParamTypeRector.php', 'Rector\\PhpAttribute\\AnnotationToAttributeMapper' => __DIR__ . '/../..' . '/src/PhpAttribute/AnnotationToAttributeMapper.php', 'Rector\\PhpAttribute\\AnnotationToAttributeMapper\\ArrayAnnotationToAttributeMapper' => __DIR__ . '/../..' . '/src/PhpAttribute/AnnotationToAttributeMapper/ArrayAnnotationToAttributeMapper.php', @@ -2386,6 +2384,7 @@ class ComposerStaticInit4d4c37b878ce01a3ff505ba7def6aac7 'Rector\\StaticTypeMapper\\PhpParser\\NullableTypeNodeMapper' => __DIR__ . '/../..' . '/src/StaticTypeMapper/PhpParser/NullableTypeNodeMapper.php', 'Rector\\StaticTypeMapper\\PhpParser\\StringNodeMapper' => __DIR__ . '/../..' . '/src/StaticTypeMapper/PhpParser/StringNodeMapper.php', 'Rector\\StaticTypeMapper\\PhpParser\\UnionTypeNodeMapper' => __DIR__ . '/../..' . '/src/StaticTypeMapper/PhpParser/UnionTypeNodeMapper.php', + 'Rector\\StaticTypeMapper\\Resolver\\ClassNameFromObjectTypeResolver' => __DIR__ . '/../..' . '/src/StaticTypeMapper/Resolver/ClassNameFromObjectTypeResolver.php', 'Rector\\StaticTypeMapper\\StaticTypeMapper' => __DIR__ . '/../..' . '/src/StaticTypeMapper/StaticTypeMapper.php', 'Rector\\StaticTypeMapper\\ValueObject\\Type\\AliasedObjectType' => __DIR__ . '/../..' . '/src/StaticTypeMapper/ValueObject/Type/AliasedObjectType.php', 'Rector\\StaticTypeMapper\\ValueObject\\Type\\FullyQualifiedGenericObjectType' => __DIR__ . '/../..' . '/src/StaticTypeMapper/ValueObject/Type/FullyQualifiedGenericObjectType.php', @@ -2422,7 +2421,6 @@ class ComposerStaticInit4d4c37b878ce01a3ff505ba7def6aac7 'Rector\\Symfony\\CodeQuality\\Rector\\ClassMethod\\TemplateAnnotationToThisRenderRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/CodeQuality/Rector/ClassMethod/TemplateAnnotationToThisRenderRector.php', 'Rector\\Symfony\\CodeQuality\\Rector\\Class_\\EventListenerToEventSubscriberRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/CodeQuality/Rector/Class_/EventListenerToEventSubscriberRector.php', 'Rector\\Symfony\\CodeQuality\\Rector\\Class_\\LoadValidatorMetadataToAnnotationRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/CodeQuality/Rector/Class_/LoadValidatorMetadataToAnnotationRector.php', - 'Rector\\Symfony\\CodeQuality\\Rector\\Class_\\MakeCommandLazyRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/CodeQuality/Rector/Class_/MakeCommandLazyRector.php', 'Rector\\Symfony\\CodeQuality\\Rector\\Closure\\StringExtensionToConfigBuilderRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/CodeQuality/Rector/Closure/StringExtensionToConfigBuilderRector.php', 'Rector\\Symfony\\CodeQuality\\Rector\\MethodCall\\AssertSameResponseCodeWithDebugContentsRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/CodeQuality/Rector/MethodCall/AssertSameResponseCodeWithDebugContentsRector.php', 'Rector\\Symfony\\CodeQuality\\Rector\\MethodCall\\LiteralGetToRequestClassConstantRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/CodeQuality/Rector/MethodCall/LiteralGetToRequestClassConstantRector.php', @@ -2444,7 +2442,6 @@ class ComposerStaticInit4d4c37b878ce01a3ff505ba7def6aac7 'Rector\\Symfony\\Configs\\Rector\\Closure\\ServiceSetStringNameToClassNameRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Configs/Rector/Closure/ServiceSetStringNameToClassNameRector.php', 'Rector\\Symfony\\Configs\\Rector\\Closure\\ServiceSettersToSettersAutodiscoveryRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Configs/Rector/Closure/ServiceSettersToSettersAutodiscoveryRector.php', 'Rector\\Symfony\\Configs\\Rector\\Closure\\ServiceTagsToDefaultsAutoconfigureRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Configs/Rector/Closure/ServiceTagsToDefaultsAutoconfigureRector.php', - 'Rector\\Symfony\\Configs\\Rector\\Closure\\ServicesSetNameToSetTypeRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Configs/Rector/Closure/ServicesSetNameToSetTypeRector.php', 'Rector\\Symfony\\Configs\\ValueObject\\ServiceArguments' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Configs/ValueObject/ServiceArguments.php', 'Rector\\Symfony\\Contract\\Bridge\\Symfony\\Routing\\SymfonyRoutesProviderInterface' => __DIR__ . '/..' . '/rector/rector-symfony/src/Contract/Bridge/Symfony/Routing/SymfonyRoutesProviderInterface.php', 'Rector\\Symfony\\Contract\\EventReferenceToMethodNameInterface' => __DIR__ . '/..' . '/rector/rector-symfony/src/Contract/EventReferenceToMethodNameInterface.php', @@ -2527,9 +2524,7 @@ class ComposerStaticInit4d4c37b878ce01a3ff505ba7def6aac7 'Rector\\Symfony\\Symfony40\\Rector\\ConstFetch\\ConstraintUrlOptionRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony40/Rector/ConstFetch/ConstraintUrlOptionRector.php', 'Rector\\Symfony\\Symfony40\\Rector\\MethodCall\\ContainerBuilderCompileEnvArgumentRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony40/Rector/MethodCall/ContainerBuilderCompileEnvArgumentRector.php', 'Rector\\Symfony\\Symfony40\\Rector\\MethodCall\\FormIsValidRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony40/Rector/MethodCall/FormIsValidRector.php', - 'Rector\\Symfony\\Symfony40\\Rector\\MethodCall\\ProcessBuilderGetProcessRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony40/Rector/MethodCall/ProcessBuilderGetProcessRector.php', 'Rector\\Symfony\\Symfony40\\Rector\\MethodCall\\VarDumperTestTraitMethodArgsRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony40/Rector/MethodCall/VarDumperTestTraitMethodArgsRector.php', - 'Rector\\Symfony\\Symfony40\\Rector\\StaticCall\\ProcessBuilderInstanceRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony40/Rector/StaticCall/ProcessBuilderInstanceRector.php', 'Rector\\Symfony\\Symfony42\\Rector\\MethodCall\\ContainerGetToConstructorInjectionRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony42/Rector/MethodCall/ContainerGetToConstructorInjectionRector.php', 'Rector\\Symfony\\Symfony42\\Rector\\New_\\RootNodeTreeBuilderRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony42/Rector/New_/RootNodeTreeBuilderRector.php', 'Rector\\Symfony\\Symfony42\\Rector\\New_\\StringToArrayArgumentProcessRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony42/Rector/New_/StringToArrayArgumentProcessRector.php', @@ -2539,7 +2534,6 @@ class ComposerStaticInit4d4c37b878ce01a3ff505ba7def6aac7 'Rector\\Symfony\\Symfony43\\Rector\\MethodCall\\MakeDispatchFirstArgumentEventRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony43/Rector/MethodCall/MakeDispatchFirstArgumentEventRector.php', 'Rector\\Symfony\\Symfony43\\Rector\\MethodCall\\WebTestCaseAssertIsSuccessfulRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony43/Rector/MethodCall/WebTestCaseAssertIsSuccessfulRector.php', 'Rector\\Symfony\\Symfony43\\Rector\\MethodCall\\WebTestCaseAssertResponseCodeRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony43/Rector/MethodCall/WebTestCaseAssertResponseCodeRector.php', - 'Rector\\Symfony\\Symfony43\\Rector\\MethodCall\\WebTestCaseAssertSelectorTextContainsRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony43/Rector/MethodCall/WebTestCaseAssertSelectorTextContainsRector.php', 'Rector\\Symfony\\Symfony43\\Rector\\StmtsAwareInterface\\TwigBundleFilesystemLoaderToTwigRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony43/Rector/StmtsAwareInterface/TwigBundleFilesystemLoaderToTwigRector.php', 'Rector\\Symfony\\Symfony44\\Rector\\ClassMethod\\ConsoleExecuteReturnIntRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony44/Rector/ClassMethod/ConsoleExecuteReturnIntRector.php', 'Rector\\Symfony\\Symfony44\\Rector\\MethodCall\\AuthorizationCheckerIsGrantedExtractorRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony44/Rector/MethodCall/AuthorizationCheckerIsGrantedExtractorRector.php', @@ -2554,7 +2548,6 @@ class ComposerStaticInit4d4c37b878ce01a3ff505ba7def6aac7 'Rector\\Symfony\\Symfony52\\Rector\\New_\\PropertyAccessorCreationBooleanToFlagsRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony52/Rector/New_/PropertyAccessorCreationBooleanToFlagsRector.php', 'Rector\\Symfony\\Symfony52\\Rector\\New_\\PropertyPathMapperToDataMapperRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony52/Rector/New_/PropertyPathMapperToDataMapperRector.php', 'Rector\\Symfony\\Symfony52\\Rector\\StaticCall\\BinaryFileResponseCreateToNewInstanceRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony52/Rector/StaticCall/BinaryFileResponseCreateToNewInstanceRector.php', - 'Rector\\Symfony\\Symfony53\\Rector\\Class_\\CommandDescriptionToPropertyRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony53/Rector/Class_/CommandDescriptionToPropertyRector.php', 'Rector\\Symfony\\Symfony53\\Rector\\StaticPropertyFetch\\KernelTestCaseContainerPropertyDeprecationRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony53/Rector/StaticPropertyFetch/KernelTestCaseContainerPropertyDeprecationRector.php', 'Rector\\Symfony\\Symfony60\\Rector\\FuncCall\\ReplaceServiceArgumentRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony60/Rector/FuncCall/ReplaceServiceArgumentRector.php', 'Rector\\Symfony\\Symfony60\\Rector\\MethodCall\\GetHelperControllerToServiceRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony60/Rector/MethodCall/GetHelperControllerToServiceRector.php', @@ -2570,7 +2563,6 @@ class ComposerStaticInit4d4c37b878ce01a3ff505ba7def6aac7 'Rector\\Symfony\\Symfony62\\Rector\\MethodCall\\SimplifyFormRenderingRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony62/Rector/MethodCall/SimplifyFormRenderingRector.php', 'Rector\\Symfony\\Symfony63\\Rector\\Class_\\ParamAndEnvAttributeRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony63/Rector/Class_/ParamAndEnvAttributeRector.php', 'Rector\\Symfony\\Symfony63\\Rector\\Class_\\SignalableCommandInterfaceReturnTypeRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony63/Rector/Class_/SignalableCommandInterfaceReturnTypeRector.php', - 'Rector\\Symfony\\Symfony64\\Rector\\Class_\\ChangeRouteAttributeFromAnnotationSubnamespaceRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony64/Rector/Class_/ChangeRouteAttributeFromAnnotationSubnamespaceRector.php', 'Rector\\Symfony\\Twig134\\Rector\\Return_\\SimpleFunctionAndFilterRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Twig134/Rector/Return_/SimpleFunctionAndFilterRector.php', 'Rector\\Symfony\\TypeAnalyzer\\ArrayUnionResponseTypeAnalyzer' => __DIR__ . '/..' . '/rector/rector-symfony/src/TypeAnalyzer/ArrayUnionResponseTypeAnalyzer.php', 'Rector\\Symfony\\TypeAnalyzer\\ContainerAwareAnalyzer' => __DIR__ . '/..' . '/rector/rector-symfony/src/TypeAnalyzer/ContainerAwareAnalyzer.php', @@ -2602,7 +2594,6 @@ class ComposerStaticInit4d4c37b878ce01a3ff505ba7def6aac7 'Rector\\Testing\\Fixture\\FixtureTempFileDumper' => __DIR__ . '/../..' . '/src/Testing/Fixture/FixtureTempFileDumper.php', 'Rector\\Testing\\PHPUnit\\AbstractLazyTestCase' => __DIR__ . '/../..' . '/src/Testing/PHPUnit/AbstractLazyTestCase.php', 'Rector\\Testing\\PHPUnit\\AbstractRectorTestCase' => __DIR__ . '/../..' . '/src/Testing/PHPUnit/AbstractRectorTestCase.php', - 'Rector\\Testing\\PHPUnit\\AbstractTestCase' => __DIR__ . '/../..' . '/src/Testing/PHPUnit/AbstractTestCase.php', 'Rector\\Testing\\PHPUnit\\StaticPHPUnitEnvironment' => __DIR__ . '/../..' . '/src/Testing/PHPUnit/StaticPHPUnitEnvironment.php', 'Rector\\Testing\\PHPUnit\\ValueObject\\RectorTestResult' => __DIR__ . '/../..' . '/src/Testing/PHPUnit/ValueObject/RectorTestResult.php', 'Rector\\Testing\\TestingParser\\TestingParser' => __DIR__ . '/../..' . '/src/Testing/TestingParser/TestingParser.php', @@ -2831,9 +2822,9 @@ class ComposerStaticInit4d4c37b878ce01a3ff505ba7def6aac7 public static function getInitializer(ClassLoader $loader) { return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInit4d4c37b878ce01a3ff505ba7def6aac7::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInit4d4c37b878ce01a3ff505ba7def6aac7::$prefixDirsPsr4; - $loader->classMap = ComposerStaticInit4d4c37b878ce01a3ff505ba7def6aac7::$classMap; + $loader->prefixLengthsPsr4 = ComposerStaticInit58d677395c7d7c6a1b0f093c876515de::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInit58d677395c7d7c6a1b0f093c876515de::$prefixDirsPsr4; + $loader->classMap = ComposerStaticInit58d677395c7d7c6a1b0f093c876515de::$classMap; }, null, ClassLoader::class); } diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index b8eb8ba7edf..da09396a5e2 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -69,17 +69,17 @@ }, { "name": "composer\/pcre", - "version": "3.3.1", - "version_normalized": "3.3.1.0", + "version": "3.3.2", + "version_normalized": "3.3.2.0", "source": { "type": "git", "url": "https:\/\/github.com\/composer\/pcre.git", - "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4" + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e" }, "dist": { "type": "zip", - "url": "https:\/\/api.github.com\/repos\/composer\/pcre\/zipball\/63aaeac21d7e775ff9bc9d45021e1745c97521c4", - "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4", + "url": "https:\/\/api.github.com\/repos\/composer\/pcre\/zipball\/b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e", "shasum": "" }, "require": { @@ -89,11 +89,11 @@ "phpstan\/phpstan": "<1.11.10" }, "require-dev": { - "phpstan\/phpstan": "^1.11.10", - "phpstan\/phpstan-strict-rules": "^1.1", + "phpstan\/phpstan": "^1.12 || ^2", + "phpstan\/phpstan-strict-rules": "^1 || ^2", "phpunit\/phpunit": "^8 || ^9" }, - "time": "2024-08-27T18:44:43+00:00", + "time": "2024-11-12T16:29:46+00:00", "type": "library", "extra": { "branch-alias": { @@ -131,7 +131,7 @@ ], "support": { "issues": "https:\/\/github.com\/composer\/pcre\/issues", - "source": "https:\/\/github.com\/composer\/pcre\/tree\/3.3.1" + "source": "https:\/\/github.com\/composer\/pcre\/tree\/3.3.2" }, "funding": [ { @@ -512,8 +512,8 @@ }, { "name": "illuminate\/container", - "version": "v11.30.0", - "version_normalized": "11.30.0.0", + "version": "v11.31.0", + "version_normalized": "11.31.0.0", "source": { "type": "git", "url": "https:\/\/github.com\/illuminate\/container.git", @@ -569,8 +569,8 @@ }, { "name": "illuminate\/contracts", - "version": "v11.30.0", - "version_normalized": "11.30.0.0", + "version": "v11.31.0", + "version_normalized": "11.31.0.0", "source": { "type": "git", "url": "https:\/\/github.com\/illuminate\/contracts.git", @@ -1689,12 +1689,12 @@ "source": { "type": "git", "url": "https:\/\/github.com\/rectorphp\/rector-doctrine.git", - "reference": "e75008c293679e0bb0637bf09cf6dd43ff34526a" + "reference": "9cfbe48b2f15983a13d1995bb7577e538db710cd" }, "dist": { "type": "zip", - "url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-doctrine\/zipball\/e75008c293679e0bb0637bf09cf6dd43ff34526a", - "reference": "e75008c293679e0bb0637bf09cf6dd43ff34526a", + "url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-doctrine\/zipball\/9cfbe48b2f15983a13d1995bb7577e538db710cd", + "reference": "9cfbe48b2f15983a13d1995bb7577e538db710cd", "shasum": "" }, "require": { @@ -1710,16 +1710,16 @@ "phpstan\/phpstan-webmozart-assert": "^1.2", "phpunit\/phpunit": "^10.5", "rector\/rector-src": "dev-main", - "rector\/type-perfect": "^0.2", + "rector\/type-perfect": "^1.0", "symplify\/easy-coding-standard": "^12.3", "symplify\/phpstan-extensions": "^11.4", "symplify\/phpstan-rules": "^13.0", "symplify\/vendor-patches": "^11.3", - "tomasvotruba\/class-leak": "^0.2.15", - "tomasvotruba\/unused-public": "^0.4", + "tomasvotruba\/class-leak": "^1.1", + "tomasvotruba\/unused-public": "^1.0", "tracy\/tracy": "^2.10" }, - "time": "2024-09-18T08:20:56+00:00", + "time": "2024-11-13T00:32:00+00:00", "default-branch": true, "type": "rector-extension", "extra": { @@ -1752,12 +1752,12 @@ "source": { "type": "git", "url": "https:\/\/github.com\/rectorphp\/rector-downgrade-php.git", - "reference": "d9cef571617b93e642b3ac45981b7092e1a2e89a" + "reference": "eb03bfe946f00757fcd36b47590f77ba6957d4d9" }, "dist": { "type": "zip", - "url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-downgrade-php\/zipball\/d9cef571617b93e642b3ac45981b7092e1a2e89a", - "reference": "d9cef571617b93e642b3ac45981b7092e1a2e89a", + "url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-downgrade-php\/zipball\/eb03bfe946f00757fcd36b47590f77ba6957d4d9", + "reference": "eb03bfe946f00757fcd36b47590f77ba6957d4d9", "shasum": "" }, "require": { @@ -1769,16 +1769,16 @@ "phpstan\/phpstan-webmozart-assert": "^1.2", "phpunit\/phpunit": "^10.5", "rector\/rector-src": "dev-main", - "rector\/type-perfect": "^0.1.8", + "rector\/type-perfect": "^1.0", "symplify\/easy-coding-standard": "^12.3", "symplify\/phpstan-extensions": "^11.4", "symplify\/phpstan-rules": "^13.0", "symplify\/rule-doc-generator": "^12.2", "symplify\/vendor-patches": "^11.3", - "tomasvotruba\/class-leak": "^0.2.13", + "tomasvotruba\/class-leak": "^1.0", "tracy\/tracy": "^2.10" }, - "time": "2024-09-26T16:45:00+00:00", + "time": "2024-11-13T01:09:46+00:00", "default-branch": true, "type": "rector-extension", "extra": { @@ -1811,12 +1811,12 @@ "source": { "type": "git", "url": "https:\/\/github.com\/rectorphp\/rector-phpunit.git", - "reference": "29536ff4bb1177f2d8eebda377eee05f2f386618" + "reference": "3271bed97867b50834ec284ff4b342f228e22b30" }, "dist": { "type": "zip", - "url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-phpunit\/zipball\/29536ff4bb1177f2d8eebda377eee05f2f386618", - "reference": "29536ff4bb1177f2d8eebda377eee05f2f386618", + "url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-phpunit\/zipball\/3271bed97867b50834ec284ff4b342f228e22b30", + "reference": "3271bed97867b50834ec284ff4b342f228e22b30", "shasum": "" }, "require": { @@ -1840,7 +1840,7 @@ "tomasvotruba\/class-leak": "^1.0", "tracy\/tracy": "^2.10" }, - "time": "2024-11-06T08:24:44+00:00", + "time": "2024-11-12T21:09:03+00:00", "default-branch": true, "type": "rector-extension", "extra": { @@ -1876,12 +1876,12 @@ "source": { "type": "git", "url": "https:\/\/github.com\/rectorphp\/rector-symfony.git", - "reference": "799b454b63c240edc962c8fafea2c5a2a61e5393" + "reference": "10c3202c959d8db9c3a77dc9118fff235352d913" }, "dist": { "type": "zip", - "url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-symfony\/zipball\/799b454b63c240edc962c8fafea2c5a2a61e5393", - "reference": "799b454b63c240edc962c8fafea2c5a2a61e5393", + "url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-symfony\/zipball\/10c3202c959d8db9c3a77dc9118fff235352d913", + "reference": "10c3202c959d8db9c3a77dc9118fff235352d913", "shasum": "" }, "require": { @@ -1894,7 +1894,7 @@ "phpstan\/phpstan-webmozart-assert": "^1.2", "phpunit\/phpunit": "^10.5", "rector\/rector-src": "dev-main", - "rector\/type-perfect": "^0.1.8", + "rector\/type-perfect": "^1.0", "symfony\/config": "^6.4", "symfony\/dependency-injection": "^6.4", "symfony\/http-kernel": "~6.3", @@ -1906,11 +1906,11 @@ "symplify\/phpstan-extensions": "^11.4", "symplify\/phpstan-rules": "^13.0", "symplify\/vendor-patches": "^11.3", - "tomasvotruba\/class-leak": "^0.2", - "tomasvotruba\/unused-public": "^0.4", + "tomasvotruba\/class-leak": "^1.0", + "tomasvotruba\/unused-public": "^1.0", "tracy\/tracy": "^2.10" }, - "time": "2024-10-28T21:03:13+00:00", + "time": "2024-11-13T00:29:33+00:00", "default-branch": true, "type": "rector-extension", "extra": { diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index 5b74b8e2bbb..fc152575295 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -2,4 +2,4 @@ namespace RectorPrefix202411; -return array('root' => array('name' => 'rector/rector-src', 'pretty_version' => 'dev-main', 'version' => 'dev-main', 'reference' => null, 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev' => \false), 'versions' => array('clue/ndjson-react' => array('pretty_version' => 'v1.3.0', 'version' => '1.3.0.0', 'reference' => '392dc165fce93b5bb5c637b67e59619223c931b0', 'type' => 'library', 'install_path' => __DIR__ . '/../clue/ndjson-react', 'aliases' => array(), 'dev_requirement' => \false), 'composer/pcre' => array('pretty_version' => '3.3.1', 'version' => '3.3.1.0', 'reference' => '63aaeac21d7e775ff9bc9d45021e1745c97521c4', 'type' => 'library', 'install_path' => __DIR__ . '/./pcre', 'aliases' => array(), 'dev_requirement' => \false), 'composer/semver' => array('pretty_version' => '3.4.3', 'version' => '3.4.3.0', 'reference' => '4313d26ada5e0c4edfbd1dc481a92ff7bff91f12', 'type' => 'library', 'install_path' => __DIR__ . '/./semver', 'aliases' => array(), 'dev_requirement' => \false), 'composer/xdebug-handler' => array('pretty_version' => '3.0.5', 'version' => '3.0.5.0', 'reference' => '6c1925561632e83d60a44492e0b344cf48ab85ef', 'type' => 'library', 'install_path' => __DIR__ . '/./xdebug-handler', 'aliases' => array(), 'dev_requirement' => \false), 'doctrine/inflector' => array('pretty_version' => '2.0.10', 'version' => '2.0.10.0', 'reference' => '5817d0659c5b50c9b950feb9af7b9668e2c436bc', 'type' => 'library', 'install_path' => __DIR__ . '/../doctrine/inflector', 'aliases' => array(), 'dev_requirement' => \false), 'evenement/evenement' => array('pretty_version' => 'v3.0.2', 'version' => '3.0.2.0', 'reference' => '0a16b0d71ab13284339abb99d9d2bd813640efbc', 'type' => 'library', 'install_path' => __DIR__ . '/../evenement/evenement', 'aliases' => array(), 'dev_requirement' => \false), 'fidry/cpu-core-counter' => array('pretty_version' => '1.2.0', 'version' => '1.2.0.0', 'reference' => '8520451a140d3f46ac33042715115e290cf5785f', 'type' => 'library', 'install_path' => __DIR__ . '/../fidry/cpu-core-counter', 'aliases' => array(), 'dev_requirement' => \false), 'illuminate/container' => array('pretty_version' => 'v11.30.0', 'version' => '11.30.0.0', 'reference' => '06dfc614aff58384b28ba5ad191f6a02d6b192cb', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/container', 'aliases' => array(), 'dev_requirement' => \false), 'illuminate/contracts' => array('pretty_version' => 'v11.30.0', 'version' => '11.30.0.0', 'reference' => '56312862af937bd6da8e6dc8bbd88188dfb478f8', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/contracts', 'aliases' => array(), 'dev_requirement' => \false), 'nette/utils' => array('pretty_version' => 'v4.0.5', 'version' => '4.0.5.0', 'reference' => '736c567e257dbe0fcf6ce81b4d6dbe05c6899f96', 'type' => 'library', 'install_path' => __DIR__ . '/../nette/utils', 'aliases' => array(), 'dev_requirement' => \false), 'nikic/php-parser' => array('pretty_version' => 'v4.19.4', 'version' => '4.19.4.0', 'reference' => '715f4d25e225bc47b293a8b997fe6ce99bf987d2', 'type' => 'library', 'install_path' => __DIR__ . '/../nikic/php-parser', 'aliases' => array(), 'dev_requirement' => \false), 'ondram/ci-detector' => array('pretty_version' => '4.2.0', 'version' => '4.2.0.0', 'reference' => '8b0223b5ed235fd377c75fdd1bfcad05c0f168b8', 'type' => 'library', 'install_path' => __DIR__ . '/../ondram/ci-detector', 'aliases' => array(), 'dev_requirement' => \false), 'phpstan/phpdoc-parser' => array('pretty_version' => '1.33.0', 'version' => '1.33.0.0', 'reference' => '82a311fd3690fb2bf7b64d5c98f912b3dd746140', 'type' => 'library', 'install_path' => __DIR__ . '/../phpstan/phpdoc-parser', 'aliases' => array(), 'dev_requirement' => \false), 'phpstan/phpstan' => array('dev_requirement' => \false, 'replaced' => array(0 => '1.12.7')), 'psr/container' => array('pretty_version' => '2.0.2', 'version' => '2.0.2.0', 'reference' => 'c71ecc56dfe541dbd90c5360474fbc405f8d5963', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/container', 'aliases' => array(), 'dev_requirement' => \false), 'psr/container-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '1.1|2.0')), 'psr/log' => array('pretty_version' => '3.0.2', 'version' => '3.0.2.0', 'reference' => 'f16e1d5863e37f8d8c2a01719f5b34baa2b714d3', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/log', 'aliases' => array(), 'dev_requirement' => \false), 'psr/log-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '1.0|2.0|3.0')), 'psr/simple-cache' => array('pretty_version' => '3.0.0', 'version' => '3.0.0.0', 'reference' => '764e0b3939f5ca87cb904f570ef9be2d78a07865', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/simple-cache', 'aliases' => array(), 'dev_requirement' => \false), 'react/cache' => array('pretty_version' => 'v1.2.0', 'version' => '1.2.0.0', 'reference' => 'd47c472b64aa5608225f47965a484b75c7817d5b', 'type' => 'library', 'install_path' => __DIR__ . '/../react/cache', 'aliases' => array(), 'dev_requirement' => \false), 'react/child-process' => array('pretty_version' => 'v0.6.5', 'version' => '0.6.5.0', 'reference' => 'e71eb1aa55f057c7a4a0d08d06b0b0a484bead43', 'type' => 'library', 'install_path' => __DIR__ . '/../react/child-process', 'aliases' => array(), 'dev_requirement' => \false), 'react/dns' => array('pretty_version' => 'v1.13.0', 'version' => '1.13.0.0', 'reference' => 'eb8ae001b5a455665c89c1df97f6fb682f8fb0f5', 'type' => 'library', 'install_path' => __DIR__ . '/../react/dns', 'aliases' => array(), 'dev_requirement' => \false), 'react/event-loop' => array('pretty_version' => 'v1.5.0', 'version' => '1.5.0.0', 'reference' => 'bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354', 'type' => 'library', 'install_path' => __DIR__ . '/../react/event-loop', 'aliases' => array(), 'dev_requirement' => \false), 'react/promise' => array('pretty_version' => 'v3.2.0', 'version' => '3.2.0.0', 'reference' => '8a164643313c71354582dc850b42b33fa12a4b63', 'type' => 'library', 'install_path' => __DIR__ . '/../react/promise', 'aliases' => array(), 'dev_requirement' => \false), 'react/socket' => array('pretty_version' => 'v1.16.0', 'version' => '1.16.0.0', 'reference' => '23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1', 'type' => 'library', 'install_path' => __DIR__ . '/../react/socket', 'aliases' => array(), 'dev_requirement' => \false), 'react/stream' => array('pretty_version' => 'v1.4.0', 'version' => '1.4.0.0', 'reference' => '1e5b0acb8fe55143b5b426817155190eb6f5b18d', 'type' => 'library', 'install_path' => __DIR__ . '/../react/stream', 'aliases' => array(), 'dev_requirement' => \false), 'rector/extension-installer' => array('pretty_version' => '0.11.2', 'version' => '0.11.2.0', 'reference' => '05544e9b195863b8571ae2a3b903cbec7fa062e0', 'type' => 'composer-plugin', 'install_path' => __DIR__ . '/../rector/extension-installer', 'aliases' => array(), 'dev_requirement' => \false), 'rector/rector' => array('dev_requirement' => \false, 'replaced' => array(0 => 'dev-main')), 'rector/rector-doctrine' => array('pretty_version' => 'dev-main', 'version' => 'dev-main', 'reference' => 'e75008c293679e0bb0637bf09cf6dd43ff34526a', 'type' => 'rector-extension', 'install_path' => __DIR__ . '/../rector/rector-doctrine', 'aliases' => array(0 => '9999999-dev'), 'dev_requirement' => \false), 'rector/rector-downgrade-php' => array('pretty_version' => 'dev-main', 'version' => 'dev-main', 'reference' => 'd9cef571617b93e642b3ac45981b7092e1a2e89a', 'type' => 'rector-extension', 'install_path' => __DIR__ . '/../rector/rector-downgrade-php', 'aliases' => array(0 => '9999999-dev'), 'dev_requirement' => \false), 'rector/rector-phpunit' => array('pretty_version' => 'dev-main', 'version' => 'dev-main', 'reference' => '29536ff4bb1177f2d8eebda377eee05f2f386618', 'type' => 'rector-extension', 'install_path' => __DIR__ . '/../rector/rector-phpunit', 'aliases' => array(0 => '0.11.x-dev'), 'dev_requirement' => \false), 'rector/rector-src' => array('pretty_version' => 'dev-main', 'version' => 'dev-main', 'reference' => null, 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev_requirement' => \false), 'rector/rector-symfony' => array('pretty_version' => 'dev-main', 'version' => 'dev-main', 'reference' => '799b454b63c240edc962c8fafea2c5a2a61e5393', 'type' => 'rector-extension', 'install_path' => __DIR__ . '/../rector/rector-symfony', 'aliases' => array(0 => '9999999-dev'), 'dev_requirement' => \false), 'sebastian/diff' => array('pretty_version' => '5.1.1', 'version' => '5.1.1.0', 'reference' => 'c41e007b4b62af48218231d6c2275e4c9b975b2e', 'type' => 'library', 'install_path' => __DIR__ . '/../sebastian/diff', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/console' => array('pretty_version' => 'v6.4.14', 'version' => '6.4.14.0', 'reference' => '897c2441ed4eec8a8a2c37b943427d24dba3f26b', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/console', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/deprecation-contracts' => array('pretty_version' => 'v3.5.0', 'version' => '3.5.0.0', 'reference' => '0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/deprecation-contracts', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/filesystem' => array('pretty_version' => 'v6.4.13', 'version' => '6.4.13.0', 'reference' => '4856c9cf585d5a0313d8d35afd681a526f038dd3', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/filesystem', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/finder' => array('pretty_version' => 'v6.4.13', 'version' => '6.4.13.0', 'reference' => 'daea9eca0b08d0ed1dc9ab702a46128fd1be4958', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/finder', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/polyfill-ctype' => array('dev_requirement' => \false, 'replaced' => array(0 => '*')), 'symfony/polyfill-intl-grapheme' => array('dev_requirement' => \false, 'replaced' => array(0 => '*')), 'symfony/polyfill-mbstring' => array('pretty_version' => 'v1.31.0', 'version' => '1.31.0.0', 'reference' => '85181ba99b2345b0ef10ce42ecac37612d9fd341', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-mbstring', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/process' => array('pretty_version' => 'v6.4.14', 'version' => '6.4.14.0', 'reference' => '25214adbb0996d18112548de20c281be9f27279f', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/process', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/service-contracts' => array('pretty_version' => 'v3.5.0', 'version' => '3.5.0.0', 'reference' => 'bd1d9e59a81d8fa4acdcea3f617c581f7475a80f', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/service-contracts', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/string' => array('dev_requirement' => \false, 'replaced' => array(0 => '*')), 'symfony/yaml' => array('pretty_version' => 'v7.1.6', 'version' => '7.1.6.0', 'reference' => '3ced3f29e4f0d6bce2170ff26719f1fe9aacc671', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/yaml', 'aliases' => array(), 'dev_requirement' => \false), 'symplify/easy-parallel' => array('pretty_version' => '11.2.2', 'version' => '11.2.2.0', 'reference' => '8586c18bb8efb31cd192a4e5cc94ae7813f72ed9', 'type' => 'library', 'install_path' => __DIR__ . '/../symplify/easy-parallel', 'aliases' => array(), 'dev_requirement' => \false), 'symplify/rule-doc-generator-contracts' => array('pretty_version' => '11.2.0', 'version' => '11.2.0.0', 'reference' => '479cfcfd46047f80624aba931d9789e50475b5c6', 'type' => 'library', 'install_path' => __DIR__ . '/../symplify/rule-doc-generator-contracts', 'aliases' => array(), 'dev_requirement' => \false), 'webmozart/assert' => array('pretty_version' => '1.11.0', 'version' => '1.11.0.0', 'reference' => '11cb2199493b2f8a3b53e7f19068fc6aac760991', 'type' => 'library', 'install_path' => __DIR__ . '/../webmozart/assert', 'aliases' => array(), 'dev_requirement' => \false))); +return array('root' => array('name' => 'rector/rector-src', 'pretty_version' => 'dev-main', 'version' => 'dev-main', 'reference' => null, 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev' => \false), 'versions' => array('clue/ndjson-react' => array('pretty_version' => 'v1.3.0', 'version' => '1.3.0.0', 'reference' => '392dc165fce93b5bb5c637b67e59619223c931b0', 'type' => 'library', 'install_path' => __DIR__ . '/../clue/ndjson-react', 'aliases' => array(), 'dev_requirement' => \false), 'composer/pcre' => array('pretty_version' => '3.3.2', 'version' => '3.3.2.0', 'reference' => 'b2bed4734f0cc156ee1fe9c0da2550420d99a21e', 'type' => 'library', 'install_path' => __DIR__ . '/./pcre', 'aliases' => array(), 'dev_requirement' => \false), 'composer/semver' => array('pretty_version' => '3.4.3', 'version' => '3.4.3.0', 'reference' => '4313d26ada5e0c4edfbd1dc481a92ff7bff91f12', 'type' => 'library', 'install_path' => __DIR__ . '/./semver', 'aliases' => array(), 'dev_requirement' => \false), 'composer/xdebug-handler' => array('pretty_version' => '3.0.5', 'version' => '3.0.5.0', 'reference' => '6c1925561632e83d60a44492e0b344cf48ab85ef', 'type' => 'library', 'install_path' => __DIR__ . '/./xdebug-handler', 'aliases' => array(), 'dev_requirement' => \false), 'doctrine/inflector' => array('pretty_version' => '2.0.10', 'version' => '2.0.10.0', 'reference' => '5817d0659c5b50c9b950feb9af7b9668e2c436bc', 'type' => 'library', 'install_path' => __DIR__ . '/../doctrine/inflector', 'aliases' => array(), 'dev_requirement' => \false), 'evenement/evenement' => array('pretty_version' => 'v3.0.2', 'version' => '3.0.2.0', 'reference' => '0a16b0d71ab13284339abb99d9d2bd813640efbc', 'type' => 'library', 'install_path' => __DIR__ . '/../evenement/evenement', 'aliases' => array(), 'dev_requirement' => \false), 'fidry/cpu-core-counter' => array('pretty_version' => '1.2.0', 'version' => '1.2.0.0', 'reference' => '8520451a140d3f46ac33042715115e290cf5785f', 'type' => 'library', 'install_path' => __DIR__ . '/../fidry/cpu-core-counter', 'aliases' => array(), 'dev_requirement' => \false), 'illuminate/container' => array('pretty_version' => 'v11.31.0', 'version' => '11.31.0.0', 'reference' => '06dfc614aff58384b28ba5ad191f6a02d6b192cb', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/container', 'aliases' => array(), 'dev_requirement' => \false), 'illuminate/contracts' => array('pretty_version' => 'v11.31.0', 'version' => '11.31.0.0', 'reference' => '56312862af937bd6da8e6dc8bbd88188dfb478f8', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/contracts', 'aliases' => array(), 'dev_requirement' => \false), 'nette/utils' => array('pretty_version' => 'v4.0.5', 'version' => '4.0.5.0', 'reference' => '736c567e257dbe0fcf6ce81b4d6dbe05c6899f96', 'type' => 'library', 'install_path' => __DIR__ . '/../nette/utils', 'aliases' => array(), 'dev_requirement' => \false), 'nikic/php-parser' => array('pretty_version' => 'v4.19.4', 'version' => '4.19.4.0', 'reference' => '715f4d25e225bc47b293a8b997fe6ce99bf987d2', 'type' => 'library', 'install_path' => __DIR__ . '/../nikic/php-parser', 'aliases' => array(), 'dev_requirement' => \false), 'ondram/ci-detector' => array('pretty_version' => '4.2.0', 'version' => '4.2.0.0', 'reference' => '8b0223b5ed235fd377c75fdd1bfcad05c0f168b8', 'type' => 'library', 'install_path' => __DIR__ . '/../ondram/ci-detector', 'aliases' => array(), 'dev_requirement' => \false), 'phpstan/phpdoc-parser' => array('pretty_version' => '1.33.0', 'version' => '1.33.0.0', 'reference' => '82a311fd3690fb2bf7b64d5c98f912b3dd746140', 'type' => 'library', 'install_path' => __DIR__ . '/../phpstan/phpdoc-parser', 'aliases' => array(), 'dev_requirement' => \false), 'phpstan/phpstan' => array('dev_requirement' => \false, 'replaced' => array(0 => '1.12.10')), 'psr/container' => array('pretty_version' => '2.0.2', 'version' => '2.0.2.0', 'reference' => 'c71ecc56dfe541dbd90c5360474fbc405f8d5963', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/container', 'aliases' => array(), 'dev_requirement' => \false), 'psr/container-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '1.1|2.0')), 'psr/log' => array('pretty_version' => '3.0.2', 'version' => '3.0.2.0', 'reference' => 'f16e1d5863e37f8d8c2a01719f5b34baa2b714d3', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/log', 'aliases' => array(), 'dev_requirement' => \false), 'psr/log-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '1.0|2.0|3.0')), 'psr/simple-cache' => array('pretty_version' => '3.0.0', 'version' => '3.0.0.0', 'reference' => '764e0b3939f5ca87cb904f570ef9be2d78a07865', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/simple-cache', 'aliases' => array(), 'dev_requirement' => \false), 'react/cache' => array('pretty_version' => 'v1.2.0', 'version' => '1.2.0.0', 'reference' => 'd47c472b64aa5608225f47965a484b75c7817d5b', 'type' => 'library', 'install_path' => __DIR__ . '/../react/cache', 'aliases' => array(), 'dev_requirement' => \false), 'react/child-process' => array('pretty_version' => 'v0.6.5', 'version' => '0.6.5.0', 'reference' => 'e71eb1aa55f057c7a4a0d08d06b0b0a484bead43', 'type' => 'library', 'install_path' => __DIR__ . '/../react/child-process', 'aliases' => array(), 'dev_requirement' => \false), 'react/dns' => array('pretty_version' => 'v1.13.0', 'version' => '1.13.0.0', 'reference' => 'eb8ae001b5a455665c89c1df97f6fb682f8fb0f5', 'type' => 'library', 'install_path' => __DIR__ . '/../react/dns', 'aliases' => array(), 'dev_requirement' => \false), 'react/event-loop' => array('pretty_version' => 'v1.5.0', 'version' => '1.5.0.0', 'reference' => 'bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354', 'type' => 'library', 'install_path' => __DIR__ . '/../react/event-loop', 'aliases' => array(), 'dev_requirement' => \false), 'react/promise' => array('pretty_version' => 'v3.2.0', 'version' => '3.2.0.0', 'reference' => '8a164643313c71354582dc850b42b33fa12a4b63', 'type' => 'library', 'install_path' => __DIR__ . '/../react/promise', 'aliases' => array(), 'dev_requirement' => \false), 'react/socket' => array('pretty_version' => 'v1.16.0', 'version' => '1.16.0.0', 'reference' => '23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1', 'type' => 'library', 'install_path' => __DIR__ . '/../react/socket', 'aliases' => array(), 'dev_requirement' => \false), 'react/stream' => array('pretty_version' => 'v1.4.0', 'version' => '1.4.0.0', 'reference' => '1e5b0acb8fe55143b5b426817155190eb6f5b18d', 'type' => 'library', 'install_path' => __DIR__ . '/../react/stream', 'aliases' => array(), 'dev_requirement' => \false), 'rector/extension-installer' => array('pretty_version' => '0.11.2', 'version' => '0.11.2.0', 'reference' => '05544e9b195863b8571ae2a3b903cbec7fa062e0', 'type' => 'composer-plugin', 'install_path' => __DIR__ . '/../rector/extension-installer', 'aliases' => array(), 'dev_requirement' => \false), 'rector/rector' => array('dev_requirement' => \false, 'replaced' => array(0 => 'dev-main')), 'rector/rector-doctrine' => array('pretty_version' => 'dev-main', 'version' => 'dev-main', 'reference' => '9cfbe48b2f15983a13d1995bb7577e538db710cd', 'type' => 'rector-extension', 'install_path' => __DIR__ . '/../rector/rector-doctrine', 'aliases' => array(0 => '9999999-dev'), 'dev_requirement' => \false), 'rector/rector-downgrade-php' => array('pretty_version' => 'dev-main', 'version' => 'dev-main', 'reference' => 'eb03bfe946f00757fcd36b47590f77ba6957d4d9', 'type' => 'rector-extension', 'install_path' => __DIR__ . '/../rector/rector-downgrade-php', 'aliases' => array(0 => '9999999-dev'), 'dev_requirement' => \false), 'rector/rector-phpunit' => array('pretty_version' => 'dev-main', 'version' => 'dev-main', 'reference' => '3271bed97867b50834ec284ff4b342f228e22b30', 'type' => 'rector-extension', 'install_path' => __DIR__ . '/../rector/rector-phpunit', 'aliases' => array(0 => '0.11.x-dev'), 'dev_requirement' => \false), 'rector/rector-src' => array('pretty_version' => 'dev-main', 'version' => 'dev-main', 'reference' => null, 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev_requirement' => \false), 'rector/rector-symfony' => array('pretty_version' => 'dev-main', 'version' => 'dev-main', 'reference' => '10c3202c959d8db9c3a77dc9118fff235352d913', 'type' => 'rector-extension', 'install_path' => __DIR__ . '/../rector/rector-symfony', 'aliases' => array(0 => '9999999-dev'), 'dev_requirement' => \false), 'sebastian/diff' => array('pretty_version' => '5.1.1', 'version' => '5.1.1.0', 'reference' => 'c41e007b4b62af48218231d6c2275e4c9b975b2e', 'type' => 'library', 'install_path' => __DIR__ . '/../sebastian/diff', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/console' => array('pretty_version' => 'v6.4.14', 'version' => '6.4.14.0', 'reference' => '897c2441ed4eec8a8a2c37b943427d24dba3f26b', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/console', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/deprecation-contracts' => array('pretty_version' => 'v3.5.0', 'version' => '3.5.0.0', 'reference' => '0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/deprecation-contracts', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/filesystem' => array('pretty_version' => 'v6.4.13', 'version' => '6.4.13.0', 'reference' => '4856c9cf585d5a0313d8d35afd681a526f038dd3', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/filesystem', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/finder' => array('pretty_version' => 'v6.4.13', 'version' => '6.4.13.0', 'reference' => 'daea9eca0b08d0ed1dc9ab702a46128fd1be4958', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/finder', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/polyfill-ctype' => array('dev_requirement' => \false, 'replaced' => array(0 => '*')), 'symfony/polyfill-intl-grapheme' => array('dev_requirement' => \false, 'replaced' => array(0 => '*')), 'symfony/polyfill-mbstring' => array('pretty_version' => 'v1.31.0', 'version' => '1.31.0.0', 'reference' => '85181ba99b2345b0ef10ce42ecac37612d9fd341', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-mbstring', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/process' => array('pretty_version' => 'v6.4.14', 'version' => '6.4.14.0', 'reference' => '25214adbb0996d18112548de20c281be9f27279f', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/process', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/service-contracts' => array('pretty_version' => 'v3.5.0', 'version' => '3.5.0.0', 'reference' => 'bd1d9e59a81d8fa4acdcea3f617c581f7475a80f', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/service-contracts', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/string' => array('dev_requirement' => \false, 'replaced' => array(0 => '*')), 'symfony/yaml' => array('pretty_version' => 'v7.1.6', 'version' => '7.1.6.0', 'reference' => '3ced3f29e4f0d6bce2170ff26719f1fe9aacc671', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/yaml', 'aliases' => array(), 'dev_requirement' => \false), 'symplify/easy-parallel' => array('pretty_version' => '11.2.2', 'version' => '11.2.2.0', 'reference' => '8586c18bb8efb31cd192a4e5cc94ae7813f72ed9', 'type' => 'library', 'install_path' => __DIR__ . '/../symplify/easy-parallel', 'aliases' => array(), 'dev_requirement' => \false), 'symplify/rule-doc-generator-contracts' => array('pretty_version' => '11.2.0', 'version' => '11.2.0.0', 'reference' => '479cfcfd46047f80624aba931d9789e50475b5c6', 'type' => 'library', 'install_path' => __DIR__ . '/../symplify/rule-doc-generator-contracts', 'aliases' => array(), 'dev_requirement' => \false), 'webmozart/assert' => array('pretty_version' => '1.11.0', 'version' => '1.11.0.0', 'reference' => '11cb2199493b2f8a3b53e7f19068fc6aac760991', 'type' => 'library', 'install_path' => __DIR__ . '/../webmozart/assert', 'aliases' => array(), 'dev_requirement' => \false))); diff --git a/vendor/composer/pcre/composer.json b/vendor/composer/pcre/composer.json index f770a0b6aa8..1f69e2bb74a 100644 --- a/vendor/composer/pcre/composer.json +++ b/vendor/composer/pcre/composer.json @@ -21,8 +21,8 @@ }, "require-dev": { "phpunit\/phpunit": "^8 || ^9", - "phpstan\/phpstan": "^1.11.10", - "phpstan\/phpstan-strict-rules": "^1.1" + "phpstan\/phpstan": "^1.12 || ^2", + "phpstan\/phpstan-strict-rules": "^1 || ^2" }, "conflict": { "phpstan\/phpstan": "<1.11.10" diff --git a/vendor/composer/pcre/src/PHPStan/PregMatchTypeSpecifyingExtension.php b/vendor/composer/pcre/src/PHPStan/PregMatchTypeSpecifyingExtension.php index 7e81ea2a24d..38e56d18599 100644 --- a/vendor/composer/pcre/src/PHPStan/PregMatchTypeSpecifyingExtension.php +++ b/vendor/composer/pcre/src/PHPStan/PregMatchTypeSpecifyingExtension.php @@ -72,6 +72,20 @@ public function specifyTypes(MethodReflection $methodReflection, StaticCall $nod $overwrite = \true; $context = $context->negate(); } - return $this->typeSpecifier->create($matchesArg->value, $matchedType, $context, $overwrite, $scope, $node); + // @phpstan-ignore function.alreadyNarrowedType + if (\method_exists('PHPStan\\Analyser\\SpecifiedTypes', 'setRootExpr')) { + $typeSpecifier = $this->typeSpecifier->create($matchesArg->value, $matchedType, $context, $scope)->setRootExpr($node); + return $overwrite ? $typeSpecifier->setAlwaysOverwriteTypes() : $typeSpecifier; + } + // @phpstan-ignore arguments.count + return $this->typeSpecifier->create( + $matchesArg->value, + $matchedType, + $context, + // @phpstan-ignore argument.type + $overwrite, + $scope, + $node + ); } } diff --git a/vendor/composer/pcre/src/PcreException.php b/vendor/composer/pcre/src/PcreException.php index 0cec0760e41..429d734a4a9 100644 --- a/vendor/composer/pcre/src/PcreException.php +++ b/vendor/composer/pcre/src/PcreException.php @@ -34,12 +34,8 @@ private static function pcreLastErrorMessage($code) if (\function_exists('preg_last_error_msg')) { return \preg_last_error_msg(); } - // older php versions did not set the code properly in all cases - if (\PHP_VERSION_ID < 70201 && $code === 0) { - return 'UNDEFINED_ERROR'; - } $constants = \get_defined_constants(\true); - if (!isset($constants['pcre'])) { + if (!isset($constants['pcre']) || !\is_array($constants['pcre'])) { return 'UNDEFINED_ERROR'; } foreach ($constants['pcre'] as $const => $val) { diff --git a/vendor/rector/extension-installer/src/GeneratedConfig.php b/vendor/rector/extension-installer/src/GeneratedConfig.php index ea6170133f9..17d849a2bb3 100644 --- a/vendor/rector/extension-installer/src/GeneratedConfig.php +++ b/vendor/rector/extension-installer/src/GeneratedConfig.php @@ -9,7 +9,7 @@ */ final class GeneratedConfig { - public const EXTENSIONS = array('rector/rector-doctrine' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-doctrine', 'relative_install_path' => '../../rector-doctrine', 'extra' => NULL, 'version' => 'dev-main e75008c'), 'rector/rector-downgrade-php' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-downgrade-php', 'relative_install_path' => '../../rector-downgrade-php', 'extra' => NULL, 'version' => 'dev-main d9cef57'), 'rector/rector-phpunit' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-phpunit', 'relative_install_path' => '../../rector-phpunit', 'extra' => NULL, 'version' => 'dev-main 29536ff'), 'rector/rector-symfony' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-symfony', 'relative_install_path' => '../../rector-symfony', 'extra' => NULL, 'version' => 'dev-main 799b454')); + public const EXTENSIONS = array('rector/rector-doctrine' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-doctrine', 'relative_install_path' => '../../rector-doctrine', 'extra' => NULL, 'version' => 'dev-main 9cfbe48'), 'rector/rector-downgrade-php' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-downgrade-php', 'relative_install_path' => '../../rector-downgrade-php', 'extra' => NULL, 'version' => 'dev-main eb03bfe'), 'rector/rector-phpunit' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-phpunit', 'relative_install_path' => '../../rector-phpunit', 'extra' => NULL, 'version' => 'dev-main 3271bed'), 'rector/rector-symfony' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-symfony', 'relative_install_path' => '../../rector-symfony', 'extra' => NULL, 'version' => 'dev-main 10c3202')); private function __construct() { } diff --git a/vendor/rector/rector-doctrine/composer.json b/vendor/rector/rector-doctrine/composer.json index d18c67f9229..1db7c9da439 100644 --- a/vendor/rector/rector-doctrine/composer.json +++ b/vendor/rector/rector-doctrine/composer.json @@ -16,13 +16,13 @@ "phpstan\/phpstan-webmozart-assert": "^1.2", "phpunit\/phpunit": "^10.5", "rector\/rector-src": "dev-main", - "rector\/type-perfect": "^0.2", + "rector\/type-perfect": "^1.0", "symplify\/easy-coding-standard": "^12.3", "symplify\/phpstan-extensions": "^11.4", "symplify\/phpstan-rules": "^13.0", "symplify\/vendor-patches": "^11.3", - "tomasvotruba\/class-leak": "^0.2.15", - "tomasvotruba\/unused-public": "^0.4", + "tomasvotruba\/class-leak": "^1.1", + "tomasvotruba\/unused-public": "^1.0", "tracy\/tracy": "^2.10" }, "autoload": { diff --git a/vendor/rector/rector-doctrine/config/sets/doctrine-dbal-210.php b/vendor/rector/rector-doctrine/config/sets/doctrine-dbal-210.php deleted file mode 100644 index 0a68161a7f2..00000000000 --- a/vendor/rector/rector-doctrine/config/sets/doctrine-dbal-210.php +++ /dev/null @@ -1,9 +0,0 @@ -doctrineDocBlockResolver->isDoctrineEntityClass($node)) { return null; } $hasChanged = \false; + $scope = ScopeFetcher::fetch($node); foreach ($node->getMethods() as $classMethod) { if ($this->classMethodReturnTypeOverrideGuard->shouldSkipClassMethod($classMethod, $scope)) { continue; diff --git a/vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/AddReturnDocBlockToCollectionPropertyGetterByToManyAttributeRector.php b/vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/AddReturnDocBlockToCollectionPropertyGetterByToManyAttributeRector.php deleted file mode 100644 index 35a0bb367fc..00000000000 --- a/vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/AddReturnDocBlockToCollectionPropertyGetterByToManyAttributeRector.php +++ /dev/null @@ -1,64 +0,0 @@ -trainings; - } -} -CODE_SAMPLE -, <<<'CODE_SAMPLE' -#[ORM\Entity] -final class Trainer -{ - #[ORM\OneToMany(targetEntity:Training::class, mappedBy:"trainer")] - private $trainings; - - /** - * @return \Doctrine\Common\Collections\Collection - */ - public function getTrainings() - { - return $this->trainings; - } -} -CODE_SAMPLE -)]); - } - /** - * @return array> - */ - public function getNodeTypes() : array - { - return [Class_::class]; - } - /** - * @param Class_ $node - */ - public function refactor(Node $node) : ?Node - { - return null; - } -} diff --git a/vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/InitializeDefaultEntityCollectionRector.php b/vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/InitializeDefaultEntityCollectionRector.php deleted file mode 100644 index e7a060e3c27..00000000000 --- a/vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/InitializeDefaultEntityCollectionRector.php +++ /dev/null @@ -1,80 +0,0 @@ -marketingEvents = new ArrayCollection(); - } -} -CODE_SAMPLE -)]); - } - /** - * @return array> - */ - public function getNodeTypes() : array - { - return [Class_::class]; - } - /** - * @param Class_ $node - */ - public function refactor(Node $node) : ?Node - { - if ($this->hasWarned) { - return null; - } - \trigger_error(\sprintf('The "%s" rule was deprecated, as its functionality caused bugs. Without knowing the full dependency tree, its risky to change. Use "%s" instead', self::class, 'https://github.com/rectorphp/swiss-knife#4-finalize-classes-without-children')); - \sleep(3); - $this->hasWarned = \true; - return null; - } -} diff --git a/vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Property/TypedPropertyFromDoctrineCollectionRector.php b/vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Property/TypedPropertyFromDoctrineCollectionRector.php deleted file mode 100644 index 098fb245b01..00000000000 --- a/vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Property/TypedPropertyFromDoctrineCollectionRector.php +++ /dev/null @@ -1,83 +0,0 @@ -> - */ - public function getNodeTypes() : array - { - return [Property::class]; - } - /** - * @param Property $node - */ - public function refactor(Node $node) : ?Node - { - if ($this->hasWarned) { - return null; - } - \trigger_error(\sprintf('The "%s" rule was deprecated, as its functionality caused bugs. Without knowing the full dependency tree, its risky to change. Use "%s" instead', self::class, 'https://github.com/rectorphp/swiss-knife#4-finalize-classes-without-children')); - \sleep(3); - $this->hasWarned = \true; - return null; - } - public function provideMinPhpVersion() : int - { - return PhpVersion::PHP_74; - } -} diff --git a/vendor/rector/rector-doctrine/src/Set/SetProvider/DoctrineSetProvider.php b/vendor/rector/rector-doctrine/src/Set/SetProvider/DoctrineSetProvider.php index 2c2a3478368..e91255821f5 100644 --- a/vendor/rector/rector-doctrine/src/Set/SetProvider/DoctrineSetProvider.php +++ b/vendor/rector/rector-doctrine/src/Set/SetProvider/DoctrineSetProvider.php @@ -18,6 +18,6 @@ final class DoctrineSetProvider implements SetProviderInterface */ public function provide() : array { - return [new Set(SetGroup::DOCTRINE, 'Code Quality', __DIR__ . '/../../../config/sets/doctrine-code-quality.php'), new Set(SetGroup::DOCTRINE, 'Typed Collections', __DIR__ . '/../../../config/sets/typed-collections.php'), new ComposerTriggeredSet(SetGroup::DOCTRINE, 'doctrine/common', '2.0', __DIR__ . '/../../../config/sets/doctrine-common-20.php'), new ComposerTriggeredSet(SetGroup::DOCTRINE, 'doctrine/collection', '2.2', __DIR__ . '/../../../config/sets/doctrine-collection-22.php'), new ComposerTriggeredSet(SetGroup::DOCTRINE, 'doctrine/doctrine-bundle', '2.10', __DIR__ . '/../../../config/sets/doctrine-bundle-210.php'), new ComposerTriggeredSet(SetGroup::DOCTRINE, 'doctrine/dbal', '3.0', __DIR__ . '/../../../config/sets/doctrine-dbal-30.php'), new ComposerTriggeredSet(SetGroup::DOCTRINE, 'doctrine/dbal', '4.0', __DIR__ . '/../../../config/sets/doctrine-dbal-40.php'), new ComposerTriggeredSet(SetGroup::DOCTRINE, 'doctrine/dbal', '2.10', __DIR__ . '/../../../config/sets/doctrine-dbal-210.php'), new ComposerTriggeredSet(SetGroup::DOCTRINE, 'doctrine/dbal', '2.11', __DIR__ . '/../../../config/sets/doctrine-dbal-211.php'), new ComposerTriggeredSet(SetGroup::DOCTRINE, 'doctrine/orm', '2.5', __DIR__ . '/../../../config/sets/doctrine-orm-25.php'), new ComposerTriggeredSet(SetGroup::DOCTRINE, 'doctrine/orm', '2.13', __DIR__ . '/../../../config/sets/doctrine-orm-213.php'), new ComposerTriggeredSet(SetGroup::DOCTRINE, 'doctrine/orm', '2.14', __DIR__ . '/../../../config/sets/doctrine-orm-214.php'), new Set(SetGroup::ATTRIBUTES, 'Doctrine ORM', __DIR__ . '/../../../config/sets/attributes/doctrine.php'), new Set(SetGroup::ATTRIBUTES, 'Gedmo', __DIR__ . '/../../../config/sets/attributes/gedmo.php'), new Set(SetGroup::ATTRIBUTES, 'MongoDB', __DIR__ . '/../../../config/sets/attributes/mongodb.php')]; + return [new Set(SetGroup::DOCTRINE, 'Code Quality', __DIR__ . '/../../../config/sets/doctrine-code-quality.php'), new Set(SetGroup::DOCTRINE, 'Typed Collections', __DIR__ . '/../../../config/sets/typed-collections.php'), new ComposerTriggeredSet(SetGroup::DOCTRINE, 'doctrine/common', '2.0', __DIR__ . '/../../../config/sets/doctrine-common-20.php'), new ComposerTriggeredSet(SetGroup::DOCTRINE, 'doctrine/collection', '2.2', __DIR__ . '/../../../config/sets/doctrine-collection-22.php'), new ComposerTriggeredSet(SetGroup::DOCTRINE, 'doctrine/doctrine-bundle', '2.10', __DIR__ . '/../../../config/sets/doctrine-bundle-210.php'), new ComposerTriggeredSet(SetGroup::DOCTRINE, 'doctrine/dbal', '3.0', __DIR__ . '/../../../config/sets/doctrine-dbal-30.php'), new ComposerTriggeredSet(SetGroup::DOCTRINE, 'doctrine/dbal', '4.0', __DIR__ . '/../../../config/sets/doctrine-dbal-40.php'), new ComposerTriggeredSet(SetGroup::DOCTRINE, 'doctrine/dbal', '2.11', __DIR__ . '/../../../config/sets/doctrine-dbal-211.php'), new ComposerTriggeredSet(SetGroup::DOCTRINE, 'doctrine/orm', '2.5', __DIR__ . '/../../../config/sets/doctrine-orm-25.php'), new ComposerTriggeredSet(SetGroup::DOCTRINE, 'doctrine/orm', '2.13', __DIR__ . '/../../../config/sets/doctrine-orm-213.php'), new ComposerTriggeredSet(SetGroup::DOCTRINE, 'doctrine/orm', '2.14', __DIR__ . '/../../../config/sets/doctrine-orm-214.php'), new Set(SetGroup::ATTRIBUTES, 'Doctrine ORM', __DIR__ . '/../../../config/sets/attributes/doctrine.php'), new Set(SetGroup::ATTRIBUTES, 'Gedmo', __DIR__ . '/../../../config/sets/attributes/gedmo.php'), new Set(SetGroup::ATTRIBUTES, 'MongoDB', __DIR__ . '/../../../config/sets/attributes/mongodb.php')]; } } diff --git a/vendor/rector/rector-downgrade-php/composer.json b/vendor/rector/rector-downgrade-php/composer.json index e1f47a3aa59..e0f3cfca1c2 100644 --- a/vendor/rector/rector-downgrade-php/composer.json +++ b/vendor/rector/rector-downgrade-php/composer.json @@ -12,13 +12,13 @@ "phpstan\/phpstan-webmozart-assert": "^1.2", "phpunit\/phpunit": "^10.5", "rector\/rector-src": "dev-main", - "rector\/type-perfect": "^0.1.8", + "rector\/type-perfect": "^1.0", "symplify\/easy-coding-standard": "^12.3", "symplify\/phpstan-extensions": "^11.4", "symplify\/phpstan-rules": "^13.0", "symplify\/rule-doc-generator": "^12.2", "symplify\/vendor-patches": "^11.3", - "tomasvotruba\/class-leak": "^0.2.13", + "tomasvotruba\/class-leak": "^1.0", "tracy\/tracy": "^2.10" }, "autoload": { diff --git a/vendor/rector/rector-downgrade-php/rules/DowngradePhp72/Rector/FuncCall/DowngradeStreamIsattyRector.php b/vendor/rector/rector-downgrade-php/rules/DowngradePhp72/Rector/FuncCall/DowngradeStreamIsattyRector.php index e56630ddb5b..0b42653b9bf 100644 --- a/vendor/rector/rector-downgrade-php/rules/DowngradePhp72/Rector/FuncCall/DowngradeStreamIsattyRector.php +++ b/vendor/rector/rector-downgrade-php/rules/DowngradePhp72/Rector/FuncCall/DowngradeStreamIsattyRector.php @@ -19,7 +19,8 @@ use Rector\NodeAnalyzer\ExprInTopStmtMatcher; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\PhpParser\Parser\InlineCodeParser; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** @@ -27,7 +28,7 @@ * * @see \Rector\Tests\DowngradePhp72\Rector\FuncCall\DowngradeStreamIsattyRector\DowngradeStreamIsattyRectorTest */ -final class DowngradeStreamIsattyRector extends AbstractScopeAwareRector +final class DowngradeStreamIsattyRector extends AbstractRector { /** * @readonly @@ -106,7 +107,7 @@ public function getNodeTypes() : array * @param StmtsAwareInterface|Switch_|Return_|Expression|Echo_ $node * @return Node[]|null */ - public function refactorWithScope(Node $node, Scope $scope) : ?array + public function refactor(Node $node) : ?array { $expr = $this->exprInTopStmtMatcher->match($node, function (Node $subNode) : bool { if (!$subNode instanceof FuncCall) { @@ -126,6 +127,7 @@ public function refactorWithScope(Node $node, Scope $scope) : ?array return null; } $function = $this->createClosure(); + $scope = ScopeFetcher::fetch($node); $variable = new Variable($this->variableNaming->createCountedValueName('streamIsatty', $scope)); $assign = new Assign($variable, $function); $expr->name = $variable; diff --git a/vendor/rector/rector-downgrade-php/rules/DowngradePhp74/Rector/Array_/DowngradeArraySpreadRector.php b/vendor/rector/rector-downgrade-php/rules/DowngradePhp74/Rector/Array_/DowngradeArraySpreadRector.php index 611897fae0a..9dfb6678bd6 100644 --- a/vendor/rector/rector-downgrade-php/rules/DowngradePhp74/Rector/Array_/DowngradeArraySpreadRector.php +++ b/vendor/rector/rector-downgrade-php/rules/DowngradePhp74/Rector/Array_/DowngradeArraySpreadRector.php @@ -12,13 +12,13 @@ use PhpParser\Node\Stmt\ClassConst; use PhpParser\Node\Stmt\ClassLike; use PHPStan\Analyser\MutatingScope; -use PHPStan\Analyser\Scope; use PHPStan\Type\Type; use Rector\DowngradePhp81\NodeAnalyzer\ArraySpreadAnalyzer; use Rector\DowngradePhp81\NodeFactory\ArrayMergeFromArraySpreadFactory; use Rector\PhpParser\AstResolver; use Rector\PhpParser\Node\BetterNodeFinder; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; @@ -27,7 +27,7 @@ * * @see \Rector\Tests\DowngradePhp74\Rector\Array_\DowngradeArraySpreadRector\DowngradeArraySpreadRectorTest */ -final class DowngradeArraySpreadRector extends AbstractScopeAwareRector +final class DowngradeArraySpreadRector extends AbstractRector { /** * @readonly @@ -106,7 +106,7 @@ public function getNodeTypes() : array /** * @param Array_|ClassConst $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { if ($node instanceof ClassConst) { return $this->refactorUnderClassConst($node); @@ -115,6 +115,7 @@ public function refactorWithScope(Node $node, Scope $scope) : ?Node return null; } /** @var MutatingScope $scope */ + $scope = ScopeFetcher::fetch($node); return $this->arrayMergeFromArraySpreadFactory->createFromArray($node, $scope); } private function refactorUnderClassConst(ClassConst $classConst) : ?ClassConst diff --git a/vendor/rector/rector-downgrade-php/rules/DowngradePhp80/Rector/Catch_/DowngradeNonCapturingCatchesRector.php b/vendor/rector/rector-downgrade-php/rules/DowngradePhp80/Rector/Catch_/DowngradeNonCapturingCatchesRector.php index 1cb37bcf593..c3e01fbea08 100644 --- a/vendor/rector/rector-downgrade-php/rules/DowngradePhp80/Rector/Catch_/DowngradeNonCapturingCatchesRector.php +++ b/vendor/rector/rector-downgrade-php/rules/DowngradePhp80/Rector/Catch_/DowngradeNonCapturingCatchesRector.php @@ -6,9 +6,9 @@ use PhpParser\Node; use PhpParser\Node\Expr\Variable; use PhpParser\Node\Stmt\Catch_; -use PHPStan\Analyser\Scope; use Rector\Naming\Naming\VariableNaming; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** @@ -16,7 +16,7 @@ * * @see \Rector\Tests\DowngradePhp80\Rector\Catch_\DowngradeNonCapturingCatchesRector\DowngradeNonCapturingCatchesRectorTest */ -final class DowngradeNonCapturingCatchesRector extends AbstractScopeAwareRector +final class DowngradeNonCapturingCatchesRector extends AbstractRector { /** * @readonly @@ -67,11 +67,12 @@ public function getNodeTypes() : array /** * @param Catch_ $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { if ($node->var instanceof Variable) { return null; } + $scope = ScopeFetcher::fetch($node); $exceptionVarName = $this->variableNaming->createCountedValueName('exception', $scope); $node->var = new Variable($exceptionVarName); return $node; diff --git a/vendor/rector/rector-downgrade-php/rules/DowngradePhp80/Rector/Expression/DowngradeMatchToSwitchRector.php b/vendor/rector/rector-downgrade-php/rules/DowngradePhp80/Rector/Expression/DowngradeMatchToSwitchRector.php index fa381cca08d..b02a2267ae2 100644 --- a/vendor/rector/rector-downgrade-php/rules/DowngradePhp80/Rector/Expression/DowngradeMatchToSwitchRector.php +++ b/vendor/rector/rector-downgrade-php/rules/DowngradePhp80/Rector/Expression/DowngradeMatchToSwitchRector.php @@ -28,7 +28,8 @@ use PHPStan\Analyser\Scope; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\Php72\NodeFactory\AnonymousFunctionFactory; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** @@ -36,7 +37,7 @@ * * @see \Rector\Tests\DowngradePhp80\Rector\Expression\DowngradeMatchToSwitchRector\DowngradeMatchToSwitchRectorTest */ -final class DowngradeMatchToSwitchRector extends AbstractScopeAwareRector +final class DowngradeMatchToSwitchRector extends AbstractRector { /** * @readonly @@ -94,11 +95,12 @@ public function getNodeTypes() : array /** * @param Echo_|Expression|Return_ $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { /** @var Match_|null $match */ $match = null; $hasChanged = \false; + $scope = ScopeFetcher::fetch($node); $this->traverseNodesWithCallable($node, function (Node $subNode) use($node, &$match, &$hasChanged, $scope) { if (($subNode instanceof ArrayItem || $subNode instanceof Arg) && $subNode->value instanceof Match_ && $this->isEqualScope($subNode->value, $scope)) { $switchCases = $this->createSwitchCasesFromMatchArms($node, $subNode->value, \true); @@ -153,6 +155,7 @@ public function refactorWithScope(Node $node, Scope $scope) : ?Node if (!$match instanceof Match_) { return null; } + $scope = ScopeFetcher::fetch($node); if (!$this->isEqualScope($match, $scope)) { return null; } diff --git a/vendor/rector/rector-downgrade-php/rules/DowngradePhp81/Rector/Array_/DowngradeArraySpreadStringKeyRector.php b/vendor/rector/rector-downgrade-php/rules/DowngradePhp81/Rector/Array_/DowngradeArraySpreadStringKeyRector.php index 93267cff083..de091f718a8 100644 --- a/vendor/rector/rector-downgrade-php/rules/DowngradePhp81/Rector/Array_/DowngradeArraySpreadStringKeyRector.php +++ b/vendor/rector/rector-downgrade-php/rules/DowngradePhp81/Rector/Array_/DowngradeArraySpreadStringKeyRector.php @@ -7,12 +7,12 @@ use PhpParser\Node\Expr\Array_; use PhpParser\Node\Expr\ArrayItem; use PHPStan\Analyser\MutatingScope; -use PHPStan\Analyser\Scope; use PHPStan\Type\ArrayType; use PHPStan\Type\IntegerType; use Rector\DowngradePhp81\NodeAnalyzer\ArraySpreadAnalyzer; use Rector\DowngradePhp81\NodeFactory\ArrayMergeFromArraySpreadFactory; -use Rector\Rector\AbstractScopeAwareRector; +use Rector\PHPStan\ScopeFetcher; +use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** @@ -20,7 +20,7 @@ * * @see \Rector\Tests\DowngradePhp81\Rector\Array_\DowngradeArraySpreadStringKeyRector\DowngradeArraySpreadStringKeyRectorTest */ -final class DowngradeArraySpreadStringKeyRector extends AbstractScopeAwareRector +final class DowngradeArraySpreadStringKeyRector extends AbstractRector { /** * @readonly @@ -63,7 +63,7 @@ public function getNodeTypes() : array /** * @param Array_ $node */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node + public function refactor(Node $node) : ?Node { if (!$this->arraySpreadAnalyzer->isArrayWithUnpack($node)) { return null; @@ -72,6 +72,7 @@ public function refactorWithScope(Node $node, Scope $scope) : ?Node return null; } /** @var MutatingScope $scope */ + $scope = ScopeFetcher::fetch($node); return $this->arrayMergeFromArraySpreadFactory->createFromArray($node, $scope); } private function shouldSkipArray(Array_ $array) : bool diff --git a/vendor/rector/rector-downgrade-php/rules/DowngradePhp81/Rector/Property/DowngradeReadonlyPropertyRector.php b/vendor/rector/rector-downgrade-php/rules/DowngradePhp81/Rector/Property/DowngradeReadonlyPropertyRector.php index 8175d005c69..0fd53dc966e 100644 --- a/vendor/rector/rector-downgrade-php/rules/DowngradePhp81/Rector/Property/DowngradeReadonlyPropertyRector.php +++ b/vendor/rector/rector-downgrade-php/rules/DowngradePhp81/Rector/Property/DowngradeReadonlyPropertyRector.php @@ -32,9 +32,10 @@ final class DowngradeReadonlyPropertyRector extends AbstractRector */ private $docBlockUpdater; /** + * @readonly * @var \Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory */ - protected $phpDocInfoFactory; + private $phpDocInfoFactory; /** * @var string */ diff --git a/vendor/rector/rector-downgrade-php/src/Set/ValueObject/DowngradeLevelSetList.php b/vendor/rector/rector-downgrade-php/src/Set/ValueObject/DowngradeLevelSetList.php index 9ff7d32c3e1..a5904937a33 100644 --- a/vendor/rector/rector-downgrade-php/src/Set/ValueObject/DowngradeLevelSetList.php +++ b/vendor/rector/rector-downgrade-php/src/Set/ValueObject/DowngradeLevelSetList.php @@ -3,11 +3,11 @@ declare (strict_types=1); namespace Rector\Set\ValueObject; -use Rector\Set\Contract\SetListInterface; /** * @api + * @deprecated use ->withDowngradeSets() in rector.php instead */ -final class DowngradeLevelSetList implements SetListInterface +final class DowngradeLevelSetList { /** * @var string diff --git a/vendor/rector/rector-downgrade-php/src/Set/ValueObject/DowngradeSetList.php b/vendor/rector/rector-downgrade-php/src/Set/ValueObject/DowngradeSetList.php index 4de4a011b01..c1d4d3308a9 100644 --- a/vendor/rector/rector-downgrade-php/src/Set/ValueObject/DowngradeSetList.php +++ b/vendor/rector/rector-downgrade-php/src/Set/ValueObject/DowngradeSetList.php @@ -3,11 +3,11 @@ declare (strict_types=1); namespace Rector\Set\ValueObject; -use Rector\Set\Contract\SetListInterface; /** * @api + * @deprecated use ->withDowngradeSets() in rector.php instead */ -final class DowngradeSetList implements SetListInterface +final class DowngradeSetList { /** * @var string diff --git a/vendor/rector/rector-phpunit/config/sets/phpunit100.php b/vendor/rector/rector-phpunit/config/sets/phpunit100.php index 93e193caf02..21d4fe8236b 100644 --- a/vendor/rector/rector-phpunit/config/sets/phpunit100.php +++ b/vendor/rector/rector-phpunit/config/sets/phpunit100.php @@ -7,7 +7,6 @@ use Rector\PHPUnit\PHPUnit100\Rector\Class_\AddProphecyTraitRector; use Rector\PHPUnit\PHPUnit100\Rector\Class_\PublicDataProviderClassMethodRector; use Rector\PHPUnit\PHPUnit100\Rector\Class_\StaticDataProviderClassMethodRector; -use Rector\PHPUnit\PHPUnit100\Rector\MethodCall\AssertIssetToAssertObjectHasPropertyRector; use Rector\PHPUnit\PHPUnit100\Rector\MethodCall\RemoveSetMethodsMethodCallRector; use Rector\PHPUnit\PHPUnit100\Rector\StmtsAwareInterface\WithConsecutiveRector; use Rector\PHPUnit\Set\PHPUnitSetList; @@ -15,7 +14,7 @@ use Rector\Renaming\ValueObject\MethodCallRename; return static function (RectorConfig $rectorConfig) : void { $rectorConfig->sets([PHPUnitSetList::ANNOTATIONS_TO_ATTRIBUTES]); - $rectorConfig->rules([AssertIssetToAssertObjectHasPropertyRector::class, StaticDataProviderClassMethodRector::class, PublicDataProviderClassMethodRector::class, AddProphecyTraitRector::class, WithConsecutiveRector::class, RemoveSetMethodsMethodCallRector::class]); + $rectorConfig->rules([StaticDataProviderClassMethodRector::class, PublicDataProviderClassMethodRector::class, AddProphecyTraitRector::class, WithConsecutiveRector::class, RemoveSetMethodsMethodCallRector::class]); $rectorConfig->ruleWithConfiguration(RenameMethodRector::class, [ // https://github.com/sebastianbergmann/phpunit/issues/4087 new MethodCallRename('PHPUnit\\Framework\\Assert', 'assertRegExp', 'assertMatchesRegularExpression'), diff --git a/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/ClassMethod/EntityDocumentCreateMockToDirectNewRector.php b/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/ClassMethod/EntityDocumentCreateMockToDirectNewRector.php index 0dd54968e9b..5048239dc3a 100644 --- a/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/ClassMethod/EntityDocumentCreateMockToDirectNewRector.php +++ b/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/ClassMethod/EntityDocumentCreateMockToDirectNewRector.php @@ -21,6 +21,7 @@ use Rector\PhpParser\Node\Value\ValueResolver; use Rector\PHPUnit\CodeQuality\NodeAnalyser\DoctrineEntityDocumentAnalyser; use Rector\Rector\AbstractRector; +use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** * @see \Rector\PHPUnit\Tests\CodeQuality\Rector\ClassMethod\EntityDocumentCreateMockToDirectNewRector\EntityDocumentCreateMockToDirectNewRectorTest @@ -50,7 +51,34 @@ public function __construct(ValueResolver $valueResolver, ReflectionProvider $re } public function getRuleDefinition() : RuleDefinition { - return new RuleDefinition('Move from value object mocking, to direct use of value object', []); + return new RuleDefinition('Move from entity mock, to direct use of class instance and setters', [new CodeSample(<<<'CODE_SAMPLE' +use PHPUnit\Framework\TestCase; + +final class SomeFileTest extends TestCase +{ + public function test() + { + $tableMock = $this->createMock(Table::class); + + $tableMock->expects(self::once()) + ->method('isLocked') + ->willReturn(true); + } +} +CODE_SAMPLE +, <<<'CODE_SAMPLE' +use PHPUnit\Framework\TestCase; + +final class SomeFileTest extends TestCase +{ + public function test() + { + $table = new Table(); + $table->setLocked(true); + } +} +CODE_SAMPLE +)]); } /** * @return array> diff --git a/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/YieldDataProviderRector.php b/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/YieldDataProviderRector.php index 0a8184eb418..66b4c755caf 100644 --- a/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/YieldDataProviderRector.php +++ b/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/YieldDataProviderRector.php @@ -9,13 +9,15 @@ use PhpParser\Node\Stmt\Class_; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Return_; +use PHPStan\Analyser\Scope; use PHPStan\PhpDocParser\Ast\PhpDoc\ReturnTagValueNode; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; +use Rector\DeadCode\NodeAnalyzer\IsClassMethodUsedAnalyzer; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\PhpParser\NodeTransformer; use Rector\PHPUnit\NodeAnalyzer\TestsNodeAnalyzer; use Rector\PHPUnit\NodeFinder\DataProviderClassMethodFinder; -use Rector\Rector\AbstractRector; +use Rector\Rector\AbstractScopeAwareRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** @@ -24,7 +26,7 @@ * * @see \Rector\PHPUnit\Tests\CodeQuality\Rector\Class_\YieldDataProviderRector\YieldDataProviderRectorTest */ -final class YieldDataProviderRector extends AbstractRector +final class YieldDataProviderRector extends AbstractScopeAwareRector { /** * @readonly @@ -46,12 +48,18 @@ final class YieldDataProviderRector extends AbstractRector * @var \Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory */ private $phpDocInfoFactory; - public function __construct(NodeTransformer $nodeTransformer, TestsNodeAnalyzer $testsNodeAnalyzer, DataProviderClassMethodFinder $dataProviderClassMethodFinder, PhpDocInfoFactory $phpDocInfoFactory) + /** + * @readonly + * @var \Rector\DeadCode\NodeAnalyzer\IsClassMethodUsedAnalyzer + */ + private $isClassMethodUsedAnalyzer; + public function __construct(NodeTransformer $nodeTransformer, TestsNodeAnalyzer $testsNodeAnalyzer, DataProviderClassMethodFinder $dataProviderClassMethodFinder, PhpDocInfoFactory $phpDocInfoFactory, IsClassMethodUsedAnalyzer $isClassMethodUsedAnalyzer) { $this->nodeTransformer = $nodeTransformer; $this->testsNodeAnalyzer = $testsNodeAnalyzer; $this->dataProviderClassMethodFinder = $dataProviderClassMethodFinder; $this->phpDocInfoFactory = $phpDocInfoFactory; + $this->isClassMethodUsedAnalyzer = $isClassMethodUsedAnalyzer; } public function getRuleDefinition() : RuleDefinition { @@ -91,7 +99,7 @@ public function getNodeTypes() : array /** * @param Class_ $node */ - public function refactor(Node $node) : ?Node + public function refactorWithScope(Node $node, Scope $scope) : ?Class_ { if (!$this->testsNodeAnalyzer->isInTestClass($node)) { return null; @@ -103,6 +111,9 @@ public function refactor(Node $node) : ?Node if (!$array instanceof Array_) { continue; } + if ($this->isClassMethodUsedAnalyzer->isClassMethodUsed($node, $dataProviderClassMethod, $scope)) { + continue; + } $this->transformArrayToYieldsOnMethodNode($dataProviderClassMethod, $array); $hasChanged = \true; } diff --git a/vendor/rector/rector-phpunit/rules/PHPUnit100/Rector/MethodCall/AssertIssetToAssertObjectHasPropertyRector.php b/vendor/rector/rector-phpunit/rules/PHPUnit100/Rector/MethodCall/AssertIssetToAssertObjectHasPropertyRector.php deleted file mode 100644 index d46a28ccda8..00000000000 --- a/vendor/rector/rector-phpunit/rules/PHPUnit100/Rector/MethodCall/AssertIssetToAssertObjectHasPropertyRector.php +++ /dev/null @@ -1,139 +0,0 @@ -testsNodeAnalyzer = $testsNodeAnalyzer; - $this->identifierManipulator = $identifierManipulator; - $this->classReflectionAnalyzer = $classReflectionAnalyzer; - } - public function getRuleDefinition() : RuleDefinition - { - return new RuleDefinition('Change "isset()" property check, to assertObjectHasProperty() method', [new CodeSample(<<<'CODE_SAMPLE' -use PHPUnit\Framework\TestCase; - -final class SomeTest extends TestCase -{ - public function test() - { - $object = new stdClass(); - $this->assertTrue(isset($object->someProperty)); - } -} -CODE_SAMPLE -, <<<'CODE_SAMPLE' -use PHPUnit\Framework\TestCase; - -final class SomeTest extends TestCase -{ - public function test() - { - $object = new stdClass(); - $this->assertObjectHasProperty('someProperty', $object); - } -} -CODE_SAMPLE -)]); - } - /** - * @return array> - */ - public function getNodeTypes() : array - { - return [MethodCall::class, StaticCall::class]; - } - /** - * @param MethodCall|StaticCall $node - */ - public function refactor(Node $node) : ?Node - { - if (!$this->testsNodeAnalyzer->isPHPUnitMethodCallNames($node, [AssertMethod::ASSERT_TRUE, AssertMethod::ASSERT_FALSE])) { - return null; - } - if ($node->isFirstClassCallable()) { - return null; - } - $firstArg = $node->getArgs()[0]; - $firstArgValue = $firstArg->value; - if (!$firstArgValue instanceof Isset_) { - return null; - } - $issetExpr = $firstArgValue->vars[0]; - if (!$issetExpr instanceof PropertyFetch) { - return null; - } - if ($this->hasMagicIsset($issetExpr->var)) { - return null; - } - $name = $this->getName($issetExpr); - if ($name === null) { - return null; - } - $this->identifierManipulator->renameNodeWithMap($node, [AssertMethod::ASSERT_TRUE => 'assertObjectHasProperty', AssertMethod::ASSERT_FALSE => 'assertObjectNotHasProperty']); - $oldArgs = $node->getArgs(); - unset($oldArgs[0]); - $newArgs = $this->nodeFactory->createArgs([new String_($name), $issetExpr->var]); - $node->args = \array_merge($newArgs, $oldArgs); - return $node; - } - private function hasMagicIsset(Expr $expr) : bool - { - $type = $this->nodeTypeResolver->getType($expr); - if (!$type instanceof TypeWithClassName) { - // object not found, skip - return $type instanceof ObjectWithoutClassType; - } - $classReflection = $type->getClassReflection(); - if (!$classReflection instanceof ClassReflection) { - return \false; - } - if ($classReflection->hasMethod('__isset')) { - return \true; - } - if (!$classReflection->isClass()) { - return \false; - } - return $this->classReflectionAnalyzer->resolveParentClassName($classReflection) !== null; - } -} diff --git a/vendor/rector/rector-phpunit/src/Set/PHPUnitSetList.php b/vendor/rector/rector-phpunit/src/Set/PHPUnitSetList.php index 66df54acbc4..6023d3bfafb 100644 --- a/vendor/rector/rector-phpunit/src/Set/PHPUnitSetList.php +++ b/vendor/rector/rector-phpunit/src/Set/PHPUnitSetList.php @@ -3,11 +3,10 @@ declare (strict_types=1); namespace Rector\PHPUnit\Set; -use Rector\Set\Contract\SetListInterface; /** * @api */ -final class PHPUnitSetList implements SetListInterface +final class PHPUnitSetList { /** * @var string diff --git a/vendor/rector/rector-symfony/composer.json b/vendor/rector/rector-symfony/composer.json index e8c2a34fc5f..c79d4aba6ca 100644 --- a/vendor/rector/rector-symfony/composer.json +++ b/vendor/rector/rector-symfony/composer.json @@ -13,7 +13,7 @@ "phpstan\/phpstan-webmozart-assert": "^1.2", "phpunit\/phpunit": "^10.5", "rector\/rector-src": "dev-main", - "rector\/type-perfect": "^0.1.8", + "rector\/type-perfect": "^1.0", "symfony\/config": "^6.4", "symfony\/dependency-injection": "^6.4", "symfony\/http-kernel": "~6.3", @@ -25,8 +25,8 @@ "symplify\/phpstan-extensions": "^11.4", "symplify\/phpstan-rules": "^13.0", "symplify\/vendor-patches": "^11.3", - "tomasvotruba\/class-leak": "^0.2", - "tomasvotruba\/unused-public": "^0.4", + "tomasvotruba\/class-leak": "^1.0", + "tomasvotruba\/unused-public": "^1.0", "tracy\/tracy": "^2.10" }, "autoload": { diff --git a/vendor/rector/rector-symfony/rules/CodeQuality/Rector/Class_/MakeCommandLazyRector.php b/vendor/rector/rector-symfony/rules/CodeQuality/Rector/Class_/MakeCommandLazyRector.php deleted file mode 100644 index fa260942849..00000000000 --- a/vendor/rector/rector-symfony/rules/CodeQuality/Rector/Class_/MakeCommandLazyRector.php +++ /dev/null @@ -1,68 +0,0 @@ -setName('sunshine'); - } -} -CODE_SAMPLE -, <<<'CODE_SAMPLE' -use Symfony\Component\Console\Command\Command - -final class SunshineCommand extends Command -{ - protected static $defaultName = 'sunshine'; - public function configure() - { - } -} -CODE_SAMPLE -)]); - } - /** - * @return array> - */ - public function getNodeTypes() : array - { - return [Class_::class]; - } - /** - * @param Class_ $node - */ - public function refactor(Node $node) : ?Node - { - if ($this->hasWarned) { - return null; - } - \trigger_error(\sprintf('The "%s" rule was deprecated, as its only dead middle step before more solid PHP attributes.', self::class)); - \sleep(3); - $this->hasWarned = \true; - return null; - } -} diff --git a/vendor/rector/rector-symfony/rules/Configs/Rector/Closure/ServicesSetNameToSetTypeRector.php b/vendor/rector/rector-symfony/rules/Configs/Rector/Closure/ServicesSetNameToSetTypeRector.php deleted file mode 100644 index 66a9b7162ec..00000000000 --- a/vendor/rector/rector-symfony/rules/Configs/Rector/Closure/ServicesSetNameToSetTypeRector.php +++ /dev/null @@ -1,53 +0,0 @@ -set("name_type", SomeType::class) to bare type, useful since Symfony 3.4', [new CodeSample(<<<'CODE_SAMPLE' -use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; - -return static function (ContainerConfigurator $containerConfigurator): void { - $services = $containerConfigurator->services(); - - $services->set('some_name', App\SomeClass::class); -}; -CODE_SAMPLE -, <<<'CODE_SAMPLE' -use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; - -return static function (ContainerConfigurator $containerConfigurator): void { - $services = $containerConfigurator->services(); - - $services->set(App\SomeClass::class); -}; -CODE_SAMPLE -)]); - } - /** - * @return array> - */ - public function getNodeTypes() : array - { - return [Closure::class]; - } - /** - * @param Closure $node - */ - public function refactor(Node $node) : ?Node - { - return null; - } -} diff --git a/vendor/rector/rector-symfony/rules/Symfony40/Rector/MethodCall/ProcessBuilderGetProcessRector.php b/vendor/rector/rector-symfony/rules/Symfony40/Rector/MethodCall/ProcessBuilderGetProcessRector.php deleted file mode 100644 index e2b8e6e035a..00000000000 --- a/vendor/rector/rector-symfony/rules/Symfony40/Rector/MethodCall/ProcessBuilderGetProcessRector.php +++ /dev/null @@ -1,58 +0,0 @@ -getProcess()` calls to $processBuilder in Process in Symfony, because ProcessBuilder was removed. This is part of multi-step Rector and has very narrow focus.', [new CodeSample(<<<'CODE_SAMPLE' -$processBuilder = new Symfony\Component\Process\ProcessBuilder; -$process = $processBuilder->getProcess(); -$commamdLine = $processBuilder->getProcess()->getCommandLine(); -CODE_SAMPLE -, <<<'CODE_SAMPLE' -$processBuilder = new Symfony\Component\Process\ProcessBuilder; -$process = $processBuilder; -$commamdLine = $processBuilder->getCommandLine(); -CODE_SAMPLE -)]); - } - /** - * @return array> - */ - public function getNodeTypes() : array - { - return [MethodCall::class]; - } - /** - * @param MethodCall $node - */ - public function refactor(Node $node) : ?Node - { - if ($this->hasWarned) { - return null; - } - \trigger_error(\sprintf('The "%s" rule was deprecated, as it cannot change fluent code builder in a reliable way.', self::class)); - \sleep(3); - $this->hasWarned = \true; - return null; - } -} diff --git a/vendor/rector/rector-symfony/rules/Symfony40/Rector/StaticCall/ProcessBuilderInstanceRector.php b/vendor/rector/rector-symfony/rules/Symfony40/Rector/StaticCall/ProcessBuilderInstanceRector.php deleted file mode 100644 index e8cc0430582..00000000000 --- a/vendor/rector/rector-symfony/rules/Symfony40/Rector/StaticCall/ProcessBuilderInstanceRector.php +++ /dev/null @@ -1,48 +0,0 @@ -> - */ - public function getNodeTypes() : array - { - return [StaticCall::class]; - } - /** - * @param StaticCall $node - */ - public function refactor(Node $node) : ?Node - { - if ($this->hasWarned) { - return null; - } - \trigger_error(\sprintf('The "%s" rule was deprecated, as it cannot change fluent code builder in a reliable way.', self::class)); - \sleep(3); - $this->hasWarned = \true; - return null; - } -} diff --git a/vendor/rector/rector-symfony/rules/Symfony43/Rector/MethodCall/WebTestCaseAssertSelectorTextContainsRector.php b/vendor/rector/rector-symfony/rules/Symfony43/Rector/MethodCall/WebTestCaseAssertSelectorTextContainsRector.php deleted file mode 100644 index 3ace3018b2a..00000000000 --- a/vendor/rector/rector-symfony/rules/Symfony43/Rector/MethodCall/WebTestCaseAssertSelectorTextContainsRector.php +++ /dev/null @@ -1,72 +0,0 @@ -assertContains('Hello World', $crawler->filter('h1')->text()); - } -} -CODE_SAMPLE -, <<<'CODE_SAMPLE' -use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -use Symfony\Component\DomCrawler\Crawler; - -final class SomeTest extends WebTestCase -{ - public function testContains() - { - $crawler = new Symfony\Component\DomCrawler\Crawler(); - $this->assertSelectorTextContains('h1', 'Hello World'); - } -} -CODE_SAMPLE -)]); - } - /** - * @return array> - */ - public function getNodeTypes() : array - { - return [MethodCall::class, StaticCall::class]; - } - /** - * @param MethodCall|StaticCall $node - */ - public function refactor(Node $node) : ?Node - { - if ($this->hasWarned) { - return null; - } - \trigger_error(\sprintf('The "%s" rule was deprecated, as it does not upgrade to valid code.', self::class)); - \sleep(3); - $this->hasWarned = \true; - return null; - } -} diff --git a/vendor/rector/rector-symfony/rules/Symfony53/Rector/Class_/CommandDescriptionToPropertyRector.php b/vendor/rector/rector-symfony/rules/Symfony53/Rector/Class_/CommandDescriptionToPropertyRector.php deleted file mode 100644 index 17535d9d45e..00000000000 --- a/vendor/rector/rector-symfony/rules/Symfony53/Rector/Class_/CommandDescriptionToPropertyRector.php +++ /dev/null @@ -1,71 +0,0 @@ -setDescription('sunshine description'); - } -} -CODE_SAMPLE -, <<<'CODE_SAMPLE' -use Symfony\Component\Console\Command\Command - -final class SunshineCommand extends Command -{ - protected static $defaultDescription = 'sunshine description'; - - public function configure() - { - } -} -CODE_SAMPLE -)]); - } - /** - * @return array> - */ - public function getNodeTypes() : array - { - return [Class_::class]; - } - /** - * @param Class_ $node - */ - public function refactor(Node $node) : ?Node - { - if ($this->hasWarned) { - return null; - } - \trigger_error(\sprintf('The "%s" rule was deprecated, as its only dead middle step before more solid PHP attributes.', self::class)); - \sleep(3); - $this->hasWarned = \true; - return null; - } -} diff --git a/vendor/rector/rector-symfony/rules/Symfony64/Rector/Class_/ChangeRouteAttributeFromAnnotationSubnamespaceRector.php b/vendor/rector/rector-symfony/rules/Symfony64/Rector/Class_/ChangeRouteAttributeFromAnnotationSubnamespaceRector.php deleted file mode 100644 index e20e4a9ad8f..00000000000 --- a/vendor/rector/rector-symfony/rules/Symfony64/Rector/Class_/ChangeRouteAttributeFromAnnotationSubnamespaceRector.php +++ /dev/null @@ -1,57 +0,0 @@ -hasWarned) { - return null; - } - \trigger_error(\sprintf('The "%s" rule was deprecated. Use RenameAttributeRector rule instead', self::class)); - \sleep(3); - $this->hasWarned = \true; - return null; - } -} diff --git a/vendor/rector/rector-symfony/src/Set/FOSRestSetList.php b/vendor/rector/rector-symfony/src/Set/FOSRestSetList.php index c17bb227bd7..26d8cbc4c91 100644 --- a/vendor/rector/rector-symfony/src/Set/FOSRestSetList.php +++ b/vendor/rector/rector-symfony/src/Set/FOSRestSetList.php @@ -3,11 +3,12 @@ declare (strict_types=1); namespace Rector\Symfony\Set; -use Rector\Set\Contract\SetListInterface; /** + * @deprecated Use ->withAttributesSets(symfony: true) in rector.php config instead + * * @api used in public */ -final class FOSRestSetList implements SetListInterface +final class FOSRestSetList { /** * @var string diff --git a/vendor/rector/rector-symfony/src/Set/JMSSetList.php b/vendor/rector/rector-symfony/src/Set/JMSSetList.php index 99c3e40af59..d30cac89f93 100644 --- a/vendor/rector/rector-symfony/src/Set/JMSSetList.php +++ b/vendor/rector/rector-symfony/src/Set/JMSSetList.php @@ -3,11 +3,12 @@ declare (strict_types=1); namespace Rector\Symfony\Set; -use Rector\Set\Contract\SetListInterface; /** + * @deprecated Use ->withAttributesSets(symfony: true) in rector.php config instead + * * @api */ -final class JMSSetList implements SetListInterface +final class JMSSetList { /** * @var string diff --git a/vendor/rector/rector-symfony/src/Set/SensiolabsSetList.php b/vendor/rector/rector-symfony/src/Set/SensiolabsSetList.php index 0076ff3f839..17797cd2bbe 100644 --- a/vendor/rector/rector-symfony/src/Set/SensiolabsSetList.php +++ b/vendor/rector/rector-symfony/src/Set/SensiolabsSetList.php @@ -3,11 +3,12 @@ declare (strict_types=1); namespace Rector\Symfony\Set; -use Rector\Set\Contract\SetListInterface; /** + * @deprecated Use ->withAttributesSets(symfony: true) in rector.php config instead + * * @api */ -final class SensiolabsSetList implements SetListInterface +final class SensiolabsSetList { /** * @var string diff --git a/vendor/rector/rector-symfony/src/Set/SwiftMailerSetList.php b/vendor/rector/rector-symfony/src/Set/SwiftMailerSetList.php index d763f1964e6..4294d70ee9a 100644 --- a/vendor/rector/rector-symfony/src/Set/SwiftMailerSetList.php +++ b/vendor/rector/rector-symfony/src/Set/SwiftMailerSetList.php @@ -3,11 +3,10 @@ declare (strict_types=1); namespace Rector\Symfony\Set; -use Rector\Set\Contract\SetListInterface; /** * @api */ -final class SwiftMailerSetList implements SetListInterface +final class SwiftMailerSetList { /** * @var string diff --git a/vendor/rector/rector-symfony/src/Set/SymfonySetList.php b/vendor/rector/rector-symfony/src/Set/SymfonySetList.php index 22439fed28b..f8fe0a8baef 100644 --- a/vendor/rector/rector-symfony/src/Set/SymfonySetList.php +++ b/vendor/rector/rector-symfony/src/Set/SymfonySetList.php @@ -3,11 +3,10 @@ declare (strict_types=1); namespace Rector\Symfony\Set; -use Rector\Set\Contract\SetListInterface; /** * @api */ -final class SymfonySetList implements SetListInterface +final class SymfonySetList { /** * @var string @@ -94,6 +93,7 @@ final class SymfonySetList implements SetListInterface */ public const SYMFONY_54 = __DIR__ . '/../../config/sets/symfony/symfony54.php'; /** + * @deprecated Use ->withAttributesSets(symfony: true) in rector.php config instead * @var string */ public const SYMFONY_52_VALIDATOR_ATTRIBUTES = __DIR__ . '/../../config/sets/symfony/symfony52-validator-attributes.php'; @@ -134,6 +134,7 @@ final class SymfonySetList implements SetListInterface */ public const SYMFONY_CONSTRUCTOR_INJECTION = __DIR__ . '/../../config/sets/symfony/symfony-constructor-injection.php'; /** + * @deprecated Use ->withAttributesSets(symfony: true) in rector.php config instead * @var string */ public const ANNOTATIONS_TO_ATTRIBUTES = __DIR__ . '/../../config/sets/symfony/annotations-to-attributes.php'; diff --git a/vendor/rector/rector-symfony/src/Set/TwigSetList.php b/vendor/rector/rector-symfony/src/Set/TwigSetList.php index 2df51128f4a..fbcf59e9813 100644 --- a/vendor/rector/rector-symfony/src/Set/TwigSetList.php +++ b/vendor/rector/rector-symfony/src/Set/TwigSetList.php @@ -3,11 +3,10 @@ declare (strict_types=1); namespace Rector\Symfony\Set; -use Rector\Set\Contract\SetListInterface; /** * @api */ -final class TwigSetList implements SetListInterface +final class TwigSetList { /** * @var string diff --git a/vendor/scoper-autoload.php b/vendor/scoper-autoload.php index 649b05f47ac..33503005938 100644 --- a/vendor/scoper-autoload.php +++ b/vendor/scoper-autoload.php @@ -30,7 +30,7 @@ function humbug_phpscoper_expose_class($exposed, $prefixed) { } } humbug_phpscoper_expose_class('AutoloadIncluder', 'RectorPrefix202411\AutoloadIncluder'); -humbug_phpscoper_expose_class('ComposerAutoloaderInit4d4c37b878ce01a3ff505ba7def6aac7', 'RectorPrefix202411\ComposerAutoloaderInit4d4c37b878ce01a3ff505ba7def6aac7'); +humbug_phpscoper_expose_class('ComposerAutoloaderInit58d677395c7d7c6a1b0f093c876515de', 'RectorPrefix202411\ComposerAutoloaderInit58d677395c7d7c6a1b0f093c876515de'); humbug_phpscoper_expose_class('Product', 'RectorPrefix202411\Product'); humbug_phpscoper_expose_class('SomeTest', 'RectorPrefix202411\SomeTest');