mirror of
https://github.com/rectorphp/rector.git
synced 2025-04-13 03:52:15 +02:00
Updated Rector to commit 3962227709fda9312f07d6a516a1ee405b392489
3962227709
[NodeTypeResolver] Reduce duplicated Scope fill on FuncCall (#4428)
This commit is contained in:
parent
ef629ad2ed
commit
7f5bbceea9
2
vendor/autoload.php
vendored
2
vendor/autoload.php
vendored
@ -22,4 +22,4 @@ if (PHP_VERSION_ID < 50600) {
|
||||
|
||||
require_once __DIR__ . '/composer/autoload_real.php';
|
||||
|
||||
return ComposerAutoloaderInit68dc9a71c71d913b72bc01518a87a1ab::getLoader();
|
||||
return ComposerAutoloaderInita8d21e99d7187362404e17256fd9714c::getLoader();
|
||||
|
4
vendor/composer/autoload_classmap.php
vendored
4
vendor/composer/autoload_classmap.php
vendored
@ -2559,15 +2559,12 @@ return array(
|
||||
'Rector\\Symfony\\NodeFactory\\ArrayFromCompactFactory' => $vendorDir . '/rector/rector-symfony/src/NodeFactory/ArrayFromCompactFactory.php',
|
||||
'Rector\\Symfony\\NodeFactory\\BareLogoutClassMethodFactory' => $vendorDir . '/rector/rector-symfony/src/NodeFactory/BareLogoutClassMethodFactory.php',
|
||||
'Rector\\Symfony\\NodeFactory\\EventReferenceFactory' => $vendorDir . '/rector/rector-symfony/src/NodeFactory/EventReferenceFactory.php',
|
||||
'Rector\\Symfony\\NodeFactory\\FormType\\BuildFormOptionAssignsFactory' => $vendorDir . '/rector/rector-symfony/src/NodeFactory/FormType/BuildFormOptionAssignsFactory.php',
|
||||
'Rector\\Symfony\\NodeFactory\\FormType\\ConfigureDefaultsFactory' => $vendorDir . '/rector/rector-symfony/src/NodeFactory/FormType/ConfigureDefaultsFactory.php',
|
||||
'Rector\\Symfony\\NodeFactory\\GetSubscribedEventsClassMethodFactory' => $vendorDir . '/rector/rector-symfony/src/NodeFactory/GetSubscribedEventsClassMethodFactory.php',
|
||||
'Rector\\Symfony\\NodeFactory\\OnLogoutClassMethodFactory' => $vendorDir . '/rector/rector-symfony/src/NodeFactory/OnLogoutClassMethodFactory.php',
|
||||
'Rector\\Symfony\\NodeFactory\\OnSuccessLogoutClassMethodFactory' => $vendorDir . '/rector/rector-symfony/src/NodeFactory/OnSuccessLogoutClassMethodFactory.php',
|
||||
'Rector\\Symfony\\NodeFactory\\ThisRenderFactory' => $vendorDir . '/rector/rector-symfony/src/NodeFactory/ThisRenderFactory.php',
|
||||
'Rector\\Symfony\\NodeFinder\\EmptyReturnNodeFinder' => $vendorDir . '/rector/rector-symfony/src/NodeFinder/EmptyReturnNodeFinder.php',
|
||||
'Rector\\Symfony\\NodeManipulator\\ClassManipulator' => $vendorDir . '/rector/rector-symfony/src/NodeManipulator/ClassManipulator.php',
|
||||
'Rector\\Symfony\\NodeRemover\\ConstructorDependencyRemover' => $vendorDir . '/rector/rector-symfony/src/NodeRemover/ConstructorDependencyRemover.php',
|
||||
'Rector\\Symfony\\PhpDocNode\\SymfonyRouteTagValueNodeFactory' => $vendorDir . '/rector/rector-symfony/src/PhpDocNode/SymfonyRouteTagValueNodeFactory.php',
|
||||
'Rector\\Symfony\\Rector\\ClassMethod\\AddRouteAnnotationRector' => $vendorDir . '/rector/rector-symfony/src/Rector/ClassMethod/AddRouteAnnotationRector.php',
|
||||
'Rector\\Symfony\\Rector\\Closure\\ServiceArgsToServiceNamedArgRector' => $vendorDir . '/rector/rector-symfony/src/Rector/Closure/ServiceArgsToServiceNamedArgRector.php',
|
||||
@ -2591,7 +2588,6 @@ return array(
|
||||
'Rector\\Symfony\\Symfony30\\Rector\\ClassMethod\\FormTypeGetParentRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony30/Rector/ClassMethod/FormTypeGetParentRector.php',
|
||||
'Rector\\Symfony\\Symfony30\\Rector\\ClassMethod\\GetRequestRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony30/Rector/ClassMethod/GetRequestRector.php',
|
||||
'Rector\\Symfony\\Symfony30\\Rector\\ClassMethod\\RemoveDefaultGetBlockPrefixRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony30/Rector/ClassMethod/RemoveDefaultGetBlockPrefixRector.php',
|
||||
'Rector\\Symfony\\Symfony30\\Rector\\Class_\\FormTypeWithDependencyToOptionsRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony30/Rector/Class_/FormTypeWithDependencyToOptionsRector.php',
|
||||
'Rector\\Symfony\\Symfony30\\Rector\\MethodCall\\ChangeStringCollectionOptionToConstantRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony30/Rector/MethodCall/ChangeStringCollectionOptionToConstantRector.php',
|
||||
'Rector\\Symfony\\Symfony30\\Rector\\MethodCall\\FormTypeInstanceToClassConstRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony30/Rector/MethodCall/FormTypeInstanceToClassConstRector.php',
|
||||
'Rector\\Symfony\\Symfony30\\Rector\\MethodCall\\OptionNameRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony30/Rector/MethodCall/OptionNameRector.php',
|
||||
|
10
vendor/composer/autoload_real.php
vendored
10
vendor/composer/autoload_real.php
vendored
@ -2,7 +2,7 @@
|
||||
|
||||
// autoload_real.php @generated by Composer
|
||||
|
||||
class ComposerAutoloaderInit68dc9a71c71d913b72bc01518a87a1ab
|
||||
class ComposerAutoloaderInita8d21e99d7187362404e17256fd9714c
|
||||
{
|
||||
private static $loader;
|
||||
|
||||
@ -22,17 +22,17 @@ class ComposerAutoloaderInit68dc9a71c71d913b72bc01518a87a1ab
|
||||
return self::$loader;
|
||||
}
|
||||
|
||||
spl_autoload_register(array('ComposerAutoloaderInit68dc9a71c71d913b72bc01518a87a1ab', 'loadClassLoader'), true, true);
|
||||
spl_autoload_register(array('ComposerAutoloaderInita8d21e99d7187362404e17256fd9714c', 'loadClassLoader'), true, true);
|
||||
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
|
||||
spl_autoload_unregister(array('ComposerAutoloaderInit68dc9a71c71d913b72bc01518a87a1ab', 'loadClassLoader'));
|
||||
spl_autoload_unregister(array('ComposerAutoloaderInita8d21e99d7187362404e17256fd9714c', 'loadClassLoader'));
|
||||
|
||||
require __DIR__ . '/autoload_static.php';
|
||||
call_user_func(\Composer\Autoload\ComposerStaticInit68dc9a71c71d913b72bc01518a87a1ab::getInitializer($loader));
|
||||
call_user_func(\Composer\Autoload\ComposerStaticInita8d21e99d7187362404e17256fd9714c::getInitializer($loader));
|
||||
|
||||
$loader->setClassMapAuthoritative(true);
|
||||
$loader->register(true);
|
||||
|
||||
$filesToLoad = \Composer\Autoload\ComposerStaticInit68dc9a71c71d913b72bc01518a87a1ab::$files;
|
||||
$filesToLoad = \Composer\Autoload\ComposerStaticInita8d21e99d7187362404e17256fd9714c::$files;
|
||||
$requireFile = \Closure::bind(static function ($fileIdentifier, $file) {
|
||||
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
||||
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
|
||||
|
12
vendor/composer/autoload_static.php
vendored
12
vendor/composer/autoload_static.php
vendored
@ -4,7 +4,7 @@
|
||||
|
||||
namespace Composer\Autoload;
|
||||
|
||||
class ComposerStaticInit68dc9a71c71d913b72bc01518a87a1ab
|
||||
class ComposerStaticInita8d21e99d7187362404e17256fd9714c
|
||||
{
|
||||
public static $files = array (
|
||||
'ad155f8f1cf0d418fe49e248db8c661b' => __DIR__ . '/..' . '/react/promise/src/functions_include.php',
|
||||
@ -2811,15 +2811,12 @@ class ComposerStaticInit68dc9a71c71d913b72bc01518a87a1ab
|
||||
'Rector\\Symfony\\NodeFactory\\ArrayFromCompactFactory' => __DIR__ . '/..' . '/rector/rector-symfony/src/NodeFactory/ArrayFromCompactFactory.php',
|
||||
'Rector\\Symfony\\NodeFactory\\BareLogoutClassMethodFactory' => __DIR__ . '/..' . '/rector/rector-symfony/src/NodeFactory/BareLogoutClassMethodFactory.php',
|
||||
'Rector\\Symfony\\NodeFactory\\EventReferenceFactory' => __DIR__ . '/..' . '/rector/rector-symfony/src/NodeFactory/EventReferenceFactory.php',
|
||||
'Rector\\Symfony\\NodeFactory\\FormType\\BuildFormOptionAssignsFactory' => __DIR__ . '/..' . '/rector/rector-symfony/src/NodeFactory/FormType/BuildFormOptionAssignsFactory.php',
|
||||
'Rector\\Symfony\\NodeFactory\\FormType\\ConfigureDefaultsFactory' => __DIR__ . '/..' . '/rector/rector-symfony/src/NodeFactory/FormType/ConfigureDefaultsFactory.php',
|
||||
'Rector\\Symfony\\NodeFactory\\GetSubscribedEventsClassMethodFactory' => __DIR__ . '/..' . '/rector/rector-symfony/src/NodeFactory/GetSubscribedEventsClassMethodFactory.php',
|
||||
'Rector\\Symfony\\NodeFactory\\OnLogoutClassMethodFactory' => __DIR__ . '/..' . '/rector/rector-symfony/src/NodeFactory/OnLogoutClassMethodFactory.php',
|
||||
'Rector\\Symfony\\NodeFactory\\OnSuccessLogoutClassMethodFactory' => __DIR__ . '/..' . '/rector/rector-symfony/src/NodeFactory/OnSuccessLogoutClassMethodFactory.php',
|
||||
'Rector\\Symfony\\NodeFactory\\ThisRenderFactory' => __DIR__ . '/..' . '/rector/rector-symfony/src/NodeFactory/ThisRenderFactory.php',
|
||||
'Rector\\Symfony\\NodeFinder\\EmptyReturnNodeFinder' => __DIR__ . '/..' . '/rector/rector-symfony/src/NodeFinder/EmptyReturnNodeFinder.php',
|
||||
'Rector\\Symfony\\NodeManipulator\\ClassManipulator' => __DIR__ . '/..' . '/rector/rector-symfony/src/NodeManipulator/ClassManipulator.php',
|
||||
'Rector\\Symfony\\NodeRemover\\ConstructorDependencyRemover' => __DIR__ . '/..' . '/rector/rector-symfony/src/NodeRemover/ConstructorDependencyRemover.php',
|
||||
'Rector\\Symfony\\PhpDocNode\\SymfonyRouteTagValueNodeFactory' => __DIR__ . '/..' . '/rector/rector-symfony/src/PhpDocNode/SymfonyRouteTagValueNodeFactory.php',
|
||||
'Rector\\Symfony\\Rector\\ClassMethod\\AddRouteAnnotationRector' => __DIR__ . '/..' . '/rector/rector-symfony/src/Rector/ClassMethod/AddRouteAnnotationRector.php',
|
||||
'Rector\\Symfony\\Rector\\Closure\\ServiceArgsToServiceNamedArgRector' => __DIR__ . '/..' . '/rector/rector-symfony/src/Rector/Closure/ServiceArgsToServiceNamedArgRector.php',
|
||||
@ -2843,7 +2840,6 @@ class ComposerStaticInit68dc9a71c71d913b72bc01518a87a1ab
|
||||
'Rector\\Symfony\\Symfony30\\Rector\\ClassMethod\\FormTypeGetParentRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony30/Rector/ClassMethod/FormTypeGetParentRector.php',
|
||||
'Rector\\Symfony\\Symfony30\\Rector\\ClassMethod\\GetRequestRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony30/Rector/ClassMethod/GetRequestRector.php',
|
||||
'Rector\\Symfony\\Symfony30\\Rector\\ClassMethod\\RemoveDefaultGetBlockPrefixRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony30/Rector/ClassMethod/RemoveDefaultGetBlockPrefixRector.php',
|
||||
'Rector\\Symfony\\Symfony30\\Rector\\Class_\\FormTypeWithDependencyToOptionsRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony30/Rector/Class_/FormTypeWithDependencyToOptionsRector.php',
|
||||
'Rector\\Symfony\\Symfony30\\Rector\\MethodCall\\ChangeStringCollectionOptionToConstantRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony30/Rector/MethodCall/ChangeStringCollectionOptionToConstantRector.php',
|
||||
'Rector\\Symfony\\Symfony30\\Rector\\MethodCall\\FormTypeInstanceToClassConstRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony30/Rector/MethodCall/FormTypeInstanceToClassConstRector.php',
|
||||
'Rector\\Symfony\\Symfony30\\Rector\\MethodCall\\OptionNameRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony30/Rector/MethodCall/OptionNameRector.php',
|
||||
@ -3098,9 +3094,9 @@ class ComposerStaticInit68dc9a71c71d913b72bc01518a87a1ab
|
||||
public static function getInitializer(ClassLoader $loader)
|
||||
{
|
||||
return \Closure::bind(function () use ($loader) {
|
||||
$loader->prefixLengthsPsr4 = ComposerStaticInit68dc9a71c71d913b72bc01518a87a1ab::$prefixLengthsPsr4;
|
||||
$loader->prefixDirsPsr4 = ComposerStaticInit68dc9a71c71d913b72bc01518a87a1ab::$prefixDirsPsr4;
|
||||
$loader->classMap = ComposerStaticInit68dc9a71c71d913b72bc01518a87a1ab::$classMap;
|
||||
$loader->prefixLengthsPsr4 = ComposerStaticInita8d21e99d7187362404e17256fd9714c::$prefixLengthsPsr4;
|
||||
$loader->prefixDirsPsr4 = ComposerStaticInita8d21e99d7187362404e17256fd9714c::$prefixDirsPsr4;
|
||||
$loader->classMap = ComposerStaticInita8d21e99d7187362404e17256fd9714c::$classMap;
|
||||
|
||||
}, null, ClassLoader::class);
|
||||
}
|
||||
|
8
vendor/composer/installed.json
vendored
8
vendor/composer/installed.json
vendored
@ -2121,12 +2121,12 @@
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https:\/\/github.com\/rectorphp\/rector-symfony.git",
|
||||
"reference": "754563d13d48830310c51c4b231f0570f4d1b7d8"
|
||||
"reference": "23da46cac1eeeb675a07ee10f74a7c4513db1802"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-symfony\/zipball\/754563d13d48830310c51c4b231f0570f4d1b7d8",
|
||||
"reference": "754563d13d48830310c51c4b231f0570f4d1b7d8",
|
||||
"url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-symfony\/zipball\/23da46cac1eeeb675a07ee10f74a7c4513db1802",
|
||||
"reference": "23da46cac1eeeb675a07ee10f74a7c4513db1802",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -2156,7 +2156,7 @@
|
||||
"tomasvotruba\/type-coverage": "^0.2",
|
||||
"tomasvotruba\/unused-public": "^0.1"
|
||||
},
|
||||
"time": "2023-07-06T15:15:10+00:00",
|
||||
"time": "2023-07-06T18:46:27+00:00",
|
||||
"default-branch": true,
|
||||
"type": "rector-extension",
|
||||
"extra": {
|
||||
|
2
vendor/composer/installed.php
vendored
2
vendor/composer/installed.php
vendored
File diff suppressed because one or more lines are too long
@ -9,7 +9,7 @@ namespace Rector\RectorInstaller;
|
||||
*/
|
||||
final class GeneratedConfig
|
||||
{
|
||||
public const EXTENSIONS = array('rector/rector-doctrine' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-doctrine', 'relative_install_path' => '../../rector-doctrine', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => 'dev-main fc2dbbd'), 'rector/rector-downgrade-php' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-downgrade-php', 'relative_install_path' => '../../rector-downgrade-php', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => 'dev-main 57ad03c'), 'rector/rector-phpunit' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-phpunit', 'relative_install_path' => '../../rector-phpunit', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => 'dev-main c6bf48b'), 'rector/rector-symfony' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-symfony', 'relative_install_path' => '../../rector-symfony', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => 'dev-main 754563d'));
|
||||
public const EXTENSIONS = array('rector/rector-doctrine' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-doctrine', 'relative_install_path' => '../../rector-doctrine', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => 'dev-main fc2dbbd'), 'rector/rector-downgrade-php' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-downgrade-php', 'relative_install_path' => '../../rector-downgrade-php', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => 'dev-main 57ad03c'), 'rector/rector-phpunit' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-phpunit', 'relative_install_path' => '../../rector-phpunit', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => 'dev-main c6bf48b'), 'rector/rector-symfony' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-symfony', 'relative_install_path' => '../../rector-symfony', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => 'dev-main 23da46c'));
|
||||
private function __construct()
|
||||
{
|
||||
}
|
||||
|
@ -9,7 +9,6 @@ use Rector\Renaming\Rector\MethodCall\RenameMethodRector;
|
||||
use Rector\Renaming\Rector\Name\RenameClassRector;
|
||||
use Rector\Renaming\ValueObject\MethodCallRename;
|
||||
use Rector\Renaming\ValueObject\RenameClassConstFetch;
|
||||
use Rector\Symfony\Symfony30\Rector\Class_\FormTypeWithDependencyToOptionsRector;
|
||||
use Rector\Symfony\Symfony30\Rector\ClassMethod\FormTypeGetParentRector;
|
||||
use Rector\Symfony\Symfony30\Rector\ClassMethod\GetRequestRector;
|
||||
use Rector\Symfony\Symfony30\Rector\ClassMethod\RemoveDefaultGetBlockPrefixRector;
|
||||
@ -31,7 +30,6 @@ return static function (RectorConfig $rectorConfig) : void {
|
||||
FormTypeInstanceToClassConstRector::class,
|
||||
StringFormTypeToClassRector::class,
|
||||
RemoveDefaultGetBlockPrefixRector::class,
|
||||
FormTypeWithDependencyToOptionsRector::class,
|
||||
// forms - collection
|
||||
ChangeStringCollectionOptionToConstantRector::class,
|
||||
]);
|
||||
|
@ -1,171 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare (strict_types=1);
|
||||
namespace Rector\Symfony\Symfony30\Rector\Class_;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Expr\PropertyFetch;
|
||||
use PhpParser\Node\Expr\Variable;
|
||||
use PhpParser\Node\Stmt\Class_;
|
||||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
use PhpParser\Node\Stmt\Property;
|
||||
use PHPStan\Type\ObjectType;
|
||||
use Rector\Core\Rector\AbstractRector;
|
||||
use Rector\Core\ValueObject\MethodName;
|
||||
use Rector\Symfony\NodeFactory\FormType\BuildFormOptionAssignsFactory;
|
||||
use Rector\Symfony\NodeFactory\FormType\ConfigureDefaultsFactory;
|
||||
use Rector\Symfony\NodeRemover\ConstructorDependencyRemover;
|
||||
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
|
||||
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
|
||||
/**
|
||||
* @changelog https://speakerdeck.com/webmozart/symfony-forms-101?slide=24
|
||||
*
|
||||
* @see \Rector\Symfony\Tests\Symfony30\Rector\Class_\FormTypeWithDependencyToOptionsRector\FormTypeWithDependencyToOptionsRectorTest
|
||||
*/
|
||||
final class FormTypeWithDependencyToOptionsRector extends AbstractRector
|
||||
{
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Symfony\NodeFactory\FormType\BuildFormOptionAssignsFactory
|
||||
*/
|
||||
private $buildFormOptionAssignsFactory;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Symfony\NodeRemover\ConstructorDependencyRemover
|
||||
*/
|
||||
private $constructorDependencyRemover;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Symfony\NodeFactory\FormType\ConfigureDefaultsFactory
|
||||
*/
|
||||
private $configureDefaultsFactory;
|
||||
public function __construct(BuildFormOptionAssignsFactory $buildFormOptionAssignsFactory, ConstructorDependencyRemover $constructorDependencyRemover, ConfigureDefaultsFactory $configureDefaultsFactory)
|
||||
{
|
||||
$this->buildFormOptionAssignsFactory = $buildFormOptionAssignsFactory;
|
||||
$this->constructorDependencyRemover = $constructorDependencyRemover;
|
||||
$this->configureDefaultsFactory = $configureDefaultsFactory;
|
||||
}
|
||||
public function getRuleDefinition() : RuleDefinition
|
||||
{
|
||||
return new RuleDefinition('Move constructor dependency from form type class to an $options parameter', [new CodeSample(<<<'CODE_SAMPLE'
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
|
||||
final class FormTypeWithDependency extends AbstractType
|
||||
{
|
||||
private Agent $agent;
|
||||
|
||||
public function __construct(Agent $agent)
|
||||
{
|
||||
$this->agent = $agent;
|
||||
}
|
||||
|
||||
public function buildForm(FormBuilderInterface $builder, array $options): void
|
||||
{
|
||||
if ($this->agent) {
|
||||
$builder->add('agent', TextType::class);
|
||||
}
|
||||
}
|
||||
}
|
||||
CODE_SAMPLE
|
||||
, <<<'CODE_SAMPLE'
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
|
||||
final class FormTypeWithDependency extends AbstractType
|
||||
{
|
||||
public function buildForm(FormBuilderInterface $builder, array $options): void
|
||||
{
|
||||
$agent = $options['agent'];
|
||||
|
||||
if ($agent) {
|
||||
$builder->add('agent', TextType::class);
|
||||
}
|
||||
}
|
||||
}
|
||||
CODE_SAMPLE
|
||||
)]);
|
||||
}
|
||||
/**
|
||||
* @return array<class-string<Node>>
|
||||
*/
|
||||
public function getNodeTypes() : array
|
||||
{
|
||||
return [Class_::class];
|
||||
}
|
||||
/**
|
||||
* @param Class_ $node
|
||||
*/
|
||||
public function refactor(Node $node) : ?Node
|
||||
{
|
||||
// skip abstract
|
||||
if ($node->isAbstract()) {
|
||||
return null;
|
||||
}
|
||||
$formObjectType = new ObjectType('Symfony\\Component\\Form\\AbstractType');
|
||||
if (!$this->isObjectType($node, $formObjectType)) {
|
||||
return null;
|
||||
}
|
||||
$constructorClassMethod = $node->getMethod(MethodName::CONSTRUCT);
|
||||
if (!$constructorClassMethod instanceof ClassMethod) {
|
||||
return null;
|
||||
}
|
||||
$params = $constructorClassMethod->getParams();
|
||||
if ($params === []) {
|
||||
return null;
|
||||
}
|
||||
$buildFormClassMethod = $node->getMethod('buildForm');
|
||||
if (!$buildFormClassMethod instanceof ClassMethod) {
|
||||
// form has to have some items
|
||||
return null;
|
||||
}
|
||||
$paramNames = $this->nodeNameResolver->getNames($params);
|
||||
// 1. add assigns at start of ClassMethod
|
||||
$assignExpressions = $this->buildFormOptionAssignsFactory->createDimFetchAssignsFromParamNames($paramNames);
|
||||
$buildFormClassMethod->stmts = \array_merge($assignExpressions, (array) $buildFormClassMethod->stmts);
|
||||
// 2. remove properties
|
||||
foreach ($node->stmts as $key => $stmt) {
|
||||
if (!$stmt instanceof Property) {
|
||||
continue;
|
||||
}
|
||||
if (!$this->isNames($stmt, $paramNames)) {
|
||||
continue;
|
||||
}
|
||||
unset($node->stmts[$key]);
|
||||
}
|
||||
// 3. cleanup ctor
|
||||
$this->constructorDependencyRemover->removeParamsByName($constructorClassMethod, $paramNames);
|
||||
$this->replacePropertyFetchesByVariables($buildFormClassMethod, $paramNames);
|
||||
// 4. add configure options class method
|
||||
$classMethod = $this->configureDefaultsFactory->create($paramNames);
|
||||
$node->stmts[] = $classMethod;
|
||||
return $node;
|
||||
}
|
||||
/**
|
||||
* 4. replace property fetches in buildForm() by just assigned variable
|
||||
*
|
||||
* @param string[] $paramNames
|
||||
*/
|
||||
private function replacePropertyFetchesByVariables(ClassMethod $classMethod, array $paramNames) : void
|
||||
{
|
||||
$this->traverseNodesWithCallable((array) $classMethod->stmts, function (Node $node) use($paramNames) : ?Variable {
|
||||
if (!$node instanceof PropertyFetch) {
|
||||
return null;
|
||||
}
|
||||
if (!$this->nodeNameResolver->isName($node->var, 'this')) {
|
||||
return null;
|
||||
}
|
||||
if (!$this->nodeNameResolver->isNames($node->name, $paramNames)) {
|
||||
return null;
|
||||
}
|
||||
// replace by variable
|
||||
$variableName = $this->getName($node->name);
|
||||
if (!\is_string($variableName)) {
|
||||
return null;
|
||||
}
|
||||
return new Variable($variableName);
|
||||
});
|
||||
}
|
||||
}
|
@ -1,27 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare (strict_types=1);
|
||||
namespace Rector\Symfony\NodeFactory\FormType;
|
||||
|
||||
use PhpParser\Node\Expr\ArrayDimFetch;
|
||||
use PhpParser\Node\Expr\Assign;
|
||||
use PhpParser\Node\Expr\Variable;
|
||||
use PhpParser\Node\Scalar\String_;
|
||||
use PhpParser\Node\Stmt\Expression;
|
||||
final class BuildFormOptionAssignsFactory
|
||||
{
|
||||
/**
|
||||
* @param string[] $paramNames
|
||||
* @return Expression[]
|
||||
*/
|
||||
public function createDimFetchAssignsFromParamNames(array $paramNames) : array
|
||||
{
|
||||
$expressions = [];
|
||||
foreach ($paramNames as $paramName) {
|
||||
$arrayDimFetch = new ArrayDimFetch(new Variable('options'), new String_($paramName));
|
||||
$assign = new Assign(new Variable($paramName), $arrayDimFetch);
|
||||
$expressions[] = new Expression($assign);
|
||||
}
|
||||
return $expressions;
|
||||
}
|
||||
}
|
@ -1,39 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare (strict_types=1);
|
||||
namespace Rector\Symfony\NodeFactory\FormType;
|
||||
|
||||
use PhpParser\Node\Arg;
|
||||
use PhpParser\Node\Expr\Array_;
|
||||
use PhpParser\Node\Expr\ArrayItem;
|
||||
use PhpParser\Node\Expr\ConstFetch;
|
||||
use PhpParser\Node\Expr\MethodCall;
|
||||
use PhpParser\Node\Expr\Variable;
|
||||
use PhpParser\Node\Name;
|
||||
use PhpParser\Node\Name\FullyQualified;
|
||||
use PhpParser\Node\Param;
|
||||
use PhpParser\Node\Scalar\String_;
|
||||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
use PhpParser\Node\Stmt\Expression;
|
||||
use Rector\Core\ValueObject\Visibility;
|
||||
final class ConfigureDefaultsFactory
|
||||
{
|
||||
/**
|
||||
* @param string[] $paramNames
|
||||
*/
|
||||
public function create(array $paramNames) : ClassMethod
|
||||
{
|
||||
$configureOptionsClassMethod = new ClassMethod('configureOptions');
|
||||
$configureOptionsClassMethod->flags = Visibility::PUBLIC;
|
||||
$optionsResolverVariable = new Variable('optionsResolver');
|
||||
$configureOptionsClassMethod->params[] = new Param($optionsResolverVariable, null, new FullyQualified('Symfony\\Component\\OptionsResolver\\OptionsResolver'));
|
||||
$arrayItems = [];
|
||||
foreach ($paramNames as $paramName) {
|
||||
$arrayItems[] = new ArrayItem(new ConstFetch(new Name('null')), new String_($paramName));
|
||||
}
|
||||
$array = new Array_($arrayItems);
|
||||
$methodCall = new MethodCall($optionsResolverVariable, 'setDefaults', [new Arg($array)]);
|
||||
$configureOptionsClassMethod->stmts[] = new Expression($methodCall);
|
||||
return $configureOptionsClassMethod;
|
||||
}
|
||||
}
|
@ -1,70 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare (strict_types=1);
|
||||
namespace Rector\Symfony\NodeRemover;
|
||||
|
||||
use PhpParser\Node\Expr\Assign;
|
||||
use PhpParser\Node\Expr\PropertyFetch;
|
||||
use PhpParser\Node\Expr\Variable;
|
||||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
use PhpParser\Node\Stmt\Expression;
|
||||
use Rector\NodeNameResolver\NodeNameResolver;
|
||||
final class ConstructorDependencyRemover
|
||||
{
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\NodeNameResolver\NodeNameResolver
|
||||
*/
|
||||
private $nodeNameResolver;
|
||||
public function __construct(NodeNameResolver $nodeNameResolver)
|
||||
{
|
||||
$this->nodeNameResolver = $nodeNameResolver;
|
||||
}
|
||||
/**
|
||||
* @param string[] $paramNames
|
||||
*/
|
||||
public function removeParamsByName(ClassMethod $classMethod, array $paramNames) : ClassMethod
|
||||
{
|
||||
$this->removeParams($classMethod, $paramNames);
|
||||
return $this->removeAssigns($classMethod, $paramNames);
|
||||
}
|
||||
/**
|
||||
* @param string[] $paramNames
|
||||
*/
|
||||
private function removeParams(ClassMethod $classMethod, array $paramNames) : void
|
||||
{
|
||||
foreach ($classMethod->params as $key => $param) {
|
||||
if (!$this->nodeNameResolver->isNames($param, $paramNames)) {
|
||||
continue;
|
||||
}
|
||||
unset($classMethod->params[$key]);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* @param string[] $paramNames
|
||||
*/
|
||||
private function removeAssigns(ClassMethod $classMethod, array $paramNames) : ClassMethod
|
||||
{
|
||||
// remove assign
|
||||
foreach ((array) $classMethod->stmts as $stmtKey => $stmt) {
|
||||
if (!$stmt instanceof Expression) {
|
||||
continue;
|
||||
}
|
||||
if (!$stmt->expr instanceof Assign) {
|
||||
continue;
|
||||
}
|
||||
$assign = $stmt->expr;
|
||||
if (!$assign->expr instanceof Variable) {
|
||||
continue;
|
||||
}
|
||||
if (!$assign->var instanceof PropertyFetch) {
|
||||
continue;
|
||||
}
|
||||
if (!$this->nodeNameResolver->isNames($assign->expr, $paramNames)) {
|
||||
continue;
|
||||
}
|
||||
unset($classMethod->stmts[$stmtKey]);
|
||||
}
|
||||
return $classMethod;
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user