Update readme with RectorConfigBuilder
stefantalen opened this issue ยท 8 comments
I'm currently migrating from Rector 0.19.2 to 1.0 (๐ ) and implementing the ConfigBuilder.
Unfortunately I'm running into issues with the AddRouteAnnotationRector
because the singleton
and alias
methods are not available in the ConfigBuilder ๐
Can the readme be updated with the use of the ConfigBuilder?
There is no shortcut yet for alias and singleton from RectorConfigBuilder for now, old config is still working, so you can use old config for now.
Hi @stefantalen , thanks for reporting ๐
For running the AddRouteAnnotationRector
it should not be needed to register any other services. We should fix that :)
How does your Rector config look like now?
@samsonasik Thanks for the info, I'll keep this issue open as a reminder for the readme ๐
return RectorConfig::configure()
->withSymfonyContainerXml(__DIR__ . '/var/cache/dev/srcApp_KernelDevDebugContainer.xml')
->withSymfonyContainerPhp(__DIR__ . '/tests/symfony-container.php')
->withPaths([
// __DIR__ . '/spec', // Skipping for now
__DIR__ . '/src',
// __DIR__ . '/tests', // Skipping for now
__DIR__ . '/public',
__DIR__ . '/rector.php',
__DIR__ . '/ecs.php',
])
->withImportNames(false, false, false)
->withPreparedSets(false, true, true)
->withPhpSets()
->withRules([
InlineConstructorDefaultToPropertyRector::class,
AddRouteAnnotationRector::class
])
->withSets([
DoctrineSetList::DOCTRINE_CODE_QUALITY,
DoctrineSetList::DOCTRINE_COMMON_20,
DoctrineSetList::DOCTRINE_DBAL_211,
DoctrineSetList::DOCTRINE_ORM_25,
SymfonySetList::SYMFONY_41,
SymfonySetList::SYMFONY_42,
SymfonySetList::SYMFONY_43,
SymfonySetList::SYMFONY_44,
TwigSetList::TWIG_112,
TwigSetList::TWIG_127,
TwigSetList::TWIG_134,
TwigSetList::TWIG_140,
])
->withConfiguredRule(RenameMethodRector::class, [
new MethodCallRename('Doctrine\\DBAL\\Statement', 'execute', 'executeQuery'),
])
->withSkip([
TypedPropertyFromAssignsRector::class,
StringClassNameToClassConstantRector::class => [
__DIR__ . '/rector.php', # Keep class strings for BC
],
OptionalParametersAfterRequiredRector::class => [
__DIR__ . '/src/View/ViewHandler.php', # Type error: Argument 3 passed to App\View\ViewHandler::__construct() must be an instance of Symfony\Component\HttpFoundation\RequestStack, instance of Symfony\Bundle\TwigBundle\TwigEngine given
],
]);
This results in
/srv/app # vendor/bin/rector process src/Controller/ --dry-run --clear-cache
PHP Fatal error: Uncaught RectorPrefix202402\Illuminate\Contracts\Container\BindingResolutionException: Target [Rector\Symfony\Contract\Bridge\Symfony\Routing\SymfonyRoutesProviderInterface] is not instantiable while building [Rector\Console\ConsoleApplication, Rector\Console\Command\ProcessCommand, Rector\Configuration\ConfigInitializer, Rector\Symfony\Configs\Rector\ClassMethod\AddRouteAnnotationRector]. in /srv/app/vendor/rector/rector/vendor/illuminate/container/Container.php:958
Stack trace:
#0 /srv/app/vendor/rector/rector/vendor/illuminate/container/Container.php(796): RectorPrefix202402\Illuminate\Container\Container->notInstantiable('Rector\\Symfony\\...')
#1 /srv/app/vendor/rector/rector/vendor/illuminate/container/Container.php(687): RectorPrefix202402\Illuminate\Container\Container->build('Rector\\Symfony\\...')
#2 /srv/app/vendor/rector/rector/vendor/illuminate/container/Container.php(634): RectorPrefix202402\Illuminate\Container\Container->resolve('Rector\\Symfony\\...', Array)
#3 /srv/app/vendor/rector/rector/v in /srv/app/vendor/rector/rector/vendor/illuminate/container/Container.php on line 958
Fatal error: Uncaught RectorPrefix202402\Illuminate\Contracts\Container\BindingResolutionException: Target [Rector\Symfony\Contract\Bridge\Symfony\Routing\SymfonyRoutesProviderInterface] is not instantiable while building [Rector\Console\ConsoleApplication, Rector\Console\Command\ProcessCommand, Rector\Configuration\ConfigInitializer, Rector\Symfony\Configs\Rector\ClassMethod\AddRouteAnnotationRector]. in /srv/app/vendor/rector/rector/vendor/illuminate/container/Container.php:958
Stack trace:
#0 /srv/app/vendor/rector/rector/vendor/illuminate/container/Container.php(796): RectorPrefix202402\Illuminate\Container\Container->notInstantiable('Rector\\Symfony\\...')
#1 /srv/app/vendor/rector/rector/vendor/illuminate/container/Container.php(687): RectorPrefix202402\Illuminate\Container\Container->build('Rector\\Symfony\\...')
#2 /srv/app/vendor/rector/rector/vendor/illuminate/container/Container.php(634): RectorPrefix202402\Illuminate\Container\Container->resolve('Rector\\Symfony\\...', Array)
#3 /srv/app/vendor/rector/rector/v in /srv/app/vendor/rector/rector/vendor/illuminate/container/Container.php on line 958
I see. Thanks ๐
I'll check today if and how we can register the services for you, so the AddRouteAnnotationRector
can be used without any extra load
@stefantalen I've added registerService()
method to Rector dev-main.
You can try it now :)
This is how it works: https://github.com/rectorphp/rector-symfony/pull/581/files#diff-15ac594ec2fd54c8cb3420119439ebd563938c10b37974cd8a2799d087cb6938
@TomasVotruba Works like charm, no more errors! Great service!
Too bad the rule turns out to be useless for my case (Refactoring FOSRestBundle "automatic" routes to Symfony Routes) ๐ญ
Too bad the rule turns out to be useless for my case (Refactoring FOSRestBundle "automatic" routes to Symfony Routes) ๐ญ
Ah, that's a pitty ๐ข That would require a custom rule. But I think you can create it in less than an hour ๐ช https://getrector.com/documentation/custom-rule
Figured out how to get the most of it, routes are defined with a controller as a service definition.
Replacing the service with the actual class refactors most routes ๐
acme_users:
type: rest
- resource: "acme.controller.users"
+ resource: App\Controller\UserController