From 380e2dcd3f647fcb702e44fd1efb83564e4af200 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Sun, 2 Aug 2026 23:21:46 +0200 Subject: [PATCH 1/2] [composer-based] Bond RedirectToRouteRector to symfony/framework-bundle 2.6 Controller::redirectToRoute() was added in symfony/framework-bundle 2.6, so the rule declares that constraint and is registered in the composer-based set. --- config/sets/symfony/composer-based.php | 4 ++++ .../Rector/MethodCall/RedirectToRouteRector.php | 11 ++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/config/sets/symfony/composer-based.php b/config/sets/symfony/composer-based.php index f2027f579..377bc6507 100644 --- a/config/sets/symfony/composer-based.php +++ b/config/sets/symfony/composer-based.php @@ -43,6 +43,7 @@ use Rector\Symfony\CodeQuality\Rector\AttributeGroup\SingleConditionSecurityAttributeToIsGrantedRector; use Rector\Symfony\CodeQuality\Rector\Class_\SplitAndSecurityAttributeToIsGrantedRector; use Rector\Symfony\Symfony25\Rector\MethodCall\AddViolationToBuildViolationRector; +use Rector\Symfony\Symfony26\Rector\MethodCall\RedirectToRouteRector; use Rector\Symfony\Symfony42\Rector\New_\RootNodeTreeBuilderRector; use Rector\Symfony\Symfony42\Rector\New_\StringToArrayArgumentProcessRector; use Rector\Symfony\Symfony43\Rector\ClassMethod\EventDispatcherParentConstructRector; @@ -95,6 +96,9 @@ // symfony/validator 2.5 AddViolationToBuildViolationRector::class, + // symfony/framework-bundle 2.6 + RedirectToRouteRector::class, + // symfony/config 4.2 RootNodeTreeBuilderRector::class, diff --git a/rules/Symfony26/Rector/MethodCall/RedirectToRouteRector.php b/rules/Symfony26/Rector/MethodCall/RedirectToRouteRector.php index 488b05ac8..9334c6035 100644 --- a/rules/Symfony26/Rector/MethodCall/RedirectToRouteRector.php +++ b/rules/Symfony26/Rector/MethodCall/RedirectToRouteRector.php @@ -10,19 +10,28 @@ use PhpParser\Node\Expr\MethodCall; use Rector\Rector\AbstractRector; use Rector\Symfony\TypeAnalyzer\ControllerAnalyzer; +use Rector\VersionBonding\Contract\ComposerPackageConstraintInterface; +use Rector\VersionBonding\ValueObject\ComposerPackageConstraint; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** + * @changelog https://github.com/symfony/symfony/blob/2.6/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md + * * @see \Rector\Symfony\Tests\Symfony26\Rector\MethodCall\RedirectToRouteRector\RedirectToRouteRectorTest */ -final class RedirectToRouteRector extends AbstractRector +final class RedirectToRouteRector extends AbstractRector implements ComposerPackageConstraintInterface { public function __construct( private readonly ControllerAnalyzer $controllerAnalyzer ) { } + public function provideComposerPackageConstraint(): ComposerPackageConstraint + { + return new ComposerPackageConstraint('symfony/framework-bundle', '>=2.6'); + } + public function getRuleDefinition(): RuleDefinition { return new RuleDefinition( From 7a844b4ded19eede66e6b7ff3a055f482eb49fa1 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Sun, 2 Aug 2026 23:31:58 +0200 Subject: [PATCH 2/2] Resolve the framework-bundle version from a standalone composer.json in the test The rule is bonded to symfony/framework-bundle, which is not installed here, so it would be filtered out during its own test run. --- .../RedirectToRouteRector/RedirectToRouteRectorTest.php | 5 +++++ .../MethodCall/RedirectToRouteRector/config/composer.json | 5 +++++ 2 files changed, 10 insertions(+) create mode 100644 rules-tests/Symfony26/Rector/MethodCall/RedirectToRouteRector/config/composer.json diff --git a/rules-tests/Symfony26/Rector/MethodCall/RedirectToRouteRector/RedirectToRouteRectorTest.php b/rules-tests/Symfony26/Rector/MethodCall/RedirectToRouteRector/RedirectToRouteRectorTest.php index 86ff1268c..ede998bb4 100644 --- a/rules-tests/Symfony26/Rector/MethodCall/RedirectToRouteRector/RedirectToRouteRectorTest.php +++ b/rules-tests/Symfony26/Rector/MethodCall/RedirectToRouteRector/RedirectToRouteRectorTest.php @@ -25,4 +25,9 @@ public function provideConfigFilePath(): string { return __DIR__ . '/config/configured_rule.php'; } + + protected function provideComposerJsonFilePath(): string + { + return __DIR__ . '/config/composer.json'; + } } diff --git a/rules-tests/Symfony26/Rector/MethodCall/RedirectToRouteRector/config/composer.json b/rules-tests/Symfony26/Rector/MethodCall/RedirectToRouteRector/config/composer.json new file mode 100644 index 000000000..3f9a0425a --- /dev/null +++ b/rules-tests/Symfony26/Rector/MethodCall/RedirectToRouteRector/config/composer.json @@ -0,0 +1,5 @@ +{ + "require": { + "symfony/framework-bundle": "^2.6" + } +}