diff --git a/config/sets/symfony/composer-based.php b/config/sets/symfony/composer-based.php index a3fc308b..62b414c2 100644 --- a/config/sets/symfony/composer-based.php +++ b/config/sets/symfony/composer-based.php @@ -2,7 +2,44 @@ declare(strict_types=1); +use PhpParser\Node\Scalar\String_; +use PHPStan\Type\ArrayType; +use PHPStan\Type\BooleanType; +use PHPStan\Type\Constant\ConstantBooleanType; +use PHPStan\Type\FloatType; +use PHPStan\Type\IntegerType; +use PHPStan\Type\IterableType; +use PHPStan\Type\MixedType; +use PHPStan\Type\NullType; +use PHPStan\Type\ObjectType; +use PHPStan\Type\ObjectWithoutClassType; +use PHPStan\Type\StringType; +use PHPStan\Type\UnionType; +use PHPStan\Type\VoidType; +use Rector\Arguments\NodeAnalyzer\ArgumentAddingScope; +use Rector\Arguments\Rector\ClassMethod\ArgumentAdderRector; +use Rector\Arguments\Rector\ClassMethod\ReplaceArgumentDefaultValueRector; +use Rector\Arguments\ValueObject\ArgumentAdder; +use Rector\Arguments\ValueObject\ReplaceArgumentDefaultValue; use Rector\Config\RectorConfig; +use Rector\Php80\Rector\Class_\AnnotationToAttributeRector; +use Rector\Php80\ValueObject\AnnotationToAttribute; +use Rector\Removing\Rector\ClassMethod\ArgumentRemoverRector; +use Rector\Removing\ValueObject\ArgumentRemover; +use Rector\Renaming\Rector\Class_\RenameAttributeRector; +use Rector\Renaming\Rector\ClassConstFetch\RenameClassConstFetchRector; +use Rector\Renaming\Rector\FuncCall\RenameFunctionRector; +use Rector\Renaming\Rector\MethodCall\RenameMethodRector; +use Rector\Renaming\Rector\Name\RenameClassRector; +use Rector\Renaming\Rector\PropertyFetch\RenamePropertyRector; +use Rector\Renaming\Rector\String_\RenameStringRector; +use Rector\Renaming\ValueObject\MethodCallRename; +use Rector\Renaming\ValueObject\MethodCallRenameWithArrayKey; +use Rector\Renaming\ValueObject\RenameAttribute; +use Rector\Renaming\ValueObject\RenameClassAndConstFetch; +use Rector\Renaming\ValueObject\RenameClassConstFetch; +use Rector\Renaming\ValueObject\RenameProperty; +use Rector\StaticTypeMapper\ValueObject\Type\SimpleStaticType; use Rector\Symfony\CodeQuality\Rector\AttributeGroup\SingleConditionSecurityAttributeToIsGrantedRector; use Rector\Symfony\CodeQuality\Rector\Class_\SplitAndSecurityAttributeToIsGrantedRector; use Rector\Symfony\Symfony42\Rector\New_\RootNodeTreeBuilderRector; @@ -18,11 +55,28 @@ use Rector\Symfony\Symfony52\Rector\MethodCall\ValidatorBuilderEnableAnnotationMappingRector; use Rector\Symfony\Symfony52\Rector\New_\PropertyAccessorCreationBooleanToFlagsRector; use Rector\Symfony\Symfony52\Rector\StaticCall\BinaryFileResponseCreateToNewInstanceRector; +use Rector\Symfony\Symfony60\Rector\FuncCall\ReplaceServiceArgumentRector; use Rector\Symfony\Symfony61\Rector\StaticPropertyFetch\ErrorNamesPropertyToConstantRector; use Rector\Symfony\Symfony62\Rector\Class_\SecurityAttributeToIsGrantedAttributeRector; use Rector\Symfony\Symfony62\Rector\ClassMethod\ClassMethod\ArgumentValueResolverToValueResolverRector; use Rector\Symfony\Symfony63\Rector\Class_\ParamAndEnvAttributeRector; use Rector\Symfony\Symfony63\Rector\Class_\SignalableCommandInterfaceReturnTypeRector; +use Rector\Symfony\ValueObject\ReplaceServiceArgument; +use Rector\Transform\Rector\Attribute\AttributeKeyToClassConstFetchRector; +use Rector\Transform\Rector\ClassMethod\WrapReturnRector; +use Rector\Transform\Rector\StaticCall\StaticCallToNewRector; +use Rector\Transform\ValueObject\AttributeKeyToClassConstFetch; +use Rector\Transform\ValueObject\StaticCallToNew; +use Rector\Transform\ValueObject\WrapReturn; +use Rector\TypeDeclaration\Rector\ClassMethod\AddParamTypeDeclarationRector; +use Rector\TypeDeclaration\Rector\ClassMethod\AddReturnTypeDeclarationRector; +use Rector\TypeDeclaration\ValueObject\AddParamTypeDeclaration; +use Rector\TypeDeclaration\ValueObject\AddReturnTypeDeclaration; +use Rector\Util\Reflection\PrivatesAccessor; +use Rector\ValueObject\MethodName; +use Rector\ValueObject\Visibility; +use Rector\Visibility\Rector\ClassMethod\ChangeMethodVisibilityRector; +use Rector\Visibility\ValueObject\ChangeMethodVisibility; /** * Rules bound to the Symfony package version installed in the analysed project, @@ -31,6 +85,7 @@ * Thanks to the composer package constraint, these rules can be registered once here, instead of being * repeated in every Symfony version set to cover a direct upgrade from an older version. */ + return static function (RectorConfig $rectorConfig): void { // each of these rules declares the exact Symfony package and the version its target API was added in, // @see ComposerPackageConstraintInterface @@ -73,4 +128,3260 @@ ParamAndEnvAttributeRector::class, SignalableCommandInterfaceReturnTypeRector::class, ]); + + // shared types used by the configuration below + $arrayType = new ArrayType(new MixedType(), new MixedType()); + $browserKitResponseType = new ObjectType('Symfony\Component\BrowserKit\Response'); + $commandType = new ObjectType('Symfony\Component\Console\Command\Command'); + $configurationType = new ObjectType('Symfony\Component\Config\Definition\ConfigurationInterface'); + $httpFoundationResponseType = new ObjectType('Symfony\Component\HttpFoundation\Response'); + $iterableType = new IterableType(new MixedType(), new MixedType()); + $nullableArrayType = new UnionType([new NullType(), $arrayType]); + $nullableBooleanType = new UnionType([new NullType(), new BooleanType()]); + $nullableStringType = new UnionType([new NullType(), new StringType()]); + $nullableValueGuessType = new UnionType([new NullType(), new ObjectType('Symfony\Component\Form\Guess\ValueGuess')]); + $routeCollectionType = new ObjectType('Symfony\Component\Routing\RouteCollection'); + $scalarTypes = [$arrayType, new BooleanType(), new StringType(), new IntegerType(), new FloatType(), new NullType()]; + $typeGuessType = new ObjectType('Symfony\Component\Form\Guess\TypeGuess'); + + $scalarArrayObjectUnionedTypes = [...$scalarTypes, new ObjectType('ArrayObject')]; + + // cannot be crated with \PHPStan\Type\UnionTypeHelper::sortTypes() as ObjectType requires a class reflection we do not have here + $unionTypeReflectionClass = new ReflectionClass(UnionType::class); + + /** @var UnionType $scalarArrayObjectUnionType */ + $scalarArrayObjectUnionType = $unionTypeReflectionClass->newInstanceWithoutConstructor(); + + $privatesAccessor = new PrivatesAccessor(); + $privatesAccessor->setPrivateProperty($scalarArrayObjectUnionType, 'types', $scalarArrayObjectUnionedTypes); + + // symfony/bridge-swift-mailer 3.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + // swift mailer + 'Symfony\Bridge\Swiftmailer\DataCollector\MessageDataCollector' => 'Symfony\Bundle\SwiftmailerBundle\DataCollector\MessageDataCollector', + ], 'symfony/bridge-swift-mailer', '>=3.0'); + + // symfony/class-loader 3.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + 'Symfony\Component\ClassLoader\UniversalClassLoader\UniversalClassLoader' => 'Symfony\Component\ClassLoader\ClassLoader', + ], 'symfony/class-loader', '>=3.0'); + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + new MethodCallRename( + 'Symfony\Component\ClassLoader\UniversalClassLoader\UniversalClassLoader', + 'registerNamespaces', + 'addPrefixes' + ), + new MethodCallRename( + 'Symfony\Component\ClassLoader\UniversalClassLoader\UniversalClassLoader', + 'registerPrefixes', + 'addPrefixes' + ), + new MethodCallRename( + 'Symfony\Component\ClassLoader\UniversalClassLoader\UniversalClassLoader', + 'registerNamespace', + 'addPrefix' + ), + new MethodCallRename( + 'Symfony\Component\ClassLoader\UniversalClassLoader\UniversalClassLoader', + 'registerPrefix', + 'addPrefix' + ), + new MethodCallRename( + 'Symfony\Component\ClassLoader\UniversalClassLoader\UniversalClassLoader', + 'getNamespaces', + 'getPrefixes' + ), + new MethodCallRename( + 'Symfony\Component\ClassLoader\UniversalClassLoader\UniversalClassLoader', + 'getNamespaceFallbacks', + 'getFallbackDirs' + ), + new MethodCallRename( + 'Symfony\Component\ClassLoader\UniversalClassLoader\UniversalClassLoader', + 'getPrefixFallbacks', + 'getFallbackDirs' + ), + ], 'symfony/class-loader', '>=3.0'); + + // symfony/console 3.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + // console + 'Symfony\Component\Console\Helper\ProgressHelper' => 'Symfony\Component\Console\Helper\ProgressBar', + ], 'symfony/console', '>=3.0'); + + // symfony/form 3.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassConstFetchRector::class, [ + new RenameClassConstFetch('Symfony\Component\Form\FormEvents', 'PRE_BIND', 'PRE_SUBMIT'), + new RenameClassConstFetch('Symfony\Component\Form\FormEvents', 'BIND', 'SUBMIT'), + new RenameClassConstFetch('Symfony\Component\Form\FormEvents', 'POST_BIND', 'POST_SUBMIT'), + new RenameClassConstFetch( + 'Symfony\Component\Form\Extension\Core\DataTransformer', + 'ROUND_HALFEVEN', + 'ROUND_HALF_EVEN' + ), + new RenameClassConstFetch( + 'Symfony\Component\Form\Extension\Core\DataTransformer', + 'ROUND_HALFUP', + 'ROUND_HALF_UP' + ), + new RenameClassConstFetch( + 'Symfony\Component\Form\Extension\Core\DataTransformer', + 'ROUND_HALFDOWN', + 'ROUND_HALF_DOWN' + ), + ], 'symfony/form', '>=3.0'); + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + 'Symfony\Component\Form\Util\VirtualFormAwareIterator' => 'Symfony\Component\Form\Util\InheritDataAwareIterator', + 'Symfony\Component\Form\Tests\Extension\Core\Type\TypeTestCase' => 'Symfony\Component\Form\Test\TypeTestCase', + 'Symfony\Component\Form\Tests\FormIntegrationTestCase' => 'Symfony\Component\Form\Test\FormIntegrationTestCase', + 'Symfony\Component\Form\Tests\FormPerformanceTestCase' => 'Symfony\Component\Form\Test\FormPerformanceTestCase', + 'Symfony\Component\Form\Extension\Core\ChoiceList\ChoiceListInterface' => 'Symfony\Component\Form\ChoiceList\ChoiceListInterface', + 'Symfony\Component\Form\Extension\Core\View\ChoiceView' => 'Symfony\Component\Form\ChoiceList\View\ChoiceView', + 'Symfony\Component\Form\Extension\Csrf\CsrfProvider\CsrfProviderInterface' => 'Symfony\Component\Security\Csrf\CsrfTokenManagerInterface', + 'Symfony\Component\Form\Extension\Core\ChoiceList\ChoiceList' => 'Symfony\Component\Form\ChoiceList\ArrayChoiceList', + 'Symfony\Component\Form\Extension\Core\ChoiceList\LazyChoiceList' => 'Symfony\Component\Form\ChoiceList\LazyChoiceList', + 'Symfony\Component\Form\Extension\Core\ChoiceList\ObjectChoiceList' => 'Symfony\Component\Form\ChoiceList\ArrayChoiceList', + 'Symfony\Component\Form\Extension\Core\ChoiceList\SimpleChoiceList' => 'Symfony\Component\Form\ChoiceList\ArrayChoiceList', + 'Symfony\Component\Form\ChoiceList\ArrayKeyChoiceList' => 'Symfony\Component\Form\ChoiceList\ArrayChoiceList', + ], 'symfony/form', '>=3.0'); + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + new MethodCallRename('Symfony\Component\Form\AbstractType', 'getName', 'getBlockPrefix'), + new MethodCallRename('Symfony\Component\Form\FormTypeInterface', 'getName', 'getBlockPrefix'), + + new MethodCallRename('Symfony\Component\Form\FormTypeInterface', 'setDefaultOptions', 'configureOptions'), + new MethodCallRename('Symfony\Component\Form\ResolvedFormTypeInterface', 'getName', 'getBlockPrefix'), + new MethodCallRename( + 'Symfony\Component\Form\AbstractTypeExtension', + 'setDefaultOptions', + 'configureOptions' + ), + new MethodCallRename('Symfony\Component\Form\Form', 'bind', 'submit'), + new MethodCallRename('Symfony\Component\Form\Form', 'isBound', 'isSubmitted'), + ], 'symfony/form', '>=3.0'); + + // symfony/http-kernel 3.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + 'Symfony\Component\HttpKernel\Debug\ErrorHandler' => 'Symfony\Component\Debug\ErrorHandler', + 'Symfony\Component\HttpKernel\Debug\ExceptionHandler' => 'Symfony\Component\Debug\ExceptionHandler', + 'Symfony\Component\HttpKernel\Exception\FatalErrorException' => 'Symfony\Component\Debug\Exception\FatalErrorException', + 'Symfony\Component\HttpKernel\Exception\FlattenException' => 'Symfony\Component\Debug\Exception\FlattenException', + 'Symfony\Component\HttpKernel\Log\LoggerInterface' => 'Psr\Log\LoggerInterface', + 'Symfony\Component\HttpKernel\DependencyInjection\RegisterListenersPass' => 'Symfony\Component\EventDispatcher\DependencyInjection\RegisterListenersPass', + 'Symfony\Component\HttpKernel\Log\NullLogger' => 'Psr\Log\LoggerInterface', + ], 'symfony/http-kernel', '>=3.0'); + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + new MethodCallRename('Symfony\Component\HttpKernel\Log\LoggerInterface', 'emerg', 'emergency'), + new MethodCallRename('Symfony\Component\HttpKernel\Log\LoggerInterface', 'crit', 'critical'), + new MethodCallRename('Symfony\Component\HttpKernel\Log\LoggerInterface', 'err', 'error'), + new MethodCallRename('Symfony\Component\HttpKernel\Log\LoggerInterface', 'warn', 'warning'), + new MethodCallRename('Symfony\Component\HttpKernel\Log\NullLogger', 'emerg', 'emergency'), + new MethodCallRename('Symfony\Component\HttpKernel\Log\NullLogger', 'crit', 'critical'), + new MethodCallRename('Symfony\Component\HttpKernel\Log\NullLogger', 'err', 'error'), + new MethodCallRename('Symfony\Component\HttpKernel\Log\NullLogger', 'warn', 'warning'), + ], 'symfony/http-kernel', '>=3.0'); + + // symfony/process 3.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + new MethodCallRename('Symfony\Component\Process\Process', 'setStdin', 'setInput'), + new MethodCallRename('Symfony\Component\Process\Process', 'getStdin', 'getInput'), + ], 'symfony/process', '>=3.0'); + + // symfony/property-access 3.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + new MethodCallRename( + 'Symfony\Component\PropertyAccess\PropertyAccess', + 'getPropertyAccessor', + 'createPropertyAccessor' + ), + ], 'symfony/property-access', '>=3.0'); + + // symfony/security 3.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + 'Symfony\Component\Security\Core\Authorization\Voter\AbstractVoter' => 'Symfony\Component\Security\Core\Authorization\Voter\Voter', + ], 'symfony/security', '>=3.0'); + + // symfony/translation 3.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + new MethodCallRename('Symfony\Component\Translation\Dumper\FileDumper', 'format', 'formatCatalogue'), + new MethodCallRename('Symfony\Component\Translation\Translator', 'getMessages', 'getCatalogue'), + ], 'symfony/translation', '>=3.0'); + + // symfony/twig-bundle 3.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + 'Symfony\Bundle\TwigBundle\TwigDefaultEscapingStrategy' => 'Twig_FileExtensionEscapingStrategy', + ], 'symfony/twig-bundle', '>=3.0'); + + // symfony/validator 3.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + 'Symfony\Component\Validator\Constraints\Collection\Optional' => 'Symfony\Component\Validator\Constraints\Optional', + 'Symfony\Component\Validator\Constraints\Collection\Required' => 'Symfony\Component\Validator\Constraints\Required', + 'Symfony\Component\Validator\MetadataInterface' => 'Symfony\Component\Validator\Mapping\MetadataInterface', + 'Symfony\Component\Validator\PropertyMetadataInterface' => 'Symfony\Component\Validator\Mapping\PropertyMetadataInterface', + 'Symfony\Component\Validator\PropertyMetadataContainerInterface' => 'Symfony\Component\Validator\Mapping\ClassMetadataInterface', + 'Symfony\Component\Validator\ClassBasedInterface' => 'Symfony\Component\Validator\Mapping\ClassMetadataInterface', + 'Symfony\Component\Validator\Mapping\ElementMetadata' => 'Symfony\Component\Validator\Mapping\GenericMetadata', + 'Symfony\Component\Validator\ExecutionContextInterface' => 'Symfony\Component\Validator\Context\ExecutionContextInterface', + 'Symfony\Component\Validator\Mapping\ClassMetadataFactory' => 'Symfony\Component\Validator\Mapping\Factory\LazyLoadingMetadataFactory', + 'Symfony\Component\Validator\Mapping\MetadataFactoryInterface' => 'Symfony\Component\Validator\Mapping\Factory\MetadataFactoryInterface', + ], 'symfony/validator', '>=3.0'); + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + new MethodCallRename( + 'Symfony\Component\Validator\ConstraintViolationInterface', + 'getMessageParameters', + 'getParameters' + ), + new MethodCallRename( + 'Symfony\Component\Validator\ConstraintViolationInterface', + 'getMessagePluralization', + 'getPlural' + ), + new MethodCallRename( + 'Symfony\Component\Validator\ConstraintViolation', + 'getMessageParameters', + 'getParameters' + ), + new MethodCallRename( + 'Symfony\Component\Validator\ConstraintViolation', + 'getMessagePluralization', + 'getPlural' + ), + ], 'symfony/validator', '>=3.0'); + + // symfony/yaml 3.1 + $rectorConfig->ruleWithConfigurationComposerVersionBound(ReplaceArgumentDefaultValueRector::class, [ + new ReplaceArgumentDefaultValue('Symfony\Component\Yaml\Yaml', 'parse', 1, [ + false, + false, + true, + ], 'Symfony\Component\Yaml\Yaml::PARSE_OBJECT_FOR_MAP'), + new ReplaceArgumentDefaultValue('Symfony\Component\Yaml\Yaml', 'parse', 1, [ + false, + true, + ], 'Symfony\Component\Yaml\Yaml::PARSE_OBJECT'), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\Yaml\Yaml', + 'parse', + 1, + true, + 'Symfony\Component\Yaml\Yaml::PARSE_EXCEPTION_ON_INVALID_TYPE' + ), + new ReplaceArgumentDefaultValue('Symfony\Component\Yaml\Yaml', 'parse', 1, false, 0), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\Yaml\Yaml', + 'dump', + 3, + [false, true], + 'Symfony\Component\Yaml\Yaml::DUMP_OBJECT' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\Yaml\Yaml', + 'dump', + 3, + true, + 'Symfony\Component\Yaml\Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE' + ), + ], 'symfony/yaml', '>=3.1'); + + // symfony/dependency-injection 3.2 + $rectorConfig->ruleWithConfigurationComposerVersionBound(ArgumentAdderRector::class, [ + new ArgumentAdder( + 'Symfony\Component\DependencyInjection\ContainerBuilder', + 'addCompilerPass', + 2, + 'priority', + 0 + ), + ], 'symfony/dependency-injection', '>=3.2'); + + // symfony/http-foundation 3.2 + $rectorConfig->ruleWithConfigurationComposerVersionBound(ReplaceArgumentDefaultValueRector::class, [ + new ReplaceArgumentDefaultValue( + 'Symfony\Component\HttpFoundation\Cookie', + '__construct', + 8, + 'lax', + 'Symfony\Component\HttpFoundation\Cookie::SAMESITE_LAX' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\HttpFoundation\Cookie', + '__construct', + 8, + 'strict', + 'Symfony\Component\HttpFoundation\Cookie::SAMESITE_STRICT' + ), + ], 'symfony/http-foundation', '>=3.2'); + + // symfony/console 3.3 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + // console + 'Symfony\Component\Console\Event\ConsoleExceptionEvent' => 'Symfony\Component\Console\Event\ConsoleErrorEvent', + ], 'symfony/console', '>=3.3'); + + // symfony/debug 3.3 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + // debug + 'Symfony\Component\Debug\Exception\ContextErrorException' => 'ErrorException', + ], 'symfony/debug', '>=3.3'); + + // symfony/dependency-injection 3.3 + $rectorConfig->ruleWithConfigurationComposerVersionBound(ArgumentAdderRector::class, [ + new ArgumentAdder( + 'Symfony\Component\DependencyInjection\ContainerBuilder', + 'compile', + 0, + 'resolveEnvPlaceholders', + false + ), + new ArgumentAdder( + 'Symfony\Component\DependencyInjection\ContainerBuilder', + 'addCompilerPass', + 2, + 'priority', + 0 + ), + new ArgumentAdder( + 'Symfony\Component\DependencyInjection\Compiler\ServiceReferenceGraph', + 'connect', + 6, + 'weak', + false + ), + ], 'symfony/dependency-injection', '>=3.3'); + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + 'Symfony\Component\DependencyInjection\DefinitionDecorator' => 'Symfony\Component\DependencyInjection\ChildDefinition', + ], 'symfony/dependency-injection', '>=3.3'); + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + new MethodCallRename('Symfony\Component\DependencyInjection\Container', 'isFrozen', 'isCompiled'), + ], 'symfony/dependency-injection', '>=3.3'); + + // symfony/framework-bundle 3.3 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + # framework bundle + 'Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AddConsoleCommandPass' => 'Symfony\Component\Console\DependencyInjection\AddConsoleCommandPass', + 'Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\SerializerPass' => 'Symfony\Component\Serializer\DependencyInjection\SerializerPass', + 'Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\FormPass' => 'Symfony\Component\Form\DependencyInjection\FormPass', + 'Symfony\Bundle\FrameworkBundle\EventListener\SessionListener' => 'Symfony\Component\HttpKernel\EventListener\SessionListener', + 'Symfony\Bundle\FrameworkBundle\EventListener\TestSessionListener' => 'Symfony\Component\HttpKernel\EventListener\TestSessionListener', + 'Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\ConfigCachePass' => 'Symfony\Component\Config\DependencyInjection\ConfigCachePass', + 'Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\PropertyInfoPass' => 'Symfony\Component\PropertyInfo\DependencyInjection\PropertyInfoPass', + ], 'symfony/framework-bundle', '>=3.3'); + + // symfony/yaml 3.4 + $rectorConfig->ruleWithConfigurationComposerVersionBound(ArgumentRemoverRector::class, [ + new ArgumentRemover( + 'Symfony\Component\Yaml\Yaml', + 'parse', + 2, + ['Symfony\Component\Yaml\Yaml::PARSE_KEYS_AS_STRINGS'] + ), + ], 'symfony/yaml', '>=3.4'); + + // symfony/process 4.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + 'Symfony\Component\Process\ProcessBuilder' => 'Symfony\Component\Process\Process', + ], 'symfony/process', '>=4.0'); + + // symfony/validator 4.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + 'Symfony\Component\Validator\Tests\Constraints\AbstractConstraintValidatorTest' => 'Symfony\Component\Validator\Test\ConstraintValidatorTestCase', + ], 'symfony/validator', '>=4.0'); + + // symfony/console 4.1 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + # https://github.com/symfony/symfony/commit/463f986c28a497571967e37c1314e9911f1ef6ba + new MethodCallRename( + 'Symfony\Component\Console\Helper\TableStyle', + 'setHorizontalBorderChar', + 'setHorizontalBorderChars' + ), + # https://github.com/symfony/symfony/commit/463f986c28a497571967e37c1314e9911f1ef6ba + new MethodCallRename( + 'Symfony\Component\Console\Helper\TableStyle', + 'setVerticalBorderChar', + 'setVerticalBorderChars' + ), + # https://github.com/symfony/symfony/commit/463f986c28a497571967e37c1314e9911f1ef6ba + new MethodCallRename( + 'Symfony\Component\Console\Helper\TableStyle', + 'setCrossingChar', + 'setDefaultCrossingChar' + ), + + # https://github.com/symfony/symfony/commit/463f986c28a497571967e37c1314e9911f1ef6ba + new MethodCallRenameWithArrayKey( + 'Symfony\Component\Console\Helper\TableStyle', + 'getVerticalBorderChar', + # special case to "getVerticalBorderChar" → "getBorderChars()[3]" + 'getBorderChars', + 3 + ), + # https://github.com/symfony/symfony/commit/463f986c28a497571967e37c1314e9911f1ef6ba + new MethodCallRenameWithArrayKey( + 'Symfony\Component\Console\Helper\TableStyle', + 'getHorizontalBorderChar', + 'getBorderChars', + 2 + ), + ], 'symfony/console', '>=4.1'); + + // symfony/framework-bundle 4.1 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + # https://github.com/symfony/symfony/commit/07dd09db59e2f2a86a291d00d978169d9059e307 + 'Symfony\Bundle\FrameworkBundle\DataCollector\RequestDataCollector' => 'Symfony\Component\HttpKernel\DataCollector\RequestDataCollector', + ], 'symfony/framework-bundle', '>=4.1'); + + // symfony/http-foundation 4.1 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + new MethodCallRename('Symfony\Component\HttpFoundation\File\UploadedFile', 'getClientSize', 'getSize'), + ], 'symfony/http-foundation', '>=4.1'); + + // symfony/workflow 4.1 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + 'Symfony\Component\Workflow\SupportStrategy\SupportStrategyInterface' => 'Symfony\Component\Workflow\SupportStrategy\WorkflowSupportStrategyInterface', + 'Symfony\Component\Workflow\SupportStrategy\ClassInstanceSupportStrategy' => 'Symfony\Component\Workflow\SupportStrategy\InstanceOfSupportStrategy', + ], 'symfony/workflow', '>=4.1'); + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + new MethodCallRename('Symfony\Component\Workflow\DefinitionBuilder', 'reset', 'clear'), + new MethodCallRename('Symfony\Component\Workflow\DefinitionBuilder', 'add', 'addWorkflow'), + ], 'symfony/workflow', '>=4.1'); + + // symfony/cache 4.2 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + new MethodCallRename('Symfony\Component\Cache\CacheItem', 'getPreviousTags', 'getMetadata'), + ], 'symfony/cache', '>=4.2'); + + // symfony/dom-crawler 4.2 + $rectorConfig->ruleWithConfigurationComposerVersionBound(ArgumentAdderRector::class, [ + new ArgumentAdder( + 'Symfony\Component\DomCrawler\Crawler', + 'children', + 0, + null, + null, + null, + ArgumentAddingScope::SCOPE_METHOD_CALL + ), + ], 'symfony/dom-crawler', '>=4.2'); + + // symfony/finder 4.2 + $rectorConfig->ruleWithConfigurationComposerVersionBound(ArgumentAdderRector::class, [ + new ArgumentAdder( + 'Symfony\Component\Finder\Finder', + 'sortByName', + 0, + null, + false, + null, + ArgumentAddingScope::SCOPE_METHOD_CALL + ), + ], 'symfony/finder', '>=4.2'); + + // symfony/form 4.2 + $rectorConfig->ruleWithConfigurationComposerVersionBound(AddReturnTypeDeclarationRector::class, [ + new AddReturnTypeDeclaration( + 'Symfony\Component\Form\AbstractTypeExtension', + 'getExtendedTypes', + $iterableType + ), + ], 'symfony/form', '>=4.2'); + $rectorConfig->ruleWithConfigurationComposerVersionBound(ChangeMethodVisibilityRector::class, [ + new ChangeMethodVisibility( + 'Symfony\Component\Form\AbstractTypeExtension', + 'getExtendedTypes', + Visibility::STATIC + ), + ], 'symfony/form', '>=4.2'); + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + new MethodCallRename('Symfony\Component\Form\AbstractTypeExtension', 'getExtendedType', 'getExtendedTypes'), + ], 'symfony/form', '>=4.2'); + $rectorConfig->ruleWithConfigurationComposerVersionBound(WrapReturnRector::class, [ + new WrapReturn('Symfony\Component\Form\AbstractTypeExtension', 'getExtendedTypes', true), + ], 'symfony/form', '>=4.2'); + + // symfony/framework-bundle 4.2 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + # https://github.com/symfony/symfony/commit/a7e319d9e1316e2e18843f8ce15b67a8693e5bf9 + 'Symfony\Bundle\FrameworkBundle\Controller\Controller' => 'Symfony\Bundle\FrameworkBundle\Controller\AbstractController', + # https://github.com/symfony/symfony/commit/744bf0e7ac3ecf240d0bf055cc58f881bb0b3ec0 + ], 'symfony/framework-bundle', '>=4.2'); + + // symfony/http-foundation 4.2 + $rectorConfig->ruleWithConfigurationComposerVersionBound(ReplaceArgumentDefaultValueRector::class, [ + new ReplaceArgumentDefaultValue( + 'Symfony\Component\HttpFoundation\Cookie', + MethodName::CONSTRUCT, + 5, + false, + null + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\HttpFoundation\Cookie', + MethodName::CONSTRUCT, + 8, + null, + 'lax' + ), + + new ReplaceArgumentDefaultValue( + 'Symfony\Component\HttpFoundation\Cookie', + '__construct', + 8, + 'none', + 'Symfony\Component\HttpFoundation\Cookie::SAMESITE_NONE' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\HttpFoundation\Cookie', + 'create', + 8, + 'none', + 'Symfony\Component\HttpFoundation\Cookie::SAMESITE_NONE' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\HttpFoundation\Cookie', + 'create', + 8, + 'lax', + 'Symfony\Component\HttpFoundation\Cookie::SAMESITE_LAX' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\HttpFoundation\Cookie', + 'create', + 8, + 'strict', + 'Symfony\Component\HttpFoundation\Cookie::SAMESITE_STRICT' + ), + ], 'symfony/http-foundation', '>=4.2'); + + // symfony/http-kernel 4.2 + $rectorConfig->ruleWithConfigurationComposerVersionBound(ArgumentRemoverRector::class, [ + new ArgumentRemover( + 'Symfony\Component\HttpKernel\DataCollector\ConfigDataCollector', + MethodName::CONSTRUCT, + 0, + null + ), + new ArgumentRemover( + 'Symfony\Component\HttpKernel\DataCollector\ConfigDataCollector', + MethodName::CONSTRUCT, + 1, + null + ), + ], 'symfony/http-kernel', '>=4.2'); + + // symfony/monolog-bridge 4.2 + $rectorConfig->ruleWithConfigurationComposerVersionBound(ArgumentAdderRector::class, [ + new ArgumentAdder( + 'Symfony\Bridge\Monolog\Processor\DebugProcessor', + 'getLogs', + 0, + null, + null, + null, + ArgumentAddingScope::SCOPE_METHOD_CALL + ), + new ArgumentAdder( + 'Symfony\Bridge\Monolog\Processor\DebugProcessor', + 'countErrors', + 0, + 'default_value', + null, + null, + ArgumentAddingScope::SCOPE_METHOD_CALL + ), + new ArgumentAdder( + 'Symfony\Bridge\Monolog\Logger', + 'getLogs', + 0, + 'default_value', + null, + null, + ArgumentAddingScope::SCOPE_METHOD_CALL + ), + new ArgumentAdder( + 'Symfony\Bridge\Monolog\Logger', + 'countErrors', + 0, + 'default_value', + null, + null, + ArgumentAddingScope::SCOPE_METHOD_CALL + ), + ], 'symfony/monolog-bridge', '>=4.2'); + + // symfony/serializer 4.2 + $rectorConfig->ruleWithConfigurationComposerVersionBound(ArgumentAdderRector::class, [ + new ArgumentAdder( + 'Symfony\Component\Serializer\Normalizer', + 'handleCircularReference', + 1, + null, + null, + null, + ArgumentAddingScope::SCOPE_METHOD_CALL + ), + new ArgumentAdder( + 'Symfony\Component\Serializer\Normalizer', + 'handleCircularReference', + 2, + null, + null, + null, + ArgumentAddingScope::SCOPE_METHOD_CALL + ), + ], 'symfony/serializer', '>=4.2'); + + // symfony/translation 4.2 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + 'Symfony\Component\Translation\TranslatorInterface' => 'Symfony\Contracts\Translation\TranslatorInterface', + ], 'symfony/translation', '>=4.2'); + + // symfony/browser-kit 4.3 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + 'Symfony\Component\BrowserKit\Client' => 'Symfony\Component\BrowserKit\AbstractBrowser', + ], 'symfony/browser-kit', '>=4.3'); + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + new MethodCallRename('Symfony\Component\BrowserKit\Response', 'getStatus', 'getStatusCode'), + ], 'symfony/browser-kit', '>=4.3'); + + // symfony/cache 4.3 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + # https://github.com/symfony/symfony/pull/29236 + 'Symfony\Component\Cache\Traits\ApcuTrait\ApcuCache' => 'Symfony\Component\Cache\Traits\ApcuTrait\ApcuAdapter', + 'Symfony\Component\Cache\Adapter\SimpleCacheAdapter' => 'Symfony\Component\Cache\Adapter\Psr16Adapter', + 'Symfony\Component\Cache\Simple\ArrayCache' => 'Symfony\Component\Cache\Adapter\ArrayAdapter', + 'Symfony\Component\Cache\Simple\ChainCache' => 'Symfony\Component\Cache\Adapter\ChainAdapter', + 'Symfony\Component\Cache\Simple\DoctrineCache' => 'Symfony\Component\Cache\Adapter\DoctrineAdapter', + 'Symfony\Component\Cache\Simple\FilesystemCache' => 'Symfony\Component\Cache\Adapter\FilesystemAdapter', + 'Symfony\Component\Cache\Simple\MemcachedCache' => 'Symfony\Component\Cache\Adapter\MemcachedAdapter', + 'Symfony\Component\Cache\Simple\NullCache' => 'Symfony\Component\Cache\Adapter\NullAdapter', + 'Symfony\Component\Cache\Simple\PdoCache' => 'Symfony\Component\Cache\Adapter\PdoAdapter', + 'Symfony\Component\Cache\Simple\PhpArrayCache' => 'Symfony\Component\Cache\Adapter\PhpArrayAdapter', + 'Symfony\Component\Cache\Simple\PhpFilesCache' => 'Symfony\Component\Cache\Adapter\PhpFilesAdapter', + 'Symfony\Component\Cache\Simple\RedisCache' => 'Symfony\Component\Cache\Adapter\RedisAdapter', + 'Symfony\Component\Cache\Simple\TraceableCache' => 'Symfony\Component\Cache\Adapter\TraceableAdapterCache', + 'Symfony\Component\Cache\Simple\Psr6Cache' => 'Symfony\Component\Cache\Psr16Cache', + ], 'symfony/cache', '>=4.3'); + + // symfony/event-dispatcher 4.3 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + // has lowest priority, have to be last + 'Symfony\Component\EventDispatcher\Event' => 'Symfony\Contracts\EventDispatcher\Event', + ], 'symfony/event-dispatcher', '>=4.3'); + + // symfony/framework-bundle 4.3 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + // assets deprecation + 'Symfony\Bundle\FrameworkBundle\Templating\Helper\AssetsHelper' => 'Symfony\Component\Asset\Packages', + + // templating + 'Symfony\Bundle\FrameworkBundle\Templating\EngineInterface' => 'Symfony\Component\Templating\EngineInterface', + ], 'symfony/framework-bundle', '>=4.3'); + + // symfony/http-foundation 4.3 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + // MimeType + 'Symfony\Component\HttpFoundation\File\MimeType\MimeTypeGuesserInterface' => 'Symfony\Component\Mime\MimeTypesInterface', + 'Symfony\Component\HttpFoundation\File\MimeType\ExtensionGuesserInterface' => 'Symfony\Component\Mime\MimeTypesInterface', + 'Symfony\Component\HttpFoundation\File\MimeType\MimeTypeExtensionGuesser' => 'Symfony\Component\Mime\MimeTypes', + 'Symfony\Component\HttpFoundation\File\MimeType\FileBinaryMimeTypeGuesser' => 'Symfony\Component\Mime\FileBinaryMimeTypeGuesser', + 'Symfony\Component\HttpFoundation\File\MimeType\FileinfoMimeTypeGuesser' => 'Symfony\Component\Mime\FileinfoMimeTypeGuesser', + ], 'symfony/http-foundation', '>=4.3'); + + // symfony/http-kernel 4.3 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + // EventDispatcher + 'Symfony\Component\HttpKernel\Event\FilterControllerArgumentsEvent' => 'Symfony\Component\HttpKernel\Event\ControllerArgumentsEvent', + 'Symfony\Component\HttpKernel\Event\FilterControllerEvent' => 'Symfony\Component\HttpKernel\Event\ControllerEvent', + 'Symfony\Component\HttpKernel\Event\FilterResponseEvent' => 'Symfony\Component\HttpKernel\Event\ResponseEvent', + 'Symfony\Component\HttpKernel\Event\GetResponseEvent' => 'Symfony\Component\HttpKernel\Event\RequestEvent', + 'Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent' => 'Symfony\Component\HttpKernel\Event\ViewEvent', + 'Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent' => 'Symfony\Component\HttpKernel\Event\ExceptionEvent', + 'Symfony\Component\HttpKernel\Event\PostResponseEvent' => 'Symfony\Component\HttpKernel\Event\TerminateEvent', + + // @todo unpack after YAML to PHP migration, Symfony\Component\HttpKernel\Client: Symfony\Component\HttpKernel\HttpKernelBrowser + 'Symfony\Component\HttpKernel\EventListener\TranslatorListener' => 'Symfony\Component\HttpKernel\EventListener\LocaleAwareListener', + ], 'symfony/http-kernel', '>=4.3'); + + // symfony/security-core 4.3 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + # Security + 'Symfony\Component\Security\Core\Encoder\Argon2iPasswordEncoder' => 'Symfony\Component\Security\Core\Encoder\SodiumPasswordEncoder', + 'Symfony\Component\Security\Core\Encoder\BCryptPasswordEncoder' => 'Symfony\Component\Security\Core\Encoder\NativePasswordEncoder', + ], 'symfony/security-core', '>=4.3'); + + // symfony/security-http 4.3 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + new MethodCallRename('Symfony\Component\Security\Http\Firewall', 'handleRequest', 'callListeners'), + ], 'symfony/security-http', '>=4.3'); + + // symfony/workflow 4.3 + $rectorConfig->ruleWithConfigurationComposerVersionBound(ArgumentAdderRector::class, [ + new ArgumentAdder( + 'Symfony\Component\Workflow\MarkingStore\MarkingStoreInterface', + 'setMarking', + 2, + 'context', + [] + ), + ], 'symfony/workflow', '>=4.3'); + + // symfony/dependency-injection 4.4 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameFunctionRector::class, [ + 'Symfony\Component\DependencyInjection\Loader\Configurator\tagged' => 'Symfony\Component\DependencyInjection\Loader\Configurator\tagged_iterator', + ], 'symfony/dependency-injection', '>=4.4'); + + // symfony/http-kernel 4.4 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + // https://github.com/symfony/http-kernel/blob/801b925e308518ddf821ba91952c41ae77c77507/Event/GetResponseForExceptionEvent.php#L55 + new MethodCallRename( + 'Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent', + 'getException', + 'getThrowable' + ), + + // https://github.com/symfony/http-kernel/blob/801b925e308518ddf821ba91952c41ae77c77507/Event/GetResponseForExceptionEvent.php#L67 + new MethodCallRename( + 'Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent', + 'setException', + 'setThrowable' + ), + ], 'symfony/http-kernel', '>=4.4'); + + // symfony/templating 4.4 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + 'Symfony\Component\Templating\EngineInterface' => 'Twig\Environment', + ], 'symfony/templating', '>=4.4'); + + // symfony/web-link 4.4 + $rectorConfig->ruleWithConfigurationComposerVersionBound(ReplaceArgumentDefaultValueRector::class, [ + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'alternate', + 'Symfony\Component\WebLink\Link::REL_ALTERNATE' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'author', + 'Symfony\Component\WebLink\Link::REL_AUTHOR' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'help', + 'Symfony\Component\WebLink\Link::REL_HELP' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'icon', + 'Symfony\Component\WebLink\Link::REL_ICON' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'license', + 'Symfony\Component\WebLink\Link::REL_LICENSE' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'search', + 'Symfony\Component\WebLink\Link::REL_SEARCH' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'stylesheet', + 'Symfony\Component\WebLink\Link::REL_STYLESHEET' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'next', + 'Symfony\Component\WebLink\Link::REL_NEXT' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'prev', + 'Symfony\Component\WebLink\Link::REL_PREV' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'preload', + 'Symfony\Component\WebLink\Link::REL_PRELOAD' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'dns-prefetch', + 'Symfony\Component\WebLink\Link::REL_DNS_PREFETCH' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'preconnect', + 'Symfony\Component\WebLink\Link::REL_PRECONNECT' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'prefetch', + 'Symfony\Component\WebLink\Link::REL_PREFETCH' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'prerender', + 'Symfony\Component\WebLink\Link::REL_PRERENDER' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'mercure', + 'Symfony\Component\WebLink\Link::REL_MERCURE' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + 'withRel', + 0, + 'alternate', + 'Symfony\Component\WebLink\Link::REL_ALTERNATE' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + 'withRel', + 0, + 'author', + 'Symfony\Component\WebLink\Link::REL_AUTHOR' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + 'withRel', + 0, + 'help', + 'Symfony\Component\WebLink\Link::REL_HELP' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + 'withRel', + 0, + 'icon', + 'Symfony\Component\WebLink\Link::REL_ICON' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + 'withRel', + 0, + 'license', + 'Symfony\Component\WebLink\Link::REL_LICENSE' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + 'withRel', + 0, + 'search', + 'Symfony\Component\WebLink\Link::REL_SEARCH' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + 'withRel', + 0, + 'stylesheet', + 'Symfony\Component\WebLink\Link::REL_STYLESHEET' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + 'withRel', + 0, + 'next', + 'Symfony\Component\WebLink\Link::REL_NEXT' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + 'withRel', + 0, + 'prev', + 'Symfony\Component\WebLink\Link::REL_PREV' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + 'withRel', + 0, + 'preload', + 'Symfony\Component\WebLink\Link::REL_PRELOAD' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + 'withRel', + 0, + 'dns-prefetch', + 'Symfony\Component\WebLink\Link::REL_DNS_PREFETCH' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + 'withRel', + 0, + 'preconnect', + 'Symfony\Component\WebLink\Link::REL_PRECONNECT' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + 'withRel', + 0, + 'prefetch', + 'Symfony\Component\WebLink\Link::REL_PREFETCH' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + 'withRel', + 0, + 'prerender', + 'Symfony\Component\WebLink\Link::REL_PRERENDER' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + 'withRel', + 0, + 'mercure', + 'Symfony\Component\WebLink\Link::REL_MERCURE' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + 'withoutRel', + 0, + 'alternate', + 'Symfony\Component\WebLink\Link::REL_ALTERNATE' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + 'withoutRel', + 0, + 'author', + 'Symfony\Component\WebLink\Link::REL_AUTHOR' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + 'withoutRel', + 0, + 'help', + 'Symfony\Component\WebLink\Link::REL_HELP' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + 'withoutRel', + 0, + 'icon', + 'Symfony\Component\WebLink\Link::REL_ICON' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + 'withoutRel', + 0, + 'license', + 'Symfony\Component\WebLink\Link::REL_LICENSE' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + 'withoutRel', + 0, + 'search', + 'Symfony\Component\WebLink\Link::REL_SEARCH' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + 'withoutRel', + 0, + 'stylesheet', + 'Symfony\Component\WebLink\Link::REL_STYLESHEET' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + 'withoutRel', + 0, + 'next', + 'Symfony\Component\WebLink\Link::REL_NEXT' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + 'withoutRel', + 0, + 'prev', + 'Symfony\Component\WebLink\Link::REL_PREV' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + 'withoutRel', + 0, + 'preload', + 'Symfony\Component\WebLink\Link::REL_PRELOAD' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + 'withoutRel', + 0, + 'dns-prefetch', + 'Symfony\Component\WebLink\Link::REL_DNS_PREFETCH' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + 'withoutRel', + 0, + 'preconnect', + 'Symfony\Component\WebLink\Link::REL_PRECONNECT' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + 'withoutRel', + 0, + 'prefetch', + 'Symfony\Component\WebLink\Link::REL_PREFETCH' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + 'withoutRel', + 0, + 'prerender', + 'Symfony\Component\WebLink\Link::REL_PRERENDER' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + 'withoutRel', + 0, + 'mercure', + 'Symfony\Component\WebLink\Link::REL_MERCURE' + ), + ], 'symfony/web-link', '>=4.4'); + + // symfony/console 5.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + new MethodCallRename('Symfony\Component\Console\Application', 'renderException', 'renderThrowable'), + new MethodCallRename('Symfony\Component\Console\Application', 'doRenderException', 'doRenderThrowable'), + ], 'symfony/console', '>=5.0'); + + // symfony/debug 5.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + 'Symfony\Component\Debug\Debug' => 'Symfony\Component\ErrorHandler\Debug', + ], 'symfony/debug', '>=5.0'); + + // symfony/config 5.1 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + new MethodCallRename( + 'Symfony\Component\Config\Definition\BaseNode', + 'getDeprecationMessage', + 'getDeprecation' + ), + ], 'symfony/config', '>=5.1'); + + // symfony/dependency-injection 5.1 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameFunctionRector::class, [ + 'Symfony\Component\DependencyInjection\Loader\Configurator\inline' => 'Symfony\Component\DependencyInjection\Loader\Configurator\inline_service', + 'Symfony\Component\DependencyInjection\Loader\Configurator\ref' => 'Symfony\Component\DependencyInjection\Loader\Configurator\service', + ], 'symfony/dependency-injection', '>=5.1'); + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + new MethodCallRename( + 'Symfony\Component\DependencyInjection\Definition', + 'getDeprecationMessage', + 'getDeprecation' + ), + new MethodCallRename( + 'Symfony\Component\DependencyInjection\Alias', + 'getDeprecationMessage', + 'getDeprecation' + ), + ], 'symfony/dependency-injection', '>=5.1'); + + // symfony/event-dispatcher 5.1 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + 'Symfony\Component\EventDispatcher\LegacyEventDispatcherProxy' => 'Symfony\Component\EventDispatcher\EventDispatcherInterface', + ], 'symfony/event-dispatcher', '>=5.1'); + + // symfony/form 5.1 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassConstFetchRector::class, [ + new RenameClassAndConstFetch( + 'Symfony\Component\Form\Extension\Core\DataTransformer\NumberToLocalizedStringTransformer', + 'ROUND_FLOOR', + 'NumberFormatter', + 'ROUND_FLOOR' + ), + new RenameClassAndConstFetch( + 'Symfony\Component\Form\Extension\Core\DataTransformer\NumberToLocalizedStringTransformer', + 'ROUND_DOWN', + 'NumberFormatter', + 'ROUND_DOWN' + ), + new RenameClassAndConstFetch( + 'Symfony\Component\Form\Extension\Core\DataTransformer\NumberToLocalizedStringTransformer', + 'ROUND_HALF_DOWN', + 'NumberFormatter', + 'ROUND_HALFDOWN' + ), + new RenameClassAndConstFetch( + 'Symfony\Component\Form\Extension\Core\DataTransformer\NumberToLocalizedStringTransformer', + 'ROUND_HALF_EVEN', + 'NumberFormatter', + 'ROUND_HALFEVEN' + ), + new RenameClassAndConstFetch( + 'Symfony\Component\Form\Extension\Core\DataTransformer\NumberToLocalizedStringTransformer', + 'ROUND_HALFUP', + 'NumberFormatter', + 'ROUND_HALFUP' + ), + new RenameClassAndConstFetch( + 'Symfony\Component\Form\Extension\Core\DataTransformer\NumberToLocalizedStringTransformer', + 'ROUND_UP', + 'NumberFormatter', + 'ROUND_UP' + ), + new RenameClassAndConstFetch( + 'Symfony\Component\Form\Extension\Core\DataTransformer\NumberToLocalizedStringTransformer', + 'ROUND_CEILING', + 'NumberFormatter', + 'ROUND_CEILING' + ), + ], 'symfony/form', '>=5.1'); + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + 'Symfony\Component\Form\Extension\Validator\Util\ServerParams' => 'Symfony\Component\Form\Util\ServerParams', + ], 'symfony/form', '>=5.1'); + + // symfony/framework-bundle 5.1 + $rectorConfig->ruleWithConfigurationComposerVersionBound(AddParamTypeDeclarationRector::class, [ + new AddParamTypeDeclaration( + 'Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait', + 'configureRoutes', + 0, + new ObjectType('Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator') + ), + ], 'symfony/framework-bundle', '>=5.1'); + + // symfony/http-foundation 5.1 + $rectorConfig->ruleWithConfigurationComposerVersionBound(ReplaceArgumentDefaultValueRector::class, [ + new ReplaceArgumentDefaultValue( + 'Symfony\Component\HttpFoundation\Cookie', + 'withSameSite', + 0, + 'none', + 'Symfony\Component\HttpFoundation\Cookie::SAMESITE_NONE' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\HttpFoundation\Cookie', + 'withSameSite', + 0, + 'lax', + 'Symfony\Component\HttpFoundation\Cookie::SAMESITE_LAX' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\HttpFoundation\Cookie', + 'withSameSite', + 0, + 'strict', + 'Symfony\Component\HttpFoundation\Cookie::SAMESITE_STRICT' + ), + ], 'symfony/http-foundation', '>=5.1'); + $rectorConfig->ruleWithConfigurationComposerVersionBound(StaticCallToNewRector::class, [ + new StaticCallToNew('Symfony\Component\HttpFoundation\Response', 'create'), + new StaticCallToNew('Symfony\Component\HttpFoundation\JsonResponse', 'create'), + new StaticCallToNew('Symfony\Component\HttpFoundation\RedirectResponse', 'create'), + new StaticCallToNew('Symfony\Component\HttpFoundation\StreamedResponse', 'create'), + ], 'symfony/http-foundation', '>=5.1'); + + // symfony/inflector 5.1 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + // @see https://github.com/symfony/symfony/pull/35092 + 'Symfony\Component\Inflector' => 'Symfony\Component\String\Inflector\InflectorInterface', + ], 'symfony/inflector', '>=5.1'); + + // symfony/notifier 5.1 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + // @see https://github.com/symfony/symfony/pull/35828 + new MethodCallRename('Symfony\Component\Notifier\Bridge\Slack\Slack', 'channel', 'recipient'), + ], 'symfony/notifier', '>=5.1'); + + // symfony/security-core 5.1 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameStringRector::class, [ + // @see https://github.com/symfony/symfony/pull/35858 + 'ROLE_PREVIOUS_ADMIN' => 'IS_IMPERSONATOR', + ], 'symfony/security-core', '>=5.1'); + + // symfony/mime 5.2 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + # https://github.com/symfony/symfony/blob/5.x/UPGRADE-5.2.md#mime + new MethodCallRename('Symfony\Component\Mime\Address', 'fromString', 'create'), + ], 'symfony/mime', '>=5.2'); + + // symfony/notifier 5.2 + $rectorConfig->ruleWithConfigurationComposerVersionBound(AddParamTypeDeclarationRector::class, [ + new AddParamTypeDeclaration( + 'Symfony\Component\Notifier\NotifierInterface', + 'send', + 1, + new ObjectType('Symfony\Component\Notifier\Recipient\RecipientInterface') + ), + new AddParamTypeDeclaration( + 'Symfony\Component\Notifier\Notifier', + 'getChannels', + 1, + new ObjectType('Symfony\Component\Notifier\Recipient\RecipientInterface') + ), + new AddParamTypeDeclaration( + 'Symfony\Component\Notifier\Channel\ChannelInterface', + 'notify', + 1, + new ObjectType('Symfony\Component\Notifier\Recipient\RecipientInterface') + ), + new AddParamTypeDeclaration( + 'Symfony\Component\Notifier\Channel\ChannelInterface', + 'supports', + 1, + new ObjectType('Symfony\Component\Notifier\Recipient\RecipientInterface') + ), + new AddParamTypeDeclaration( + 'Symfony\Component\Notifier\Notification\ChatNotificationInterface', + 'asChatMessage', + 0, + new ObjectType('Symfony\Component\Notifier\Recipient\RecipientInterface') + ), + new AddParamTypeDeclaration( + 'Symfony\Component\Notifier\Notification\EmailNotificationInterface', + 'asEmailMessage', + 0, + new ObjectType('Symfony\Component\Notifier\Recipient\EmailRecipientInterface') + ), + new AddParamTypeDeclaration( + 'Symfony\Component\Notifier\Notification\SmsNotificationInterface', + 'asSmsMessage', + 0, + new ObjectType('Symfony\Component\Notifier\Recipient\SmsRecipientInterface') + ), + ], 'symfony/notifier', '>=5.2'); + + // symfony/security-core 5.2 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + new MethodCallRename( + 'Symfony\Component\Security\Core\Authentication\Token\PreAuthenticatedToken', + 'setProviderKey', + 'setFirewallName' + ), + new MethodCallRename( + 'Symfony\Component\Security\Core\Authentication\Token\PreAuthenticatedToken', + 'getProviderKey', + 'getFirewallName' + ), + new MethodCallRename( + 'Symfony\Component\Security\Core\Authentication\Token\RememberMeToken', + 'setProviderKey', + 'setFirewallName' + ), + new MethodCallRename( + 'Symfony\Component\Security\Core\Authentication\Token\RememberMeToken', + 'getProviderKey', + 'getFirewallName' + ), + new MethodCallRename( + 'Symfony\Component\Security\Core\Authentication\Token\SwitchUserToken', + 'setProviderKey', + 'setFirewallName' + ), + new MethodCallRename( + 'Symfony\Component\Security\Core\Authentication\Token\SwitchUserToken', + 'getProviderKey', + 'getFirewallName' + ), + new MethodCallRename( + 'Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken', + 'setProviderKey', + 'setFirewallName' + ), + new MethodCallRename( + 'Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken', + 'getProviderKey', + 'getFirewallName' + ), + ], 'symfony/security-core', '>=5.2'); + + // symfony/security-http 5.2 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassConstFetchRector::class, [ + new RenameClassAndConstFetch( + 'Symfony\Component\Security\Http\Firewall\AccessListener', + 'PUBLIC_ACCESS', + 'Symfony\Component\Security\Core\Authorization\Voter\AuthenticatedVoter', + 'PUBLIC_ACCESS' + ), + ], 'symfony/security-http', '>=5.2'); + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + new MethodCallRename( + 'Symfony\Component\Security\Http\Authentication\DefaultAuthenticationSuccessHandler', + 'setProviderKey', + 'setFirewallName' + ), + new MethodCallRename( + 'Symfony\Component\Security\Http\Authentication\DefaultAuthenticationSuccessHandler', + 'getProviderKey', + 'getFirewallName' + ), + ], 'symfony/security-http', '>=5.2'); + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenamePropertyRector::class, [ + new RenameProperty( + 'Symfony\Component\Security\Http\RememberMe\AbstractRememberMeServices', + 'providerKey', + 'firewallName' + ), + ], 'symfony/security-http', '>=5.2'); + + // symfony/validator 5.2 + $rectorConfig->ruleWithConfigurationComposerVersionBound(AttributeKeyToClassConstFetchRector::class, [ + new AttributeKeyToClassConstFetch( + 'Symfony\\Component\\Validator\\Constraints\\Email', + 'mode', + 'Symfony\\Component\\Validator\\Constraints\\Email', + [ + 'strict' => 'VALIDATION_MODE_STRICT', + 'loose' => 'VALIDATION_MODE_LOOSE', + 'html5' => 'VALIDATION_MODE_HTML5', + ] + ), + ], 'symfony/validator', '>=5.2'); + + // symfony/console 5.3 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + new MethodCallRename('Symfony\Component\Console\Helper\Helper', 'strlen', 'width'), + new MethodCallRename( + 'Symfony\Component\Console\Helper\Helper', + 'strlenWithoutDecoration', + 'removeDecoration', + ), + ], 'symfony/console', '>=5.3'); + + // symfony/form 5.3 + $rectorConfig->ruleWithConfigurationComposerVersionBound(AddParamTypeDeclarationRector::class, [ + // @see https://github.com/symfony/symfony/commit/ce77be2507631cd12e4ca37510dab37f4c2b759a + new AddParamTypeDeclaration( + 'Symfony\Component\Form\DataMapperInterface', + 'mapFormsToData', + 0, + new ObjectType(Traversable::class) + ), + // @see https://github.com/symfony/symfony/commit/ce77be2507631cd12e4ca37510dab37f4c2b759a + new AddParamTypeDeclaration( + 'Symfony\Component\Form\DataMapperInterface', + 'mapDataToForms', + 1, + new ObjectType(Traversable::class) + ), + ], 'symfony/form', '>=5.3'); + + // symfony/http-foundation 5.3 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + // @see https://github.com/symfony/symfony/pull/40536 + new MethodCallRename( + 'Symfony\Component\HttpFoundation\RequestStack', + 'getMasterRequest', + 'getMainRequest', + ), + ], 'symfony/http-foundation', '>=5.3'); + + // symfony/http-kernel 5.3 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassConstFetchRector::class, [ + // @see https://github.com/symfony/symfony/pull/40536 + new RenameClassConstFetch( + 'Symfony\Component\HttpKernel\HttpKernelInterface', + 'MASTER_REQUEST', + 'MAIN_REQUEST' + ), + ], 'symfony/http-kernel', '>=5.3'); + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + new MethodCallRename('Symfony\Component\HttpKernel\Event\KernelEvent', 'isMasterRequest', 'isMainRequest'), + ], 'symfony/http-kernel', '>=5.3'); + + // symfony/security-core 5.3 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + 'Symfony\Component\Security\Core\Exception\UsernameNotFoundException' => 'Symfony\Component\Security\Core\Exception\UserNotFoundException', + // @see https://github.com/symfony/symfony/pull/39802 + 'Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface' => 'Symfony\Component\PasswordHasher\Hasher\PasswordHasherFactoryInterface', + 'Symfony\Component\Security\Core\Encoder\MessageDigestPasswordEncoder' => 'Symfony\Component\PasswordHasher\Hasher\MessageDigestPasswordHasher', + 'Symfony\Component\Security\Core\Encoder\MigratingPasswordEncoder' => 'Symfony\Component\PasswordHasher\Hasher\MigratingPasswordHasher', + 'Symfony\Component\Security\Core\Encoder\NativePasswordEncoder' => 'Symfony\Component\PasswordHasher\Hasher\NativePasswordHasher', + 'Symfony\Component\Security\Core\Encoder\PasswordEncoderInterface' => 'Symfony\Component\PasswordHasher\PasswordHasherInterface', + 'Symfony\Component\Security\Core\Encoder\Pbkdf2PasswordEncoder' => 'Symfony\Component\PasswordHasher\Hasher\Pbkdf2PasswordHasher', + 'Symfony\Component\Security\Core\Encoder\PlaintextPasswordEncoder' => 'Symfony\Component\PasswordHasher\Hasher\PlaintextPasswordHasher', + 'Symfony\Component\Security\Core\Encoder\SelfSaltingEncoderInterface' => 'Symfony\Component\PasswordHasher\LegacyPasswordHasherInterface', + 'Symfony\Component\Security\Core\Encoder\SodiumPasswordEncoder' => 'Symfony\Component\PasswordHasher\Hasher\SodiumPasswordHasher', + 'Symfony\Component\Security\Core\Encoder\UserPasswordEncoder' => 'Symfony\Component\PasswordHasher\Hasher\UserPasswordHasher', + 'Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface' => 'Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface', + ], 'symfony/security-core', '>=5.3'); + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + new MethodCallRename( + 'Symfony\Component\Security\Core\Authentication\Token\TokenInterface', + 'getUsername', + 'getUserIdentifier', + ), + new MethodCallRename( + 'Symfony\Component\Security\Core\Exception\UsernameNotFoundException', + 'getUsername', + 'getUserIdentifier' + ), + new MethodCallRename( + 'Symfony\Component\Security\Core\Exception\UsernameNotFoundException', + 'setUsername', + 'setUserIdentifier' + ), + new MethodCallRename( + 'Symfony\Component\Security\Core\Authentication\RememberMe\PersistentTokenInterface', + 'getUsername', + 'getUserIdentifier' + ), + ], 'symfony/security-core', '>=5.3'); + + // symfony/security-mailer 5.3 + $rectorConfig->ruleWithConfigurationComposerVersionBound(AddReturnTypeDeclarationRector::class, [ + new AddReturnTypeDeclaration( + 'Symfony\Component\Mailer\Transport\AbstractTransportFactory', + 'getEndpoint', + new StringType(), + ), + ], 'symfony/security-mailer', '>=5.3'); + + // symfony/cache 5.4 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + // @see https://github.com/symfony/symfony/pull/42965 + 'Symfony\Component\Cache\Adapter\DoctrineAdapter' => 'Doctrine\Common\Cache\Psr6\CacheAdapter', + ], 'symfony/cache', '>=5.4'); + + // symfony/http-kernel 5.4 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + // @see https://github.com/symfony/symfony/pull/45615 + 'Symfony\Component\HttpKernel\EventListener\AbstractTestSessionListener' => 'Symfony\Component\HttpKernel\EventListener\AbstractSessionListener', + 'Symfony\Component\HttpKernel\EventListener\TestSessionListener' => 'Symfony\Component\HttpKernel\EventListener\SessionListener', + ], 'symfony/http-kernel', '>=5.4'); + + // symfony/notifier 5.4 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + // @see https://github.com/symfony/symfony/pull/44271 + 'Symfony\Component\Notifier\Bridge\Nexmo\NexmoTransportFactory' => 'Symfony\Component\Notifier\Bridge\Vonage\VonageTransportFactory', + 'Symfony\Component\Notifier\Bridge\Nexmo\NexmoTransport' => 'Symfony\Component\Notifier\Bridge\Vonage\VonageTransport', + ], 'symfony/notifier', '>=5.4'); + + // symfony/security-bundle 5.4 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + // @see https://github.com/symfony/symfony/pull/42582 + new MethodCallRename( + 'Symfony\Bundle\SecurityBundle\Security\FirewallConfig', + 'getListeners', + 'getAuthenticators' + ), + // @see https://github.com/symfony/symfony/pull/41754 + new MethodCallRename( + 'Symfony\Bundle\SecurityBundle\DependencyInjection\SecurityExtension', + 'addSecurityListenerFactory', + 'addAuthenticatorFactory' + ), + ], 'symfony/security-bundle', '>=5.4'); + + // symfony/security-core 5.4 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassConstFetchRector::class, [ + new RenameClassAndConstFetch( + 'Symfony\Component\Security\Core\AuthenticationEvents', + 'AUTHENTICATION_SUCCESS', + 'Symfony\Component\Security\Core\Event\AuthenticationSuccessEvent', + 'class' + ), + new RenameClassAndConstFetch( + 'Symfony\Component\Security\Core\AuthenticationEvents', + 'AUTHENTICATION_FAILURE', + 'Symfony\Component\Security\Core\Event\AuthenticationFailureEvent', + 'class' + ), + // @see https://github.com/symfony/symfony/pull/42510 + new RenameClassConstFetch( + 'Symfony\Component\Security\Core\Authorization\Voter\AuthenticatedVoter', + 'IS_ANONYMOUS', + 'PUBLIC_ACCESS' + ), + new RenameClassConstFetch( + 'Symfony\Component\Security\Core\Authorization\Voter\AuthenticatedVoter', + 'IS_AUTHENTICATED_ANONYMOUSLY', + 'PUBLIC_ACCESS' + ), + ], 'symfony/security-core', '>=5.4'); + + // symfony/security-http 5.4 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + // @see https://github.com/symfony/symfony/pull/42050 + 'Symfony\Component\Security\Http\Event\DeauthenticatedEvent' => 'Symfony\Component\Security\Http\Event\TokenDeauthenticatedEvent', + ], 'symfony/security-http', '>=5.4'); + + // symfony/validator 5.4 + $rectorConfig->ruleWithConfigurationComposerVersionBound(AnnotationToAttributeRector::class, [ + new AnnotationToAttribute('Symfony\Component\Validator\Constraints\All'), + new AnnotationToAttribute('Symfony\Component\Validator\Constraints\Collection'), + new AnnotationToAttribute('Symfony\Component\Validator\Constraints\AtLeastOneOf'), + new AnnotationToAttribute('Symfony\Component\Validator\Constraints\Sequentially'), + ], 'symfony/validator', '>=5.4'); + + // symfony/browser-kit 6.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(AddReturnTypeDeclarationRector::class, [ + new AddReturnTypeDeclaration( + 'Symfony\Component\BrowserKit\AbstractBrowser', + 'doRequestInProcess', + new ObjectWithoutClassType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\BrowserKit\AbstractBrowser', + 'doRequest', + new ObjectWithoutClassType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\BrowserKit\AbstractBrowser', + 'filterRequest', + new ObjectWithoutClassType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\BrowserKit\AbstractBrowser', + 'filterResponse', + $browserKitResponseType + ), + ], 'symfony/browser-kit', '>=6.0'); + + // symfony/config 6.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(AddParamTypeDeclarationRector::class, [ + new AddParamTypeDeclaration( + 'Symfony\Component\Config\Loader\LoaderInterface', + 'load', + 0, + new MixedType(true) + ), + new AddParamTypeDeclaration( + 'Symfony\Component\Config\Loader\LoaderInterface', + 'supports', + 0, + new MixedType(true) + ), + ], 'symfony/config', '>=6.0'); + $rectorConfig->ruleWithConfigurationComposerVersionBound(AddReturnTypeDeclarationRector::class, [ + new AddReturnTypeDeclaration('Symfony\Component\Config\Loader\LoaderInterface', 'load', new MixedType()), + new AddReturnTypeDeclaration('Symfony\Component\Config\Loader\Loader', 'import', new MixedType()), + new AddReturnTypeDeclaration( + 'Symfony\Component\Config\Definition\ConfigurationInterface', + 'getConfigTreeBuilder', + new ObjectType('Symfony\Component\Config\Definition\Builder\TreeBuilder') + ), + new AddReturnTypeDeclaration('Symfony\Component\Config\FileLocator', 'locate', new UnionType([ + new StringType(), + $arrayType, + ])), + new AddReturnTypeDeclaration('Symfony\Component\Config\FileLocatorInterface', 'locate', new UnionType([ + new StringType(), + $arrayType, + ])), + new AddReturnTypeDeclaration('Symfony\Component\Config\Loader\FileLoader', 'import', new MixedType()), + new AddReturnTypeDeclaration('Symfony\Component\Config\Loader\Loader', 'import', new MixedType()), + new AddReturnTypeDeclaration('Symfony\Component\Config\Loader\LoaderInterface', 'load', new MixedType()), + new AddReturnTypeDeclaration( + 'Symfony\Component\Config\Loader\LoaderInterface', + 'supports', + new BooleanType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Config\Loader\LoaderInterface', + 'getResolver', + new ObjectType('Symfony\Component\Config\Loader\LoaderResolverInterface') + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Config\ResourceCheckerInterface', + 'supports', + new BooleanType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Config\ResourceCheckerInterface', + 'isFresh', + new BooleanType() + ), + ], 'symfony/config', '>=6.0'); + + // symfony/console 6.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(AddReturnTypeDeclarationRector::class, [ + // @see https://github.com/symfony/symfony/pull/43028/files + new AddReturnTypeDeclaration( + 'Symfony\Component\Console\Helper\HelperInterface', + 'getName', + new StringType() + ), + + new AddReturnTypeDeclaration('Symfony\Component\Console\Application', 'doRun', new IntegerType()), + new AddReturnTypeDeclaration('Symfony\Component\Console\Application', 'getLongVersion', new StringType()), + new AddReturnTypeDeclaration('Symfony\Component\Console\Application', 'add', new UnionType([ + new NullType(), + $commandType, + ])), + new AddReturnTypeDeclaration('Symfony\Component\Console\Application', 'get', $commandType), + new AddReturnTypeDeclaration('Symfony\Component\Console\Application', 'find', $commandType), + new AddReturnTypeDeclaration('Symfony\Component\Console\Application', 'all', $arrayType), + new AddReturnTypeDeclaration('Symfony\Component\Console\Application', 'doRunCommand', new IntegerType()), + new AddReturnTypeDeclaration('Symfony\Component\Console\Command\Command', 'isEnabled', new BooleanType()), + new AddReturnTypeDeclaration('Symfony\Component\Console\Command\Command', 'execute', new IntegerType()), + new AddReturnTypeDeclaration( + 'Symfony\Component\Console\Helper\HelperInterface', + 'getName', + new StringType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Console\Input\InputInterface', + 'getParameterOption', + new MixedType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Console\Input\InputInterface', + 'getArgument', + new MixedType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Console\Input\InputInterface', + 'getOption', + new MixedType() + ), + ], 'symfony/console', '>=6.0'); + + // symfony/contracts 6.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + // @see https://github.com/symfony/symfony/pull/39484 + 'Symfony\Contracts\HttpClient\HttpClientInterface\RemoteJsonManifestVersionStrategy' => 'Symfony\Component\Asset\VersionStrategy\JsonManifestVersionStrategy', + ], 'symfony/contracts', '>=6.0'); + + // symfony/dependency-injection 6.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(AddReturnTypeDeclarationRector::class, [ + new AddReturnTypeDeclaration( + 'Symfony\Component\DependencyInjection\Compiler\AbstractRecursivePass', + 'processValue', + new MixedType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\DependencyInjection\Extension\ConfigurationExtensionInterface', + 'getConfiguration', + new UnionType([new NullType(), $configurationType]) + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\DependencyInjection\Extension\Extension', + 'getXsdValidationBasePath', + new UnionType([new StringType(), new ConstantBooleanType(false)]) + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\DependencyInjection\Extension\Extension', + 'getNamespace', + new StringType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\DependencyInjection\Extension\Extension', + 'getConfiguration', + new UnionType([new NullType(), $configurationType]) + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\DependencyInjection\Extension\ExtensionInterface', + 'getNamespace', + new StringType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\DependencyInjection\Extension\ExtensionInterface', + 'getXsdValidationBasePath', + new UnionType([new StringType(), new ConstantBooleanType(false)]) + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\DependencyInjection\Extension\ExtensionInterface', + 'getAlias', + new StringType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\DependencyInjection\LazyProxy\Instantiator\InstantiatorInterface', + 'instantiateProxy', + new ObjectWithoutClassType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\DependencyInjection\Container', + 'getParameter', + new UnionType($scalarTypes) + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\DependencyInjection\ContainerInterface', + 'getParameter', + new UnionType($scalarTypes) + ), + ], 'symfony/dependency-injection', '>=6.0'); + $rectorConfig->ruleWithConfigurationComposerVersionBound(ReplaceServiceArgumentRector::class, [ + new ReplaceServiceArgument('Psr\Container\ContainerInterface', new String_('service_container')), + new ReplaceServiceArgument( + 'Symfony\Component\DependencyInjection\ContainerInterface', + new String_('service_container') + ), + ], 'symfony/dependency-injection', '>=6.0'); + + // symfony/doctrine-bridge 6.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + // @see https://github.com/symfony/symfony/pull/40403 + new MethodCallRename( + 'Symfony\Bridge\Doctrine\Security\User\UserLoaderInterface', + 'loadUserByUsername', + 'loadUserByIdentifier' + ), + ], 'symfony/doctrine-bridge', '>=6.0'); + + // symfony/event-dispatcher 6.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(AddReturnTypeDeclarationRector::class, [ + new AddReturnTypeDeclaration( + 'Symfony\Component\EventDispatcher\EventSubscriberInterface', + 'getSubscribedEvents', + $arrayType + ), + ], 'symfony/event-dispatcher', '>=6.0'); + + // symfony/expression-language 6.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(AddReturnTypeDeclarationRector::class, [ + new AddReturnTypeDeclaration( + 'Symfony\Component\ExpressionLanguage\ExpressionFunctionProviderInterface', + 'getFunctions', + $arrayType + ), + ], 'symfony/expression-language', '>=6.0'); + + // symfony/form 6.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(AddReturnTypeDeclarationRector::class, [ + new AddReturnTypeDeclaration('Symfony\Component\Form\AbstractExtension', 'loadTypes', $arrayType), + new AddReturnTypeDeclaration( + 'Symfony\Component\Form\AbstractExtension', + 'loadTypeGuesser', + new UnionType([new NullType(), new ObjectType('Symfony\Component\Form\FormTypeGuesserInterface')]) + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Form\AbstractRendererEngine', + 'loadResourceForBlockName', + new BooleanType() + ), + new AddReturnTypeDeclaration('Symfony\Component\Form\AbstractType', 'getBlockPrefix', new StringType()), + new AddReturnTypeDeclaration('Symfony\Component\Form\AbstractType', 'getParent', $nullableStringType), + new AddReturnTypeDeclaration( + 'Symfony\Component\Form\DataTransformerInterface', + 'transform', + new MixedType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Form\DataTransformerInterface', + 'reverseTransform', + new MixedType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Form\FormRendererEngineInterface', + 'renderBlock', + new StringType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Form\FormTypeGuesserInterface', + 'guessType', + new UnionType([new NullType(), $typeGuessType]), + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Form\FormTypeGuesserInterface', + 'guessRequired', + $nullableValueGuessType + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Form\FormTypeGuesserInterface', + 'guessMaxLength', + $nullableValueGuessType + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Form\FormTypeGuesserInterface', + 'guessPattern', + $nullableValueGuessType + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Form\FormTypeInterface', + 'getBlockPrefix', + new StringType() + ), + new AddReturnTypeDeclaration('Symfony\Component\Form\FormTypeInterface', 'getParent', $nullableStringType), + new AddReturnTypeDeclaration('Symfony\Component\Form\FormTypeInterface', 'buildForm', new VoidType()), + new AddReturnTypeDeclaration('Symfony\Component\Form\FormTypeInterface', 'configureOptions', new VoidType()), + ], 'symfony/form', '>=6.0'); + + // symfony/framework-bundle 6.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(AddParamTypeDeclarationRector::class, [ + new AddParamTypeDeclaration( + 'Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait', + 'configureRoutes', + 0, + new ObjectType('Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator'), + ), + ], 'symfony/framework-bundle', '>=6.0'); + + // symfony/http-kernel 6.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(AddReturnTypeDeclarationRector::class, [ + new AddReturnTypeDeclaration( + 'Symfony\Component\HttpKernel\KernelInterface', + 'registerBundles', + $iterableType, + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\HttpKernel\CacheWarmer\CacheWarmerInterface', + 'isOptional', + new BooleanType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\HttpKernel\CacheWarmer\WarmableInterface', + 'warmUp', + $arrayType + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\HttpKernel\DataCollector\DataCollector', + 'getCasters', + $arrayType + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\HttpKernel\DataCollector\DataCollectorInterface', + 'getName', + new StringType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\HttpKernel\HttpCache\HttpCache', + 'forward', + $httpFoundationResponseType + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\HttpKernel\HttpKernelBrowser', + 'doRequest', + $httpFoundationResponseType + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\HttpKernel\HttpKernelBrowser', + 'getScript', + new StringType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\HttpKernel\Log\DebugLoggerInterface', + 'getLogs', + $arrayType + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\HttpKernel\Log\DebugLoggerInterface', + 'countErrors', + new IntegerType() + ), + ], 'symfony/http-kernel', '>=6.0'); + + // symfony/options-resolver 6.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(AddReturnTypeDeclarationRector::class, [ + new AddReturnTypeDeclaration( + 'Symfony\Component\OptionsResolver\OptionsResolver', + 'setNormalizer', + new SimpleStaticType('Symfony\Component\OptionsResolver\OptionsResolver') + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\OptionsResolver\OptionsResolver', + 'setAllowedValues', + new SimpleStaticType('Symfony\Component\OptionsResolver\OptionsResolver') + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\OptionsResolver\OptionsResolver', + 'addAllowedValues', + new SimpleStaticType('Symfony\Component\OptionsResolver\OptionsResolver') + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\OptionsResolver\OptionsResolver', + 'setAllowedTypes', + new SimpleStaticType('Symfony\Component\OptionsResolver\OptionsResolver') + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\OptionsResolver\OptionsResolver', + 'addAllowedTypes', + new SimpleStaticType('Symfony\Component\OptionsResolver\OptionsResolver') + ), + ], 'symfony/options-resolver', '>=6.0'); + + // symfony/property-access 6.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(AddReturnTypeDeclarationRector::class, [ + new AddReturnTypeDeclaration( + 'Symfony\Component\PropertyAccess\PropertyPathInterface', + 'getLength', + new IntegerType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\PropertyAccess\PropertyPathInterface', + 'getParent', + new UnionType([ + new NullType(), + new ObjectType('Symfony\Component\PropertyAccess\PropertyPathInterface'), + ]) + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\PropertyAccess\PropertyPathInterface', + 'getElements', + $arrayType + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\PropertyAccess\PropertyPathInterface', + 'getElement', + new StringType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\PropertyAccess\PropertyPathInterface', + 'isProperty', + new BooleanType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\PropertyAccess\PropertyPathInterface', + 'isIndex', + new BooleanType() + ), + ], 'symfony/property-access', '>=6.0'); + + // symfony/property-info 6.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(AddReturnTypeDeclarationRector::class, [ + new AddReturnTypeDeclaration( + 'Symfony\Component\PropertyInfo\PropertyAccessExtractorInterface', + 'isReadable', + $nullableBooleanType + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\PropertyInfo\PropertyAccessExtractorInterface', + 'isWritable', + $nullableBooleanType + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\PropertyInfo\PropertyListExtractorInterface', + 'getProperties', + $nullableArrayType + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\PropertyInfo\PropertyTypeExtractorInterface', + 'getTypes', + $nullableArrayType + ), + ], 'symfony/property-info', '>=6.0'); + + // symfony/routing 6.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(AddReturnTypeDeclarationRector::class, [ + new AddReturnTypeDeclaration( + 'Symfony\Component\Routing\Loader\AnnotationClassLoader', + 'getDefaultRouteName', + new StringType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Routing\Router', + 'getRouteCollection', + $routeCollectionType + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Routing\RouterInterface', + 'getRouteCollection', + $routeCollectionType + ), + ], 'symfony/routing', '>=6.0'); + + // symfony/security-core 6.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(AddReturnTypeDeclarationRector::class, [ + // @see https://wouterj.nl/2021/09/symfony-6-native-typing#when-upgrading-to-symfony-54 + new AddReturnTypeDeclaration( + 'Symfony\Component\Security\Core\User\UserInterface', + 'getRoles', + new ArrayType(new MixedType(), new MixedType()) + ), + + new AddReturnTypeDeclaration( + 'Symfony\Component\Security\Core\Authentication\RememberMe\TokenProviderInterface', + 'loadTokenBySeries', + new ObjectType('Symfony\Component\Security\Core\Authentication\RememberMe\PersistentTokenInterface') + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Security\Core\Authorization\Voter\VoterInterface', + 'vote', + new IntegerType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Security\Core\Exception\AuthenticationException', + 'getMessageKey', + new StringType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Security\Core\User\UserProviderInterface', + 'refreshUser', + new ObjectType('Symfony\Component\Security\Core\User\UserInterface') + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Security\Core\User\UserProviderInterface', + 'supportsClass', + new BooleanType() + ), + ], 'symfony/security-core', '>=6.0'); + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + new MethodCallRename( + 'Symfony\Component\Security\Core\User\UserProviderInterface', + 'loadUserByUsername', + 'loadUserByIdentifier', + ), + // @see https://github.com/rectorphp/rector-symfony/issues/112 + new MethodCallRename( + 'Symfony\Component\Security\Core\User\UserInterface', + 'getUsername', + 'getUserIdentifier', + ), + ], 'symfony/security-core', '>=6.0'); + + // symfony/security-http 6.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(AddReturnTypeDeclarationRector::class, [ + new AddReturnTypeDeclaration( + 'Symfony\Component\Security\Http\EntryPoint\AuthenticationEntryPointInterface', + 'start', + $httpFoundationResponseType + ), + new AddReturnTypeDeclaration('Symfony\Component\Security\Http\Firewall', 'getSubscribedEvents', $arrayType), + new AddReturnTypeDeclaration( + 'Symfony\Component\Security\Http\FirewallMapInterface', + 'getListeners', + $arrayType + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Security\Http\Authenticator\AuthenticatorInterface', + 'authenticate', + new ObjectType('Symfony\Component\Security\Http\Authenticator\Passport\Passport') + ), + ], 'symfony/security-http', '>=6.0'); + + // symfony/serializer 6.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(AddReturnTypeDeclarationRector::class, [ + new AddReturnTypeDeclaration( + 'Symfony\Component\Serializer\Encoder\DecoderInterface', + 'decode', + new MixedType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Serializer\Encoder\DecoderInterface', + 'supportsDecoding', + new BooleanType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Serializer\Normalizer\AbstractNormalizer', + 'getAllowedAttributes', + new UnionType([$arrayType, new BooleanType()]) + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Serializer\Normalizer\AbstractNormalizer', + 'isAllowedAttribute', + new BooleanType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Serializer\Normalizer\AbstractNormalizer', + 'instantiateObject', + new ObjectWithoutClassType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer', + 'supportsNormalization', + new BooleanType() + ), + + new AddReturnTypeDeclaration( + 'Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer', + 'instantiateObject', + new ObjectWithoutClassType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer', + 'extractAttributes', + $arrayType + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer', + 'getAttributeValue', + new MixedType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer', + 'supportsDenormalization', + new BooleanType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer', + 'denormalize', + new MixedType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Serializer\Normalizer\DenormalizerInterface', + 'denormalize', + new MixedType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Serializer\Normalizer\DenormalizerInterface', + 'supportsDenormalization', + new BooleanType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Serializer\Normalizer\NormalizerInterface', + 'supportsNormalization', + new BooleanType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer', + 'normalize', + $scalarArrayObjectUnionType + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Serializer\Normalizer\NormalizerInterface', + 'normalize', + $scalarArrayObjectUnionType + ), + ], 'symfony/serializer', '>=6.0'); + + // symfony/templating 6.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(AddReturnTypeDeclarationRector::class, [ + new AddReturnTypeDeclaration( + 'Symfony\Component\Templating\Helper\HelperInterface', + 'getName', + new StringType() + ), + ], 'symfony/templating', '>=6.0'); + + // symfony/translation 6.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(AddReturnTypeDeclarationRector::class, [ + new AddReturnTypeDeclaration( + 'Symfony\Component\Translation\Extractor\AbstractFileExtractor', + 'canBeExtracted', + new BooleanType() + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Translation\Extractor\AbstractFileExtractor', + 'extractFromDirectory', + $iterableType + ), + ], 'symfony/translation', '>=6.0'); + + // symfony/validator 6.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(AddReturnTypeDeclarationRector::class, [ + new AddReturnTypeDeclaration( + 'Symfony\Component\Validator\Constraint', + 'getDefaultOption', + $nullableStringType + ), + new AddReturnTypeDeclaration('Symfony\Component\Validator\Constraint', 'getRequiredOptions', $arrayType), + new AddReturnTypeDeclaration('Symfony\Component\Validator\Constraint', 'validatedBy', new StringType()), + new AddReturnTypeDeclaration( + 'Symfony\Component\Validator\Constraint', + 'getTargets', + new UnionType([new StringType(), $arrayType]) + ), + ], 'symfony/validator', '>=6.0'); + + // symfony/serializer 6.1 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + // @see https://github.com/symfony/symfony/pull/43982 + 'Symfony\Component\Serializer\Normalizer\ContextAwareDenormalizerInterface' => 'Symfony\Component\Serializer\Normalizer\DenormalizerInterface', + 'Symfony\Component\Serializer\Normalizer\ContextAwareNormalizerInterface' => 'Symfony\Component\Serializer\Normalizer\NormalizerInterface', + ], 'symfony/serializer', '>=6.1'); + + // symfony/validator 6.1 + $rectorConfig->ruleWithConfigurationComposerVersionBound(AttributeKeyToClassConstFetchRector::class, [ + new AttributeKeyToClassConstFetch( + 'Symfony\\Component\\Validator\\Constraints\\Email', + 'mode', + 'Symfony\\Component\\Validator\\Constraints\\Email', + [ + 'html5-allow-no-tld' => 'VALIDATION_MODE_HTML5_ALLOW_NO_TLD', + ] + ), + ], 'symfony/validator', '>=6.1'); + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + // @see https://github.com/symfony/symfony/pull/45623 + 'Symfony\Component\Validator\Constraints\ExpressionLanguageSyntax' => 'Symfony\Component\Validator\Constraints\ExpressionSyntax', + 'Symfony\Component\Validator\Constraints\ExpressionLanguageSyntaxValidator' => 'Symfony\Component\Validator\Constraints\ExpressionSyntaxValidator', + ], 'symfony/validator', '>=6.1'); + + // symfony/framework-bundle 6.2 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + // @see https://github.com/symfony/symfony/pull/46854 + new MethodCallRename( + 'Symfony\Bundle\FrameworkBundle\Controller\AbstractController', + 'renderForm', + 'render' + ), + ], 'symfony/framework-bundle', '>=6.2'); + + // symfony/http-foundation 6.2 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + // @see https://github.com/symfony/symfony/pull/47595 + 'Symfony\Component\HttpFoundation\ExpressionRequestMatcher' => 'Symfony\Component\HttpFoundation\RequestMatcher\ExpressionRequestMatcher', + 'Symfony\Component\HttpFoundation\RequestMatcher' => 'Symfony\Component\HttpFoundation\ChainRequestMatcher', + ], 'symfony/http-foundation', '>=6.2'); + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + // @see https://github.com/symfony/symfony/pull/45034 + new MethodCallRename( + 'Symfony\Component\HttpFoundation\Request', + 'getContentType', + 'getContentTypeFormat' + ), + ], 'symfony/http-foundation', '>=6.2'); + + // symfony/http-kernel 6.2 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + // @see https://github.com/symfony/symfony/pull/46880 + 'Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache' => 'Symfony\Component\HttpKernel\Attribute\Cache', + // @see https://github.com/symfony/symfony/pull/47363 + 'Symfony\Component\HttpKernel\Controller\ArgumentValueResolverInterface' => 'Symfony\Component\HttpKernel\Controller\ValueResolverInterface', + ], 'symfony/http-kernel', '>=6.2'); + + // symfony/mail-pace-mailer 6.2 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + // @see https://github.com/symfony/symfony/pull/46714 + 'Symfony\Component\Mailer\Bridge\OhMySmtp\Transport\OhMySmtpApiTransport' => 'Symfony\Component\Mailer\Bridge\MailPace\Transport\MailPaceApiTransport', + 'Symfony\Component\Mailer\Bridge\OhMySmtp\Transport\OhMySmtpSmtpTransport' => 'Symfony\Component\Mailer\Bridge\MailPace\Transport\MailPaceSmtpTransport', + 'Symfony\Component\Mailer\Bridge\OhMySmtp\Transport\OhMySmtpTransportFactory' => 'Symfony\Component\Mailer\Bridge\MailPace\Transport\MailPaceTransportFactory', + ], 'symfony/mail-pace-mailer', '>=6.2'); + + // symfony/mime 6.2 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + // @see https://github.com/symfony/symfony/pull/47711 + new MethodCallRename('Symfony\Component\Mime\Email', 'attachPart', 'addPart'), + ], 'symfony/mime', '>=6.2'); + + // symfony/security-bundle 6.2 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + // @see https://github.com/symfony/symfony/pull/46094 + 'Symfony\Component\Security\Core\Security' => 'Symfony\Bundle\SecurityBundle\Security', + ], 'symfony/security-bundle', '>=6.2'); + + // symfony/security-http 6.2 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassConstFetchRector::class, [ + new RenameClassAndConstFetch( + 'Symfony\Component\Security\Core\Security', + 'ACCESS_DENIED_ERROR', + 'Symfony\Component\Security\Http\SecurityRequestAttributes', + 'ACCESS_DENIED_ERROR' + ), + new RenameClassAndConstFetch( + 'Symfony\Component\Security\Core\Security', + 'AUTHENTICATION_ERROR', + 'Symfony\Component\Security\Http\SecurityRequestAttributes', + 'AUTHENTICATION_ERROR' + ), + new RenameClassAndConstFetch( + 'Symfony\Component\Security\Core\Security', + 'LAST_USERNAME', + 'Symfony\Component\Security\Http\SecurityRequestAttributes', + 'LAST_USERNAME' + ), + new RenameClassAndConstFetch( + 'Symfony\Component\Security\Core\Security', + 'MAX_USERNAME_LENGTH', + 'Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge', + 'MAX_USERNAME_LENGTH' + ), + ], 'symfony/security-http', '>=6.2'); + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + // @see https://github.com/symfony/symfony/pull/46907 + 'Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted' => 'Symfony\Component\Security\Http\Attribute\IsGranted', + ], 'symfony/security-http', '>=6.2'); + + // symfony/symfony 6.2 + $rectorConfig->ruleWithConfigurationComposerVersionBound(AnnotationToAttributeRector::class, [ + // @see https://github.com/symfony/symfony/pull/46907 + new AnnotationToAttribute('Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted'), + // @see https://github.com/symfony/symfony/pull/46880 + new AnnotationToAttribute('Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache'), + // @see https://github.com/symfony/symfony/pull/46906 + new AnnotationToAttribute('Sensio\Bundle\FrameworkExtraBundle\Configuration\Template'), + ], 'symfony/symfony', '>=6.2'); + + // symfony/translation 6.2 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + // @see https://github.com/symfony/symfony/pull/46161 + 'Symfony\Component\Translation\Extractor\PhpAstExtractor' => 'Symfony\Component\Translation\Extractor\PhpAstExtractor', + ], 'symfony/translation', '>=6.2'); + + // symfony/twig-bridge 6.2 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + // @see https://github.com/symfony/symfony/pull/46906 + 'Sensio\Bundle\FrameworkExtraBundle\Configuration\Template' => 'Symfony\Bridge\Twig\Attribute\Template', + ], 'symfony/twig-bridge', '>=6.2'); + + // symfony/validator 6.2 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassConstFetchRector::class, [ + new RenameClassConstFetch( + 'Symfony\\Component\\Validator\\Constraints\\Email', + 'VALIDATION_MODE_LOOSE', + 'VALIDATION_MODE_HTML5' + ), + ], 'symfony/validator', '>=6.2'); + + // symfony/dependency-injection 6.3 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + // @see https://github.com/symfony/symfony/commit/b653adf426aedc66d16c5fc1cf71e261f20b9638 + 'Symfony\Component\DependencyInjection\Attribute\MapDecorated' => 'Symfony\Component\DependencyInjection\Attribute\AutowireDecorated', + ], 'symfony/dependency-injection', '>=6.3'); + + // symfony/http-client 6.3 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + // @see https://github.com/symfony/symfony/commit/20ab567385e3812ef661dae01a1fdc5d1bde2666 + 'Http\Client\HttpClient' => 'Psr\Http\Client\ClientInterface', + ], 'symfony/http-client', '>=6.3'); + + // symfony/messenger 6.3 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + // @see https://github.com/symfony/symfony/commit/9415b438b75204c72ff66b838307b73646393cbf + 'Symfony\Component\Messenger\EventListener\StopWorkerOnSigtermSignalListener' => 'Symfony\Component\Messenger\EventListener\StopWorkerOnSignalsListener', + // @see https://github.com/symfony/symfony/commit/a7926b2d83f35fe53c41a28d8055490cc1955928 + 'Symfony\Component\Messenger\Transport\InMemoryTransport' => 'Symfony\Component\Messenger\Transport\InMemory\InMemoryTransport', + 'Symfony\Component\Messenger\Transport\InMemoryTransportFactory' => 'Symfony\Component\Messenger\Transport\InMemory\InMemoryTransportFactory', + ], 'symfony/messenger', '>=6.3'); + + // symfony/web-link 6.3 + $rectorConfig->ruleWithConfigurationComposerVersionBound(ReplaceArgumentDefaultValueRector::class, [ + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'about', + 'Symfony\Component\WebLink\Link::REL_ABOUT' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'acl', + 'Symfony\Component\WebLink\Link::REL_ACL' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'amphtml', + 'Symfony\Component\WebLink\Link::REL_AMPHTML' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'appendix', + 'Symfony\Component\WebLink\Link::REL_APPENDIX' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'apple-touch-icon', + 'Symfony\Component\WebLink\Link::REL_APPLE_TOUCH_ICON' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'apple-touch-startup-image', + 'Symfony\Component\WebLink\Link::REL_APPLE_TOUCH_STARTUP_IMAGE' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'archives', + 'Symfony\Component\WebLink\Link::REL_ARCHIVES' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'blocked-by', + 'Symfony\Component\WebLink\Link::REL_BLOCKED_BY' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'bookmark', + 'Symfony\Component\WebLink\Link::REL_BOOKMARK' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'canonical', + 'Symfony\Component\WebLink\Link::REL_CANONICAL' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'chapter', + 'Symfony\Component\WebLink\Link::REL_CHAPTER' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'cite-as', + 'Symfony\Component\WebLink\Link::REL_CITE_AS' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'collection', + 'Symfony\Component\WebLink\Link::REL_COLLECTION' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'contents', + 'Symfony\Component\WebLink\Link::REL_CONTENTS' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'convertedfrom', + 'Symfony\Component\WebLink\Link::REL_CONVERTEDFROM' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'copyright', + 'Symfony\Component\WebLink\Link::REL_COPYRIGHT' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'create-form', + 'Symfony\Component\WebLink\Link::REL_CREATE_FORM' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'current', + 'Symfony\Component\WebLink\Link::REL_CURRENT' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'describedby', + 'Symfony\Component\WebLink\Link::REL_DESCRIBEDBY' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'describes', + 'Symfony\Component\WebLink\Link::REL_DESCRIBES' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'disclosure', + 'Symfony\Component\WebLink\Link::REL_DISCLOSURE' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'duplicate', + 'Symfony\Component\WebLink\Link::REL_DUPLICATE' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'edit', + 'Symfony\Component\WebLink\Link::REL_EDIT' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'edit-form', + 'Symfony\Component\WebLink\Link::REL_EDIT_FORM' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'edit-media', + 'Symfony\Component\WebLink\Link::REL_EDIT_MEDIA' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'enclosure', + 'Symfony\Component\WebLink\Link::REL_ENCLOSURE' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'external', + 'Symfony\Component\WebLink\Link::REL_EXTERNAL' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'first', + 'Symfony\Component\WebLink\Link::REL_FIRST' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'glossary', + 'Symfony\Component\WebLink\Link::REL_GLOSSARY' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'hosts', + 'Symfony\Component\WebLink\Link::REL_HOSTS' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'hub', + 'Symfony\Component\WebLink\Link::REL_HUB' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'index', + 'Symfony\Component\WebLink\Link::REL_INDEX' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'intervalafter', + 'Symfony\Component\WebLink\Link::REL_INTERVALAFTER' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'intervalbefore', + 'Symfony\Component\WebLink\Link::REL_INTERVALBEFORE' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'intervalcontains', + 'Symfony\Component\WebLink\Link::REL_INTERVALCONTAINS' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'intervaldisjoint', + 'Symfony\Component\WebLink\Link::REL_INTERVALDISJOINT' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'intervalduring', + 'Symfony\Component\WebLink\Link::REL_INTERVALDURING' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'intervalequals', + 'Symfony\Component\WebLink\Link::REL_INTERVALEQUALS' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'intervalfinishedby', + 'Symfony\Component\WebLink\Link::REL_INTERVALFINISHEDBY' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'intervalfinishes', + 'Symfony\Component\WebLink\Link::REL_INTERVALFINISHES' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'intervalin', + 'Symfony\Component\WebLink\Link::REL_INTERVALIN' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'intervalmeets', + 'Symfony\Component\WebLink\Link::REL_INTERVALMEETS' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'intervalmetby', + 'Symfony\Component\WebLink\Link::REL_INTERVALMETBY' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'intervaloverlappedby', + 'Symfony\Component\WebLink\Link::REL_INTERVALOVERLAPPEDBY' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'intervaloverlaps', + 'Symfony\Component\WebLink\Link::REL_INTERVALOVERLAPS' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'intervalstartedby', + 'Symfony\Component\WebLink\Link::REL_INTERVALSTARTEDBY' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'intervalstarts', + 'Symfony\Component\WebLink\Link::REL_INTERVALSTARTS' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'item', + 'Symfony\Component\WebLink\Link::REL_ITEM' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'last', + 'Symfony\Component\WebLink\Link::REL_LAST' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'latest-version', + 'Symfony\Component\WebLink\Link::REL_LATEST_VERSION' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'linkset', + 'Symfony\Component\WebLink\Link::REL_LINKSET' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'lrdd', + 'Symfony\Component\WebLink\Link::REL_LRDD' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'manifest', + 'Symfony\Component\WebLink\Link::REL_MANIFEST' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'mask-icon', + 'Symfony\Component\WebLink\Link::REL_MASK_ICON' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'media-feed', + 'Symfony\Component\WebLink\Link::REL_MEDIA_FEED' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'memento', + 'Symfony\Component\WebLink\Link::REL_MEMENTO' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'micropub', + 'Symfony\Component\WebLink\Link::REL_MICROPUB' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'modulepreload', + 'Symfony\Component\WebLink\Link::REL_MODULEPRELOAD' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'monitor', + 'Symfony\Component\WebLink\Link::REL_MONITOR' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'monitor-group', + 'Symfony\Component\WebLink\Link::REL_MONITOR_GROUP' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'next-archive', + 'Symfony\Component\WebLink\Link::REL_NEXT_ARCHIVE' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'nofollow', + 'Symfony\Component\WebLink\Link::REL_NOFOLLOW' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'noopener', + 'Symfony\Component\WebLink\Link::REL_NOOPENER' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'noreferrer', + 'Symfony\Component\WebLink\Link::REL_NOREFERRER' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'opener', + 'Symfony\Component\WebLink\Link::REL_OPENER' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'openid2.local_id', + 'Symfony\Component\WebLink\Link::REL_OPENID_2_LOCAL_ID' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'openid2.provider', + 'Symfony\Component\WebLink\Link::REL_OPENID_2_PROVIDER' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'original', + 'Symfony\Component\WebLink\Link::REL_ORIGINAL' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'p3pv1', + 'Symfony\Component\WebLink\Link::REL_P_3_PV_1' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'payment', + 'Symfony\Component\WebLink\Link::REL_PAYMENT' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'pingback', + 'Symfony\Component\WebLink\Link::REL_PINGBACK' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'predecessor-version', + 'Symfony\Component\WebLink\Link::REL_PREDECESSOR_VERSION' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'preview', + 'Symfony\Component\WebLink\Link::REL_PREVIEW' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'previous', + 'Symfony\Component\WebLink\Link::REL_PREVIOUS' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'prev-archive', + 'Symfony\Component\WebLink\Link::REL_PREV_ARCHIVE' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'privacy-policy', + 'Symfony\Component\WebLink\Link::REL_PRIVACY_POLICY' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'profile', + 'Symfony\Component\WebLink\Link::REL_PROFILE' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'publication', + 'Symfony\Component\WebLink\Link::REL_PUBLICATION' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'related', + 'Symfony\Component\WebLink\Link::REL_RELATED' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'restconf', + 'Symfony\Component\WebLink\Link::REL_RESTCONF' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'replies', + 'Symfony\Component\WebLink\Link::REL_REPLIES' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'ruleinput', + 'Symfony\Component\WebLink\Link::REL_RULEINPUT' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'section', + 'Symfony\Component\WebLink\Link::REL_SECTION' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'self', + 'Symfony\Component\WebLink\Link::REL_SELF' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'service', + 'Symfony\Component\WebLink\Link::REL_SERVICE' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'service-desc', + 'Symfony\Component\WebLink\Link::REL_SERVICE_DESC' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'service-doc', + 'Symfony\Component\WebLink\Link::REL_SERVICE_DOC' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'service-meta', + 'Symfony\Component\WebLink\Link::REL_SERVICE_META' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'siptrunkingcapability', + 'Symfony\Component\WebLink\Link::REL_SIPTRUNKINGCAPABILITY' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'sponsored', + 'Symfony\Component\WebLink\Link::REL_SPONSORED' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'start', + 'Symfony\Component\WebLink\Link::REL_START' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'status', + 'Symfony\Component\WebLink\Link::REL_STATUS' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'subsection', + 'Symfony\Component\WebLink\Link::REL_SUBSECTION' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'successor-version', + 'Symfony\Component\WebLink\Link::REL_SUCCESSOR_VERSION' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'sunset', + 'Symfony\Component\WebLink\Link::REL_SUNSET' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'tag', + 'Symfony\Component\WebLink\Link::REL_TAG' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'terms-of-service', + 'Symfony\Component\WebLink\Link::REL_TERMS_OF_SERVICE' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'timegate', + 'Symfony\Component\WebLink\Link::REL_TIMEGATE' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'timemap', + 'Symfony\Component\WebLink\Link::REL_TIMEMAP' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'type', + 'Symfony\Component\WebLink\Link::REL_TYPE' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'ugc', + 'Symfony\Component\WebLink\Link::REL_UGC' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'up', + 'Symfony\Component\WebLink\Link::REL_UP' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'version-history', + 'Symfony\Component\WebLink\Link::REL_VERSION_HISTORY' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'via', + 'Symfony\Component\WebLink\Link::REL_VIA' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'webmention', + 'Symfony\Component\WebLink\Link::REL_WEBMENTION' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'working-copy', + 'Symfony\Component\WebLink\Link::REL_WORKING_COPY' + ), + new ReplaceArgumentDefaultValue( + 'Symfony\Component\WebLink\Link', + '__construct', + 0, + 'working-copy-of', + 'Symfony\Component\WebLink\Link::REL_WORKING_COPY_OF' + ), + ], 'symfony/web-link', '>=6.3'); + + // symfony/error-handler 6.4 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + 'Symfony\Component\HttpKernel\Debug\FileLinkFormatter' => 'Symfony\Component\ErrorHandler\ErrorRenderer\FileLinkFormatter', + ], 'symfony/error-handler', '>=6.4'); + + // symfony/form 6.4 + $rectorConfig->ruleWithConfigurationComposerVersionBound(AddReturnTypeDeclarationRector::class, [ + new AddReturnTypeDeclaration( + 'Symfony\Component\Form\DataTransformerInterface', + 'transform', + new MixedType(), + ), + new AddReturnTypeDeclaration( + 'Symfony\Component\Form\DataTransformerInterface', + 'reverseTransform', + new MixedType(), + ), + ], 'symfony/form', '>=6.4'); + + // symfony/http-foundation 6.4 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + 'Symfony\Component\HttpKernel\UriSigner' => 'Symfony\Component\HttpFoundation\UriSigner', + ], 'symfony/http-foundation', '>=6.4'); + + // symfony/routing 6.4 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameAttributeRector::class, [ + new RenameAttribute( + 'Symfony\Component\Routing\Annotation\Route', + 'Symfony\Component\Routing\Attribute\Route' + ), + ], 'symfony/routing', '>=6.4'); + + // symfony/contracts 7.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(AnnotationToAttributeRector::class, [ + new AnnotationToAttribute('required', 'Symfony\Contracts\Service\Attribute\Required'), + ], 'symfony/contracts', '>=7.0'); + + // symfony/dependency-injection 7.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameAttributeRector::class, [ + new RenameAttribute( + 'Symfony\Component\DependencyInjection\Attribute\MapDecorated', + 'Symfony\Component\DependencyInjection\Attribute\AutowireDecorated', + ), + ], 'symfony/dependency-injection', '>=7.0'); + + // symfony/http-foundation 7.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + // @see https://github.com/symfony/symfony/blob/7.0/UPGRADE-7.0.md#httpfoundation + 'Symfony\Component\HttpFoundation\RequestMatcher' => 'Symfony\Component\HttpFoundation\ChainRequestMatcher', + 'Symfony\Component\HttpFoundation\ExpressionRequestMatcher' => 'Symfony\Component\HttpFoundation\RequestMatcher\ExpressionRequestMatcher', + ], 'symfony/http-foundation', '>=7.0'); + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + new MethodCallRename('Symfony\Component\HttpFoundation\Request', 'getContentType', 'getContentTypeFormat'), + ], 'symfony/http-foundation', '>=7.0'); + + // symfony/routing 7.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameAttributeRector::class, [ + new RenameAttribute( + 'Symfony\Component\Routing\Annotation\Route', + 'Symfony\Component\Routing\Attribute\Route', + ), + ], 'symfony/routing', '>=7.0'); + + // symfony/serializer 7.0 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + // @see https://github.com/symfony/symfony/blob/7.0/UPGRADE-7.0.md#frameworkbundle + 'Symfony\Component\Serializer\Normalizer\ObjectNormalizer' => 'Symfony\Component\Serializer\Normalizer\NormalizerInterface', + 'Symfony\Component\Serializer\Normalizer\PropertyNormalizer' => 'Symfony\Component\Serializer\Normalizer\NormalizerInterface', + ], 'symfony/serializer', '>=7.0'); + + // symfony/dependency-injection 7.1 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameAttributeRector::class, [ + new RenameAttribute( + 'Symfony\Component\DependencyInjection\Attribute\TaggedIterator', + 'Symfony\Component\DependencyInjection\Attribute\AutowireIterator' + ), + new RenameAttribute( + 'Symfony\Component\DependencyInjection\Attribute\TaggedLocator', + 'Symfony\Component\DependencyInjection\Attribute\AutowireLocator' + ), + ], 'symfony/dependency-injection', '>=7.1'); + + // symfony/serializer 7.1 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + // typo fix + new MethodCallRename( + 'Symfony\Component\Serializer\Context\Normalizer\AbstractNormalizerContextBuilder', + 'withDefaultContructorArguments', + 'withDefaultConstructorArguments', + ), + ], 'symfony/serializer', '>=7.1'); + + // symfony/mailer 7.2 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + // @see https://github.com/symfony/symfony/blob/7.4/UPGRADE-7.2.md#mailer + 'Symfony\Component\Mailer\Test\TransportFactoryTestCase' => 'Symfony\Component\Mailer\Test\AbstractTransportFactoryTestCase', + ], 'symfony/mailer', '>=7.2'); + + // symfony/serializer 7.2 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + // @see https://github.com/symfony/symfony/blob/7.2/UPGRADE-7.2.md#serializer + 'Symfony\Component\Serializer\NameConverter\AdvancedNameConverterInterface' => 'Symfony\Component\Serializer\NameConverter\NameConverterInterface', + ], 'symfony/serializer', '>=7.2'); + + // symfony/translation 7.2 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + 'Symfony\Component\Translation\Test\ProviderFactoryTestCase;' => 'Symfony\Component\Translation\Test\AbstractProviderFactoryTestCase', + ], 'symfony/translation', '>=7.2'); + + // symfony/console 7.4 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + new MethodCallRename('Symfony\Component\Console\Application', 'add', 'addCommand'), + ], 'symfony/console', '>=7.4'); + + // symfony/framework-bundle 7.4 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + new MethodCallRename('Symfony\Bundle\FrameworkBundle\Console\Application', 'add', 'addCommand'), + ], 'symfony/framework-bundle', '>=7.4'); + + // symfony/json-streamer 7.4 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + new MethodCallRename( + 'Symfony\Component\JsonStreamer\Mapping\PropertyMetadata', + 'getNativeToStreamValueTransformer', + 'getValueTransformers' + ), + new MethodCallRename( + 'Symfony\Component\JsonStreamer\Mapping\PropertyMetadata', + 'getStreamToNativeValueTransformers', + 'getValueTransformers' + ), + new MethodCallRename( + 'Symfony\Component\JsonStreamer\Mapping\PropertyMetadata', + 'withNativeToStreamValueTransformers', + 'withValueTransformers' + ), + new MethodCallRename( + 'Symfony\Component\JsonStreamer\Mapping\PropertyMetadata', + 'withStreamToNativeValueTransformers', + 'withValueTransformers' + ), + new MethodCallRename( + 'Symfony\Component\JsonStreamer\Mapping\PropertyMetadata', + 'withAdditionalNativeToStreamValueTransformer', + 'withAdditionalValueTransformer' + ), + new MethodCallRename( + 'Symfony\Component\JsonStreamer\Mapping\PropertyMetadata', + 'withAdditionalStreamToNativeValueTransformer', + 'withAdditionalValueTransformer' + ), + ], 'symfony/json-streamer', '>=7.4'); + + // symfony/routing 7.4 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + // @see https://github.com/symfony/symfony/pull/61358 + new MethodCallRename('Symfony\Component\Routing\Attribute\Route', 'setEnv', 'setEnvs'), + ], 'symfony/routing', '>=7.4'); + + // symfony/workflow 7.4 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + 'Symfony\Bundle\FrameworkBundle\Command\WorkflowDumpCommand' => 'Symfony\Component\Workflow\Command\WorkflowDumpCommand', + ], 'symfony/workflow', '>=7.4'); + + // symfony/dependency-injection 8.1 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameClassRector::class, [ + 'Symfony\Component\HttpKernel\Bundle\BundleInterface' => 'Symfony\Component\DependencyInjection\Kernel\BundleInterface', + 'Symfony\Component\HttpKernel\DependencyInjection\MergeExtensionConfigurationPass' => 'Symfony\Component\DependencyInjection\Compiler\MergeExtensionConfigurationPass', + 'Symfony\Component\HttpKernel\Config\FileLocator' => 'Symfony\Component\DependencyInjection\Kernel\FileLocator', + 'Symfony\Component\HttpKernel\DependencyInjection\ServicesResetter' => 'Symfony\Component\DependencyInjection\ServicesResetter', + 'Symfony\Component\HttpKernel\DependencyInjection\ServicesResetterInterface' => 'Symfony\Component\DependencyInjection\ServicesResetterInterface', + 'Symfony\Component\HttpKernel\DependencyInjection\ResettableServicePass' => 'Symfony\Component\DependencyInjection\Compiler\ResettableServicePass', + 'Symfony\Component\HttpKernel\DependencyInjection\Extension' => 'Symfony\Component\DependencyInjection\Extension\Extension', + ], 'symfony/dependency-injection', '>=8.1'); + + // symfony/serializer 8.1 + $rectorConfig->ruleWithConfigurationComposerVersionBound(RenameMethodRector::class, [ + // @see https://github.com/symfony/symfony/blob/8.1/UPGRADE-8.1.md#serializer + new MethodCallRename( + 'Symfony\Component\Serializer\Exception\PartialDenormalizationException', + 'getErrors', + 'getNotNormalizableValueErrors' + ), + ], 'symfony/serializer', '>=8.1'); }; diff --git a/src/Set/SetProvider/SymfonySetProvider.php b/src/Set/SetProvider/SymfonySetProvider.php index 2be218ce..29ad4a41 100644 --- a/src/Set/SetProvider/SymfonySetProvider.php +++ b/src/Set/SetProvider/SymfonySetProvider.php @@ -20,17 +20,54 @@ final class SymfonySetProvider implements SetProviderInterface * @var array */ private const array COMPOSER_BASED_TRIGGER_PACKAGES = [ + 'symfony/bridge-swift-mailer' => '>=3.0', + 'symfony/class-loader' => '>=3.0', + 'symfony/console' => '>=3.0', + 'symfony/form' => '>=3.0', + 'symfony/http-kernel' => '>=3.0', + 'symfony/process' => '>=3.0', + 'symfony/property-access' => '>=3.0', + 'symfony/security' => '>=3.0', + 'symfony/translation' => '>=3.0', + 'symfony/twig-bundle' => '>=3.0', + 'symfony/validator' => '>=3.0', + 'symfony/yaml' => '>=3.1', + 'symfony/dependency-injection' => '>=3.2', + 'symfony/http-foundation' => '>=3.2', + 'symfony/debug' => '>=3.3', + 'symfony/framework-bundle' => '>=3.3', + 'symfony/workflow' => '>=4.1', + 'symfony/cache' => '>=4.2', 'symfony/config' => '>=4.2', - 'symfony/process' => '>=4.2', + 'symfony/dom-crawler' => '>=4.2', + 'symfony/finder' => '>=4.2', + 'symfony/monolog-bridge' => '>=4.2', + 'symfony/serializer' => '>=4.2', + 'symfony/browser-kit' => '>=4.3', 'symfony/event-dispatcher' => '>=4.3', - 'symfony/console' => '>=4.4', - 'symfony/security-http' => '>=5.1', - 'symfony/dependency-injection' => '>=5.2', - 'symfony/http-foundation' => '>=5.2', - 'symfony/property-access' => '>=5.2', + 'symfony/security-core' => '>=4.3', + 'symfony/security-http' => '>=4.3', + 'symfony/templating' => '>=4.4', + 'symfony/web-link' => '>=4.4', + 'symfony/inflector' => '>=5.1', + 'symfony/notifier' => '>=5.1', + 'symfony/mime' => '>=5.2', 'symfony/property-info' => '>=5.2', - 'symfony/validator' => '>=5.2', - 'symfony/http-kernel' => '>=6.2', + 'symfony/security-mailer' => '>=5.3', + 'symfony/security-bundle' => '>=5.4', + 'symfony/contracts' => '>=6.0', + 'symfony/doctrine-bridge' => '>=6.0', + 'symfony/expression-language' => '>=6.0', + 'symfony/options-resolver' => '>=6.0', + 'symfony/routing' => '>=6.0', + 'symfony/mail-pace-mailer' => '>=6.2', + 'symfony/symfony' => '>=6.2', + 'symfony/twig-bridge' => '>=6.2', + 'symfony/http-client' => '>=6.3', + 'symfony/messenger' => '>=6.3', + 'symfony/error-handler' => '>=6.4', + 'symfony/mailer' => '>=7.2', + 'symfony/json-streamer' => '>=7.4', ]; /** diff --git a/tests/ComposerBased/ComposerBasedTest.php b/tests/ComposerBased/ComposerBasedTest.php new file mode 100644 index 00000000..0165cd11 --- /dev/null +++ b/tests/ComposerBased/ComposerBasedTest.php @@ -0,0 +1,28 @@ +doTestFile($filePath); + } + + public static function provideData(): Iterator + { + return self::yieldFilesFromDirectory(__DIR__ . '/Fixture'); + } + + public function provideConfigFilePath(): string + { + return __DIR__ . '/config/composer_based.php'; + } +} diff --git a/tests/ComposerBased/Fixture/version_bound_renames.php.inc b/tests/ComposerBased/Fixture/version_bound_renames.php.inc new file mode 100644 index 00000000..ce389642 --- /dev/null +++ b/tests/ComposerBased/Fixture/version_bound_renames.php.inc @@ -0,0 +1,35 @@ +strlen('some text'); + $contentType = $request->getContentType(); + + return [$width, $contentType]; + } +} + +?> +----- +width('some text'); + $contentType = $request->getContentTypeFormat(); + + return [$width, $contentType]; + } +} + +?> diff --git a/tests/ComposerBased/config/composer_based.php b/tests/ComposerBased/config/composer_based.php new file mode 100644 index 00000000..6e991a2c --- /dev/null +++ b/tests/ComposerBased/config/composer_based.php @@ -0,0 +1,9 @@ +sets([__DIR__ . '/../../../config/sets/symfony/composer-based.php']); +};