Updated Rector to commit 07df7dc1a344c52711441149d61251a4fe10366d

07df7dc1a3 Remove collector interface and fix SpatieEnumClassToEnumRector already has underscore to double underscore (#5473)
This commit is contained in:
Tomas Votruba 2024-01-17 00:27:21 +00:00
parent bb88af4819
commit 5fd03d40bd
10 changed files with 131 additions and 34 deletions

View File

@ -2079,6 +2079,8 @@ return array(
'Rector\\Symfony\\CodeQuality\\Rector\\MethodCall\\LiteralGetToRequestClassConstantRector' => $vendorDir . '/rector/rector-symfony/rules/CodeQuality/Rector/MethodCall/LiteralGetToRequestClassConstantRector.php',
'Rector\\Symfony\\Configs\\ConfigArrayHandler\\NestedConfigCallsFactory' => $vendorDir . '/rector/rector-symfony/rules/Configs/ConfigArrayHandler/NestedConfigCallsFactory.php',
'Rector\\Symfony\\Configs\\ConfigArrayHandler\\SecurityAccessDecisionManagerConfigArrayHandler' => $vendorDir . '/rector/rector-symfony/rules/Configs/ConfigArrayHandler/SecurityAccessDecisionManagerConfigArrayHandler.php',
'Rector\\Symfony\\Configs\\Enum\\DoctrineConfigKey' => $vendorDir . '/rector/rector-symfony/rules/Configs/Enum/DoctrineConfigKey.php',
'Rector\\Symfony\\Configs\\Enum\\GroupingMethods' => $vendorDir . '/rector/rector-symfony/rules/Configs/Enum/GroupingMethods.php',
'Rector\\Symfony\\Configs\\Enum\\SecurityConfigKey' => $vendorDir . '/rector/rector-symfony/rules/Configs/Enum/SecurityConfigKey.php',
'Rector\\Symfony\\Configs\\Rector\\ClassMethod\\AddRouteAnnotationRector' => $vendorDir . '/rector/rector-symfony/rules/Configs/Rector/ClassMethod/AddRouteAnnotationRector.php',
'Rector\\Symfony\\Configs\\Rector\\Closure\\ServiceArgsToServiceNamedArgRector' => $vendorDir . '/rector/rector-symfony/rules/Configs/Rector/Closure/ServiceArgsToServiceNamedArgRector.php',

View File

@ -2293,6 +2293,8 @@ class ComposerStaticInit3aa8fc9c37eb79c784df0b556be25aa0
'Rector\\Symfony\\CodeQuality\\Rector\\MethodCall\\LiteralGetToRequestClassConstantRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/CodeQuality/Rector/MethodCall/LiteralGetToRequestClassConstantRector.php',
'Rector\\Symfony\\Configs\\ConfigArrayHandler\\NestedConfigCallsFactory' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Configs/ConfigArrayHandler/NestedConfigCallsFactory.php',
'Rector\\Symfony\\Configs\\ConfigArrayHandler\\SecurityAccessDecisionManagerConfigArrayHandler' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Configs/ConfigArrayHandler/SecurityAccessDecisionManagerConfigArrayHandler.php',
'Rector\\Symfony\\Configs\\Enum\\DoctrineConfigKey' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Configs/Enum/DoctrineConfigKey.php',
'Rector\\Symfony\\Configs\\Enum\\GroupingMethods' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Configs/Enum/GroupingMethods.php',
'Rector\\Symfony\\Configs\\Enum\\SecurityConfigKey' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Configs/Enum/SecurityConfigKey.php',
'Rector\\Symfony\\Configs\\Rector\\ClassMethod\\AddRouteAnnotationRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Configs/Rector/ClassMethod/AddRouteAnnotationRector.php',
'Rector\\Symfony\\Configs\\Rector\\Closure\\ServiceArgsToServiceNamedArgRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Configs/Rector/Closure/ServiceArgsToServiceNamedArgRector.php',

View File

@ -1867,12 +1867,12 @@
"source": {
"type": "git",
"url": "https:\/\/github.com\/rectorphp\/rector-symfony.git",
"reference": "147897bc7e0075d5c141ed5cc4d9f1f752cf5b37"
"reference": "6d139d7dfc5b2d479aa7ad74aa83428666ee7003"
},
"dist": {
"type": "zip",
"url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-symfony\/zipball\/147897bc7e0075d5c141ed5cc4d9f1f752cf5b37",
"reference": "147897bc7e0075d5c141ed5cc4d9f1f752cf5b37",
"url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-symfony\/zipball\/6d139d7dfc5b2d479aa7ad74aa83428666ee7003",
"reference": "6d139d7dfc5b2d479aa7ad74aa83428666ee7003",
"shasum": ""
},
"require": {
@ -1901,7 +1901,7 @@
"tomasvotruba\/class-leak": "^0.2.6",
"tracy\/tracy": "^2.10"
},
"time": "2024-01-16T17:28:31+00:00",
"time": "2024-01-17T00:22:50+00:00",
"default-branch": true,
"type": "rector-extension",
"extra": {

File diff suppressed because one or more lines are too long

View File

@ -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/rector-build/vendor/rector/rector-doctrine', 'relative_install_path' => '../../rector-doctrine', 'extra' => NULL, 'version' => 'dev-main b419ce7'), 'rector/rector-downgrade-php' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-downgrade-php', 'relative_install_path' => '../../rector-downgrade-php', 'extra' => NULL, 'version' => 'dev-main 51ff6e7'), 'rector/rector-phpunit' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-phpunit', 'relative_install_path' => '../../rector-phpunit', 'extra' => NULL, 'version' => 'dev-main 4581a9a'), 'rector/rector-symfony' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-symfony', 'relative_install_path' => '../../rector-symfony', 'extra' => NULL, 'version' => 'dev-main 147897b'));
public const EXTENSIONS = array('rector/rector-doctrine' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-doctrine', 'relative_install_path' => '../../rector-doctrine', 'extra' => NULL, 'version' => 'dev-main b419ce7'), 'rector/rector-downgrade-php' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-downgrade-php', 'relative_install_path' => '../../rector-downgrade-php', 'extra' => NULL, 'version' => 'dev-main 51ff6e7'), 'rector/rector-phpunit' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-phpunit', 'relative_install_path' => '../../rector-phpunit', 'extra' => NULL, 'version' => 'dev-main 4581a9a'), 'rector/rector-symfony' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-symfony', 'relative_install_path' => '../../rector-symfony', 'extra' => NULL, 'version' => 'dev-main 6d139d7'));
private function __construct()
{
}

View File

@ -17,6 +17,7 @@ use Rector\Rector\AbstractRector;
use Rector\Symfony\CodeQuality\NodeFactory\SymfonyClosureFactory;
use Rector\Symfony\Configs\ConfigArrayHandler\NestedConfigCallsFactory;
use Rector\Symfony\Configs\ConfigArrayHandler\SecurityAccessDecisionManagerConfigArrayHandler;
use Rector\Symfony\Configs\Enum\DoctrineConfigKey;
use Rector\Symfony\Configs\Enum\SecurityConfigKey;
use Rector\Symfony\NodeAnalyzer\SymfonyClosureExtensionMatcher;
use Rector\Symfony\NodeAnalyzer\SymfonyPhpClosureDetector;
@ -145,15 +146,15 @@ CODE_SAMPLE
$splitMany = \false;
$nested = \false;
// doctrine
if (\in_array($key, ['dbal', 'orm'], \true)) {
if (\in_array($key, [DoctrineConfigKey::DBAL, DoctrineConfigKey::ORM], \true)) {
$methodCallName = $key;
$splitMany = \true;
$nested = \true;
} elseif ($key === 'providers') {
$methodCallName = 'provider';
} elseif ($key === SecurityConfigKey::PROVIDERS) {
$methodCallName = SecurityConfigKey::PROVIDER;
$splitMany = \true;
} elseif ($key === 'firewalls') {
$methodCallName = 'firewall';
} elseif ($key === SecurityConfigKey::FIREWALLS) {
$methodCallName = SecurityConfigKey::FIREWALL;
$splitMany = \true;
} elseif ($key === SecurityConfigKey::ACCESS_CONTROL) {
$splitMany = \true;
@ -171,7 +172,9 @@ CODE_SAMPLE
}
if ($splitMany) {
if ($nested) {
$configVariable = new MethodCall($configVariable, $methodCallName);
$currentConfigCaller = new MethodCall($configVariable, $methodCallName);
} else {
$currentConfigCaller = $configVariable;
}
foreach ($value as $itemName => $itemConfiguration) {
if ($nested && \is_array($itemConfiguration)) {
@ -181,11 +184,11 @@ CODE_SAMPLE
// simple call
$args = $this->nodeFactory->createArgs([$itemConfiguration]);
$itemName = StringUtils::underscoreToCamelCase($itemName);
$methodCall = new MethodCall($configVariable, $itemName, $args);
$methodCall = new MethodCall($currentConfigCaller, $itemName, $args);
$methodCallStmts[] = new Expression($methodCall);
continue;
}
$nextMethodCallExpressions = $this->nestedConfigCallsFactory->create([$itemName, $itemConfiguration], $configVariable, $methodCallName);
$nextMethodCallExpressions = $this->nestedConfigCallsFactory->create([$itemConfiguration], $currentConfigCaller, $methodCallName);
$methodCallStmts = \array_merge($methodCallStmts, $nextMethodCallExpressions);
}
} else {

View File

@ -7,7 +7,10 @@ use PhpParser\Node\Expr\MethodCall;
use PhpParser\Node\Expr\Variable;
use PhpParser\Node\Stmt\Expression;
use Rector\PhpParser\Node\NodeFactory;
use Rector\Symfony\Configs\Enum\GroupingMethods;
use Rector\Symfony\Configs\Enum\SecurityConfigKey;
use Rector\Symfony\Utils\StringUtils;
use RectorPrefix202401\Webmozart\Assert\Assert;
final class NestedConfigCallsFactory
{
/**
@ -15,10 +18,6 @@ final class NestedConfigCallsFactory
* @var \Rector\PhpParser\Node\NodeFactory
*/
private $nodeFactory;
/**
* @var array<string, string>
*/
private const GROUPING_METHOD_NAME_TO_SPLIT = ['connections' => 'connection', 'entity_managers' => 'entityManager'];
public function __construct(NodeFactory $nodeFactory)
{
$this->nodeFactory = $nodeFactory;
@ -30,39 +29,78 @@ final class NestedConfigCallsFactory
*/
public function create(array $values, $configCaller, string $mainMethodName) : array
{
unset($values[0]);
$methodCallStmts = [];
foreach ($values as $value) {
if (\is_array($value)) {
// doctrine
foreach (self::GROUPING_METHOD_NAME_TO_SPLIT as $groupingMethodName => $splitMethodName) {
foreach (GroupingMethods::GROUPING_METHOD_NAME_TO_SPLIT as $groupingMethodName => $splitMethodName) {
if ($mainMethodName === $groupingMethodName) {
// @possibly here
foreach ($value as $connectionName => $connectionConfiguration) {
$connectionArgs = $this->nodeFactory->createArgs([$connectionName]);
$connectionMethodCall = new MethodCall($configCaller, $splitMethodName, $connectionArgs);
foreach ($connectionConfiguration as $configurationMethod => $configurationValue) {
$configurationMethod = StringUtils::underscoreToCamelCase($configurationMethod);
$args = $this->nodeFactory->createArgs([$configurationValue]);
$connectionMethodCall = new MethodCall($connectionMethodCall, $configurationMethod, $args);
}
$connectionMethodCall = $this->createMainMethodCall($connectionConfiguration, $connectionMethodCall);
$methodCallStmts[] = new Expression($connectionMethodCall);
}
continue 2;
}
}
$mainMethodCall = new MethodCall($configCaller, $mainMethodName);
foreach ($value as $methodName => $parameters) {
// security
if ($methodName === 'role') {
$methodName = 'roles';
$parameters = [$parameters];
}
$args = $this->nodeFactory->createArgs([$parameters]);
$mainMethodCall = new MethodCall($mainMethodCall, $methodName, $args);
}
$mainMethodCall = $this->createMainMethodCall($value, $mainMethodCall);
$methodCallStmts[] = new Expression($mainMethodCall);
}
}
return $methodCallStmts;
}
/**
* @param array<mixed, mixed> $value
*/
private function createMainMethodCall(array $value, MethodCall $mainMethodCall) : MethodCall
{
foreach ($value as $methodName => $parameters) {
// security
if ($methodName === SecurityConfigKey::ROLE) {
$methodName = SecurityConfigKey::ROLES;
$parameters = [$parameters];
} else {
Assert::string($methodName);
$methodName = StringUtils::underscoreToCamelCase($methodName);
}
if (isset(GroupingMethods::GROUPING_METHOD_NAME_TO_SPLIT[$methodName])) {
$splitMethodName = GroupingMethods::GROUPING_METHOD_NAME_TO_SPLIT[$methodName];
\reset($parameters);
$itemName = \key($parameters);
$args = $this->nodeFactory->createArgs([$itemName]);
$parameters = $parameters[$itemName];
$mainMethodCall = new MethodCall($mainMethodCall, $splitMethodName, $args);
return $this->createMainMethodCall($parameters, $mainMethodCall);
}
// traverse nested arrays with recursion call
$arrayIsListFunction = function (array $array) : bool {
if (\function_exists('array_is_list')) {
return \array_is_list($array);
}
if ($array === []) {
return \true;
}
$current_key = 0;
foreach ($array as $key => $noop) {
if ($key !== $current_key) {
return \false;
}
++$current_key;
}
return \true;
};
// traverse nested arrays with recursion call
if (\is_array($parameters) && !$arrayIsListFunction($parameters)) {
$mainMethodCall = new MethodCall($mainMethodCall, $methodName);
$mainMethodCall = $this->createMainMethodCall($parameters, $mainMethodCall);
continue;
}
$args = $this->nodeFactory->createArgs([$parameters]);
$mainMethodCall = new MethodCall($mainMethodCall, $methodName, $args);
}
return $mainMethodCall;
}
}

View File

@ -0,0 +1,16 @@
<?php
declare (strict_types=1);
namespace Rector\Symfony\Configs\Enum;
final class DoctrineConfigKey
{
/**
* @var string
*/
public const DBAL = 'dbal';
/**
* @var string
*/
public const ORM = 'orm';
}

View File

@ -0,0 +1,12 @@
<?php
declare (strict_types=1);
namespace Rector\Symfony\Configs\Enum;
final class GroupingMethods
{
/**
* @var array<string, string>
*/
public const GROUPING_METHOD_NAME_TO_SPLIT = ['connections' => 'connection', 'entity_managers' => 'entityManager', 'mappings' => 'mapping'];
}

View File

@ -17,4 +17,28 @@ final class SecurityConfigKey
* @var string
*/
public const ENTITY = 'entity';
/**
* @var string
*/
public const ROLE = 'role';
/**
* @var string
*/
public const ROLES = 'roles';
/**
* @var string
*/
public const FIREWALLS = 'firewalls';
/**
* @var string
*/
public const FIREWALL = 'firewall';
/**
* @var string
*/
public const PROVIDERS = 'providers';
/**
* @var string
*/
public const PROVIDER = 'provider';
}