diff --git a/config/sets/symfony/composer-based.php b/config/sets/symfony/composer-based.php index 3c6629c9..0588e362 100644 --- a/config/sets/symfony/composer-based.php +++ b/config/sets/symfony/composer-based.php @@ -77,6 +77,7 @@ use Rector\Symfony\Symfony43\Rector\StmtsAwareInterface\TwigBundleFilesystemLoaderToTwigRector; use Rector\Symfony\Symfony44\Rector\ClassMethod\ConsoleExecuteReturnIntRector; use Rector\Symfony\Symfony44\Rector\MethodCall\AuthorizationCheckerIsGrantedExtractorRector; +use Rector\Symfony\Symfony44\Rector\MethodCall\WebLinkStringRelationsToConstantsRector; use Rector\Symfony\Symfony51\Rector\Class_\LogoutHandlerToLogoutEventSubscriberRector; use Rector\Symfony\Symfony51\Rector\Class_\LogoutSuccessHandlerToLogoutEventSubscriberRector; use Rector\Symfony\Symfony51\Rector\ClassMethod\CommandConstantReturnCodeRector; @@ -222,6 +223,9 @@ // symfony/security-core 4.4 AuthorizationCheckerIsGrantedExtractorRector::class, + // symfony/web-link 4.4 + WebLinkStringRelationsToConstantsRector::class, + // symfony/console 5.1 CommandConstantReturnCodeRector::class, @@ -1124,325 +1128,6 @@ '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'), @@ -3106,759 +2791,6 @@ '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', diff --git a/rules-tests/Symfony44/Rector/MethodCall/WebLinkStringRelationsToConstantsRector/Fixture/replace.php.inc b/rules-tests/Symfony44/Rector/MethodCall/WebLinkStringRelationsToConstantsRector/Fixture/replace.php.inc new file mode 100644 index 00000000..a83201fd --- /dev/null +++ b/rules-tests/Symfony44/Rector/MethodCall/WebLinkStringRelationsToConstantsRector/Fixture/replace.php.inc @@ -0,0 +1,88 @@ +withRel('next'); + $link4 = $link3->withoutRel('dns-prefetch'); + + // 4. Weird mappings that don't follow the standard uppercase pattern + $link5 = (new Link('p3pv1', 'https://example.com'))->withRel('openid2.local_id'); + + // --- SKIPPED CASES (These should NOT be replaced) --- + + // Skip: Unknown/invalid relations that don't exist as constants in Link class + $link6 = clone $link5; + $link6 = $link6->withRel('made-up-relation-string'); + $link7 = clone $link6; + $link7 = clone $link7->withoutRel('another-fake-one'); + $link8 = clone $link7; + $link8 = new Link('fake-constructor-rel', 'https://example.com'); + + // Skip: Non-string arguments (variables, function calls) + $link9 = new Link($dynamicRelation, 'https://example.com'); + $link10 = clone $link9; + $link10 = clone $link10->withRel($dynamicRelation); + + // Skip: Method calls on different classes + $otherClass = new \stdClass(); + $otherClass->withRel('preload'); + } +} + +----- +withRel(\Symfony\Component\WebLink\Link::REL_NEXT); + $link4 = $link3->withoutRel(\Symfony\Component\WebLink\Link::REL_DNS_PREFETCH); + + // 4. Weird mappings that don't follow the standard uppercase pattern + $link5 = (new Link(\Symfony\Component\WebLink\Link::REL_P_3_PV_1, 'https://example.com'))->withRel(\Symfony\Component\WebLink\Link::REL_OPENID_2_LOCAL_ID); + + // --- SKIPPED CASES (These should NOT be replaced) --- + + // Skip: Unknown/invalid relations that don't exist as constants in Link class + $link6 = clone $link5; + $link6 = $link6->withRel('made-up-relation-string'); + $link7 = clone $link6; + $link7 = clone $link7->withoutRel('another-fake-one'); + $link8 = clone $link7; + $link8 = new Link('fake-constructor-rel', 'https://example.com'); + + // Skip: Non-string arguments (variables, function calls) + $link9 = new Link($dynamicRelation, 'https://example.com'); + $link10 = clone $link9; + $link10 = clone $link10->withRel($dynamicRelation); + + // Skip: Method calls on different classes + $otherClass = new \stdClass(); + $otherClass->withRel('preload'); + } +} diff --git a/rules-tests/Symfony44/Rector/MethodCall/WebLinkStringRelationsToConstantsRector/WebLinkStringRelationsToConstantsRectorTest.php b/rules-tests/Symfony44/Rector/MethodCall/WebLinkStringRelationsToConstantsRector/WebLinkStringRelationsToConstantsRectorTest.php new file mode 100644 index 00000000..9d71cc5c --- /dev/null +++ b/rules-tests/Symfony44/Rector/MethodCall/WebLinkStringRelationsToConstantsRector/WebLinkStringRelationsToConstantsRectorTest.php @@ -0,0 +1,28 @@ +doTestFile($filePath); + } + + public static function provideData(): Iterator + { + return self::yieldFilesFromDirectory(__DIR__ . '/Fixture'); + } + + public function provideConfigFilePath(): string + { + return __DIR__ . '/config/configured_rule.php'; + } +} diff --git a/rules-tests/Symfony44/Rector/MethodCall/WebLinkStringRelationsToConstantsRector/config/configured_rule.php b/rules-tests/Symfony44/Rector/MethodCall/WebLinkStringRelationsToConstantsRector/config/configured_rule.php new file mode 100644 index 00000000..8ebd4dc1 --- /dev/null +++ b/rules-tests/Symfony44/Rector/MethodCall/WebLinkStringRelationsToConstantsRector/config/configured_rule.php @@ -0,0 +1,10 @@ +rule(WebLinkStringRelationsToConstantsRector::class); +}; diff --git a/rules/Symfony44/Rector/MethodCall/WebLinkStringRelationsToConstantsRector.php b/rules/Symfony44/Rector/MethodCall/WebLinkStringRelationsToConstantsRector.php new file mode 100644 index 00000000..5bd2e01c --- /dev/null +++ b/rules/Symfony44/Rector/MethodCall/WebLinkStringRelationsToConstantsRector.php @@ -0,0 +1,120 @@ + 'REL_OPENID_2_LOCAL_ID', + 'openid2.provider' => 'REL_OPENID_2_PROVIDER', + 'p3pv1' => 'REL_P_3_PV_1', + ]; + + public function __construct( + private readonly ReflectionProvider $reflectionProvider + ) { + } + + public function provideComposerPackageConstraint(): ComposerPackageConstraint + { + return new ComposerPackageConstraint('symfony/web-link', '>= 4.4'); + } + + public function getRuleDefinition(): RuleDefinition + { + return new RuleDefinition( + 'Change string link relations in WebLink to use Link constants', + [ + new CodeSample( + <<<'CODE_SAMPLE' +use Symfony\Component\WebLink\Link; + +$link = (new Link('preload', 'https://...'))->withRel('next'); +CODE_SAMPLE + , + <<<'CODE_SAMPLE' +use Symfony\Component\WebLink\Link; + +$link = (new Link(Link::REL_PRELOAD, 'https://...'))->withRel(Link::REL_NEXT); +CODE_SAMPLE + ), + ] + ); + } + + public function getNodeTypes(): array + { + return [MethodCall::class, New_::class]; + } + + /** + * @param MethodCall|New_ $node + */ + public function refactor(Node $node): ?Node + { + if ($node instanceof MethodCall) { + if (! $this->isObjectType($node->var, new ObjectType('Symfony\Component\WebLink\Link'))) { + return null; + } + if (! $this->isNames($node->name, ['withRel', 'withoutRel'])) { + return null; + } + } elseif ($node instanceof New_) { + if (! $this->isObjectType($node->class, new ObjectType('Symfony\Component\WebLink\Link'))) { + return null; + } + } + + $args = $node->getArgs(); + if (! isset($args[0])) { + return null; + } + + $valueNode = $args[0]->value; + if (! $valueNode instanceof String_) { + return null; + } + + $constFetch = $this->createConstantFetch($valueNode->value); + if (! $constFetch) { + return null; + } + + $args[0]->value = $constFetch; + + return $node; + } + + private function createConstantFetch(string $relation): ?Node + { + $constName = self::EXACT_MAP[$relation] ?? 'REL_' . strtoupper(str_replace('-', '_', $relation)); + if (! $this->reflectionProvider->hasClass('Symfony\Component\WebLink\Link')) { + return null; + } + + $classReflection = $this->reflectionProvider->getClass('Symfony\Component\WebLink\Link'); + + if (! $classReflection->hasConstant($constName)) { + return null; + } + + return $this->nodeFactory->createClassConstFetch('Symfony\Component\WebLink\Link', $constName); + } +}