mirror of https://github.com/rectorphp/rector.git
Updated Rector to commit 86682e4848dcfaecdb6dac7d07ffcb4cd47e69bf
86682e4848
Less doc, move from NodeRemover from AbstractRector - use directly or remove nodes right at the moment - that creates safer tree (#2741)
This commit is contained in:
parent
7e0a2dbc82
commit
089ad6e357
|
@ -100,7 +100,7 @@ final class NodeRemover
|
|||
*/
|
||||
public function removeArg($node, int $key) : void
|
||||
{
|
||||
if ($node->args === null) {
|
||||
if ($node->getArgs() === []) {
|
||||
throw new ShouldNotHappenException();
|
||||
}
|
||||
// already removed
|
||||
|
@ -111,13 +111,4 @@ final class NodeRemover
|
|||
$this->rectorChangeCollector->notifyNodeFileInfo($node->args[$key]);
|
||||
unset($node->args[$key]);
|
||||
}
|
||||
public function removeImplements(Class_ $class, int $key) : void
|
||||
{
|
||||
if ($class->implements === null) {
|
||||
throw new ShouldNotHappenException();
|
||||
}
|
||||
// notify about remove node
|
||||
$this->rectorChangeCollector->notifyNodeFileInfo($class->implements[$key]);
|
||||
unset($class->implements[$key]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -55,7 +55,7 @@ CODE_SAMPLE
|
|||
if ($removedFunctionArgument->getArgumentPosition() !== $position) {
|
||||
continue;
|
||||
}
|
||||
$this->nodeRemover->removeArg($node, $position);
|
||||
unset($node->args[$position]);
|
||||
$hasChanged = \true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
declare (strict_types=1);
|
||||
namespace Rector\Removing\ValueObject;
|
||||
|
||||
use Rector\Core\Validation\RectorAssert;
|
||||
final class RemoveFuncCall
|
||||
{
|
||||
/**
|
||||
|
@ -22,6 +23,7 @@ final class RemoveFuncCall
|
|||
{
|
||||
$this->funcCall = $funcCall;
|
||||
$this->argumentPositionAndValues = $argumentPositionAndValues;
|
||||
RectorAssert::functionName($funcCall);
|
||||
}
|
||||
public function getFuncCall() : string
|
||||
{
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
declare (strict_types=1);
|
||||
namespace Rector\Removing\ValueObject;
|
||||
|
||||
use Rector\Core\Validation\RectorAssert;
|
||||
final class RemoveFuncCallArg
|
||||
{
|
||||
/**
|
||||
|
@ -19,6 +20,7 @@ final class RemoveFuncCallArg
|
|||
{
|
||||
$this->function = $function;
|
||||
$this->argumentPosition = $argumentPosition;
|
||||
RectorAssert::functionName($function);
|
||||
}
|
||||
public function getFunction() : string
|
||||
{
|
||||
|
|
|
@ -87,7 +87,7 @@ CODE_SAMPLE
|
|||
foreach ($implements as $key => $name) {
|
||||
$fqnName = $this->getName($name);
|
||||
if (\in_array($fqnName, $alreadyAddedNames, \true)) {
|
||||
$this->nodeRemover->removeImplements($class, $key);
|
||||
unset($class->implements[$key]);
|
||||
continue;
|
||||
}
|
||||
$alreadyAddedNames[] = $fqnName;
|
||||
|
|
|
@ -17,12 +17,12 @@ final class VersionResolver
|
|||
* @api
|
||||
* @var string
|
||||
*/
|
||||
public const PACKAGE_VERSION = '6ad7b03704e639c95759d14c67444009c3b93259';
|
||||
public const PACKAGE_VERSION = '86682e4848dcfaecdb6dac7d07ffcb4cd47e69bf';
|
||||
/**
|
||||
* @api
|
||||
* @var string
|
||||
*/
|
||||
public const RELEASE_DATE = '2022-08-06 15:18:49';
|
||||
public const RELEASE_DATE = '2022-08-06 21:47:35';
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
|
|
|
@ -87,6 +87,7 @@ CODE_SAMPLE;
|
|||
*/
|
||||
protected $betterNodeFinder;
|
||||
/**
|
||||
* @deprecated Use service directly or return changes nodes
|
||||
* @var \Rector\NodeRemoval\NodeRemover
|
||||
*/
|
||||
protected $nodeRemover;
|
||||
|
|
|
@ -9,4 +9,4 @@ if (PHP_VERSION_ID < 50600) {
|
|||
|
||||
require_once __DIR__ . '/composer/autoload_real.php';
|
||||
|
||||
return ComposerAutoloaderInit222c68caf75058fc89c482e6539adcba::getLoader();
|
||||
return ComposerAutoloaderInit15b3e3f37c257ff0b0f8af72563cf505::getLoader();
|
||||
|
|
|
@ -2072,24 +2072,10 @@ return array(
|
|||
'Rector\\Naming\\ValueObject\\VariableAndCallAssign' => $baseDir . '/rules/Naming/ValueObject/VariableAndCallAssign.php',
|
||||
'Rector\\Naming\\ValueObject\\VariableAndCallForeach' => $baseDir . '/rules/Naming/ValueObject/VariableAndCallForeach.php',
|
||||
'Rector\\Naming\\VariableRenamer' => $baseDir . '/rules/Naming/VariableRenamer.php',
|
||||
'Rector\\Nette\\Contract\\FormControlTypeResolverInterface' => $vendorDir . '/rector/rector-nette/src/Contract/FormControlTypeResolverInterface.php',
|
||||
'Rector\\Nette\\Contract\\Rector\\LatteRectorInterface' => $vendorDir . '/rector/rector-nette/src/Contract/Rector/LatteRectorInterface.php',
|
||||
'Rector\\Nette\\Contract\\Rector\\NeonRectorInterface' => $vendorDir . '/rector/rector-nette/src/Contract/Rector/NeonRectorInterface.php',
|
||||
'Rector\\Nette\\Enum\\NetteFormMethodNameToControlType' => $vendorDir . '/rector/rector-nette/src/Enum/NetteFormMethodNameToControlType.php',
|
||||
'Rector\\Nette\\FileProcessor\\LatteFileProcessor' => $vendorDir . '/rector/rector-nette/src/FileProcessor/LatteFileProcessor.php',
|
||||
'Rector\\Nette\\FileProcessor\\NeonFileProcessor' => $vendorDir . '/rector/rector-nette/src/FileProcessor/NeonFileProcessor.php',
|
||||
'Rector\\Nette\\FormControlTypeResolver\\ArrayDimFetchControlTypeResolver' => $vendorDir . '/rector/rector-nette/src/FormControlTypeResolver/ArrayDimFetchControlTypeResolver.php',
|
||||
'Rector\\Nette\\FormControlTypeResolver\\AssignDimFetchFormTypeResolver' => $vendorDir . '/rector/rector-nette/src/FormControlTypeResolver/AssignDimFetchFormTypeResolver.php',
|
||||
'Rector\\Nette\\FormControlTypeResolver\\AssignedVariablesMethodCallsFormTypeResolver' => $vendorDir . '/rector/rector-nette/src/FormControlTypeResolver/AssignedVariablesMethodCallsFormTypeResolver.php',
|
||||
'Rector\\Nette\\FormControlTypeResolver\\ClassMethodFormTypeResolver' => $vendorDir . '/rector/rector-nette/src/FormControlTypeResolver/ClassMethodFormTypeResolver.php',
|
||||
'Rector\\Nette\\FormControlTypeResolver\\ConstructorFormControlTypeResolver' => $vendorDir . '/rector/rector-nette/src/FormControlTypeResolver/ConstructorFormControlTypeResolver.php',
|
||||
'Rector\\Nette\\FormControlTypeResolver\\GetComponentMethodCallFormControlTypeResolver' => $vendorDir . '/rector/rector-nette/src/FormControlTypeResolver/GetComponentMethodCallFormControlTypeResolver.php',
|
||||
'Rector\\Nette\\FormControlTypeResolver\\MagicNetteFactoryInterfaceFormControlTypeResolver' => $vendorDir . '/rector/rector-nette/src/FormControlTypeResolver/MagicNetteFactoryInterfaceFormControlTypeResolver.php',
|
||||
'Rector\\Nette\\FormControlTypeResolver\\NewFormControlTypeResolver' => $vendorDir . '/rector/rector-nette/src/FormControlTypeResolver/NewFormControlTypeResolver.php',
|
||||
'Rector\\Nette\\FormControlTypeResolver\\OnVariableMethodCallsFormControlTypeResolver' => $vendorDir . '/rector/rector-nette/src/FormControlTypeResolver/OnVariableMethodCallsFormControlTypeResolver.php',
|
||||
'Rector\\Nette\\FormControlTypeResolver\\ReturnFormControlTypeResolver' => $vendorDir . '/rector/rector-nette/src/FormControlTypeResolver/ReturnFormControlTypeResolver.php',
|
||||
'Rector\\Nette\\FormControlTypeResolver\\ThisVariableInAnotherMethodFormControlTypeResolver' => $vendorDir . '/rector/rector-nette/src/FormControlTypeResolver/ThisVariableInAnotherMethodFormControlTypeResolver.php',
|
||||
'Rector\\Nette\\FormControlTypeResolver\\VariableConstructorFormControlTypeResolver' => $vendorDir . '/rector/rector-nette/src/FormControlTypeResolver/VariableConstructorFormControlTypeResolver.php',
|
||||
'Rector\\Nette\\Kdyby\\BlueprintFactory\\VariableWithTypesFactory' => $vendorDir . '/rector/rector-nette/src/Kdyby/BlueprintFactory/VariableWithTypesFactory.php',
|
||||
'Rector\\Nette\\Kdyby\\ContributeEventClassResolver' => $vendorDir . '/rector/rector-nette/src/Kdyby/ContributeEventClassResolver.php',
|
||||
'Rector\\Nette\\Kdyby\\Naming\\EventClassNaming' => $vendorDir . '/rector/rector-nette/src/Kdyby/Naming/EventClassNaming.php',
|
||||
|
@ -2106,7 +2092,6 @@ return array(
|
|||
'Rector\\Nette\\Kdyby\\ValueObject\\VariableWithType' => $vendorDir . '/rector/rector-nette/src/Kdyby/ValueObject/VariableWithType.php',
|
||||
'Rector\\Nette\\Latte\\Parser\\TemplateTypeParser' => $vendorDir . '/rector/rector-nette/src/Latte/Parser/TemplateTypeParser.php',
|
||||
'Rector\\Nette\\Latte\\Parser\\VarTypeParser' => $vendorDir . '/rector/rector-nette/src/Latte/Parser/VarTypeParser.php',
|
||||
'Rector\\Nette\\Naming\\NetteControlNaming' => $vendorDir . '/rector/rector-nette/src/Naming/NetteControlNaming.php',
|
||||
'Rector\\Nette\\NeonParser\\Contract\\NeonNodeVisitorInterface' => $vendorDir . '/rector/rector-nette/packages/NeonParser/Contract/NeonNodeVisitorInterface.php',
|
||||
'Rector\\Nette\\NeonParser\\Exception\\NotImplementedYetException' => $vendorDir . '/rector/rector-nette/packages/NeonParser/Exception/NotImplementedYetException.php',
|
||||
'Rector\\Nette\\NeonParser\\Exception\\UnusedVirtualMethodException' => $vendorDir . '/rector/rector-nette/packages/NeonParser/Exception/UnusedVirtualMethodException.php',
|
||||
|
@ -2120,14 +2105,9 @@ return array(
|
|||
'Rector\\Nette\\NeonParser\\Node\\Service_\\SetupMethodCall' => $vendorDir . '/rector/rector-nette/packages/NeonParser/Node/Service_/SetupMethodCall.php',
|
||||
'Rector\\Nette\\NeonParser\\Printer\\FormatPreservingNeonPrinter' => $vendorDir . '/rector/rector-nette/packages/NeonParser/Printer/FormatPreservingNeonPrinter.php',
|
||||
'Rector\\Nette\\NeonParser\\Services\\ServiceTypeResolver' => $vendorDir . '/rector/rector-nette/packages/NeonParser/Services/ServiceTypeResolver.php',
|
||||
'Rector\\Nette\\NodeAnalyzer\\ArrayDimFetchAnalyzer' => $vendorDir . '/rector/rector-nette/src/NodeAnalyzer/ArrayDimFetchAnalyzer.php',
|
||||
'Rector\\Nette\\NodeAnalyzer\\ArrayDimFetchRenamer' => $vendorDir . '/rector/rector-nette/src/NodeAnalyzer/ArrayDimFetchRenamer.php',
|
||||
'Rector\\Nette\\NodeAnalyzer\\AssignAnalyzer' => $vendorDir . '/rector/rector-nette/src/NodeAnalyzer/AssignAnalyzer.php',
|
||||
'Rector\\Nette\\NodeAnalyzer\\BinaryOpAnalyzer' => $vendorDir . '/rector/rector-nette/src/NodeAnalyzer/BinaryOpAnalyzer.php',
|
||||
'Rector\\Nette\\NodeAnalyzer\\ConditionalTemplateAssignReplacer' => $vendorDir . '/rector/rector-nette/src/NodeAnalyzer/ConditionalTemplateAssignReplacer.php',
|
||||
'Rector\\Nette\\NodeAnalyzer\\ControlDimFetchAnalyzer' => $vendorDir . '/rector/rector-nette/src/NodeAnalyzer/ControlDimFetchAnalyzer.php',
|
||||
'Rector\\Nette\\NodeAnalyzer\\MethodCallArgMerger' => $vendorDir . '/rector/rector-nette/src/NodeAnalyzer/MethodCallArgMerger.php',
|
||||
'Rector\\Nette\\NodeAnalyzer\\MethodCallManipulator' => $vendorDir . '/rector/rector-nette/src/NodeAnalyzer/MethodCallManipulator.php',
|
||||
'Rector\\Nette\\NodeAnalyzer\\NetteClassAnalyzer' => $vendorDir . '/rector/rector-nette/src/NodeAnalyzer/NetteClassAnalyzer.php',
|
||||
'Rector\\Nette\\NodeAnalyzer\\NetteInjectPropertyAnalyzer' => $vendorDir . '/rector/rector-nette/src/NodeAnalyzer/NetteInjectPropertyAnalyzer.php',
|
||||
'Rector\\Nette\\NodeAnalyzer\\PregMatchAllAnalyzer' => $vendorDir . '/rector/rector-nette/src/NodeAnalyzer/PregMatchAllAnalyzer.php',
|
||||
|
@ -2149,8 +2129,6 @@ return array(
|
|||
'Rector\\Nette\\NodeFinder\\FormOnSuccessCallbackValuesParamFinder' => $vendorDir . '/rector/rector-nette/src/NodeFinder/FormOnSuccessCallbackValuesParamFinder.php',
|
||||
'Rector\\Nette\\NodeFinder\\FormVariableFinder' => $vendorDir . '/rector/rector-nette/src/NodeFinder/FormVariableFinder.php',
|
||||
'Rector\\Nette\\NodeFinder\\ParamFinder' => $vendorDir . '/rector/rector-nette/src/NodeFinder/ParamFinder.php',
|
||||
'Rector\\Nette\\NodeResolver\\MethodNamesByInputNamesResolver' => $vendorDir . '/rector/rector-nette/src/NodeResolver/MethodNamesByInputNamesResolver.php',
|
||||
'Rector\\Nette\\Rector\\ArrayDimFetch\\AnnotateMagicalControlArrayAccessRector' => $vendorDir . '/rector/rector-nette/src/Rector/ArrayDimFetch/AnnotateMagicalControlArrayAccessRector.php',
|
||||
'Rector\\Nette\\Rector\\Assign\\ArrayAccessGetControlToGetComponentMethodCallRector' => $vendorDir . '/rector/rector-nette/src/Rector/Assign/ArrayAccessGetControlToGetComponentMethodCallRector.php',
|
||||
'Rector\\Nette\\Rector\\Assign\\ArrayAccessSetControlToAddComponentMethodCallRector' => $vendorDir . '/rector/rector-nette/src/Rector/Assign/ArrayAccessSetControlToAddComponentMethodCallRector.php',
|
||||
'Rector\\Nette\\Rector\\Assign\\MakeGetComponentAssignAnnotatedRector' => $vendorDir . '/rector/rector-nette/src/Rector/Assign/MakeGetComponentAssignAnnotatedRector.php',
|
||||
|
@ -2832,6 +2810,7 @@ return array(
|
|||
'Rector\\Symfony\\Rector\\Class_\\MakeCommandLazyRector' => $vendorDir . '/rector/rector-symfony/src/Rector/Class_/MakeCommandLazyRector.php',
|
||||
'Rector\\Symfony\\Rector\\ConstFetch\\ConstraintUrlOptionRector' => $vendorDir . '/rector/rector-symfony/src/Rector/ConstFetch/ConstraintUrlOptionRector.php',
|
||||
'Rector\\Symfony\\Rector\\FuncCall\\ReplaceServiceArgumentRector' => $vendorDir . '/rector/rector-symfony/src/Rector/FuncCall/ReplaceServiceArgumentRector.php',
|
||||
'Rector\\Symfony\\Rector\\MethodCall\\AddViolationToBuildViolationRector' => $vendorDir . '/rector/rector-symfony/src/Rector/MethodCall/AddViolationToBuildViolationRector.php',
|
||||
'Rector\\Symfony\\Rector\\MethodCall\\AuthorizationCheckerIsGrantedExtractorRector' => $vendorDir . '/rector/rector-symfony/src/Rector/MethodCall/AuthorizationCheckerIsGrantedExtractorRector.php',
|
||||
'Rector\\Symfony\\Rector\\MethodCall\\CascadeValidationFormBuilderRector' => $vendorDir . '/rector/rector-symfony/src/Rector/MethodCall/CascadeValidationFormBuilderRector.php',
|
||||
'Rector\\Symfony\\Rector\\MethodCall\\ChangeCollectionTypeOptionNameFromTypeToEntryTypeRector' => $vendorDir . '/rector/rector-symfony/src/Rector/MethodCall/ChangeCollectionTypeOptionNameFromTypeToEntryTypeRector.php',
|
||||
|
@ -2852,6 +2831,7 @@ return array(
|
|||
'Rector\\Symfony\\Rector\\MethodCall\\ReadOnlyOptionToAttributeRector' => $vendorDir . '/rector/rector-symfony/src/Rector/MethodCall/ReadOnlyOptionToAttributeRector.php',
|
||||
'Rector\\Symfony\\Rector\\MethodCall\\RedirectToRouteRector' => $vendorDir . '/rector/rector-symfony/src/Rector/MethodCall/RedirectToRouteRector.php',
|
||||
'Rector\\Symfony\\Rector\\MethodCall\\ReflectionExtractorEnableMagicCallExtractorRector' => $vendorDir . '/rector/rector-symfony/src/Rector/MethodCall/ReflectionExtractorEnableMagicCallExtractorRector.php',
|
||||
'Rector\\Symfony\\Rector\\MethodCall\\ServiceSetStringNameToClassNameRector' => $vendorDir . '/rector/rector-symfony/src/Rector/MethodCall/ServiceSetStringNameToClassNameRector.php',
|
||||
'Rector\\Symfony\\Rector\\MethodCall\\StringFormTypeToClassRector' => $vendorDir . '/rector/rector-symfony/src/Rector/MethodCall/StringFormTypeToClassRector.php',
|
||||
'Rector\\Symfony\\Rector\\MethodCall\\SwiftCreateMessageToNewEmailRector' => $vendorDir . '/rector/rector-symfony/src/Rector/MethodCall/SwiftCreateMessageToNewEmailRector.php',
|
||||
'Rector\\Symfony\\Rector\\MethodCall\\SwiftSetBodyToHtmlPlainMethodCallRector' => $vendorDir . '/rector/rector-symfony/src/Rector/MethodCall/SwiftSetBodyToHtmlPlainMethodCallRector.php',
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
// autoload_real.php @generated by Composer
|
||||
|
||||
class ComposerAutoloaderInit222c68caf75058fc89c482e6539adcba
|
||||
class ComposerAutoloaderInit15b3e3f37c257ff0b0f8af72563cf505
|
||||
{
|
||||
private static $loader;
|
||||
|
||||
|
@ -22,19 +22,19 @@ class ComposerAutoloaderInit222c68caf75058fc89c482e6539adcba
|
|||
return self::$loader;
|
||||
}
|
||||
|
||||
spl_autoload_register(array('ComposerAutoloaderInit222c68caf75058fc89c482e6539adcba', 'loadClassLoader'), true, true);
|
||||
spl_autoload_register(array('ComposerAutoloaderInit15b3e3f37c257ff0b0f8af72563cf505', 'loadClassLoader'), true, true);
|
||||
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
|
||||
spl_autoload_unregister(array('ComposerAutoloaderInit222c68caf75058fc89c482e6539adcba', 'loadClassLoader'));
|
||||
spl_autoload_unregister(array('ComposerAutoloaderInit15b3e3f37c257ff0b0f8af72563cf505', 'loadClassLoader'));
|
||||
|
||||
require __DIR__ . '/autoload_static.php';
|
||||
call_user_func(\Composer\Autoload\ComposerStaticInit222c68caf75058fc89c482e6539adcba::getInitializer($loader));
|
||||
call_user_func(\Composer\Autoload\ComposerStaticInit15b3e3f37c257ff0b0f8af72563cf505::getInitializer($loader));
|
||||
|
||||
$loader->setClassMapAuthoritative(true);
|
||||
$loader->register(true);
|
||||
|
||||
$includeFiles = \Composer\Autoload\ComposerStaticInit222c68caf75058fc89c482e6539adcba::$files;
|
||||
$includeFiles = \Composer\Autoload\ComposerStaticInit15b3e3f37c257ff0b0f8af72563cf505::$files;
|
||||
foreach ($includeFiles as $fileIdentifier => $file) {
|
||||
composerRequire222c68caf75058fc89c482e6539adcba($fileIdentifier, $file);
|
||||
composerRequire15b3e3f37c257ff0b0f8af72563cf505($fileIdentifier, $file);
|
||||
}
|
||||
|
||||
return $loader;
|
||||
|
@ -46,7 +46,7 @@ class ComposerAutoloaderInit222c68caf75058fc89c482e6539adcba
|
|||
* @param string $file
|
||||
* @return void
|
||||
*/
|
||||
function composerRequire222c68caf75058fc89c482e6539adcba($fileIdentifier, $file)
|
||||
function composerRequire15b3e3f37c257ff0b0f8af72563cf505($fileIdentifier, $file)
|
||||
{
|
||||
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
||||
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
namespace Composer\Autoload;
|
||||
|
||||
class ComposerStaticInit222c68caf75058fc89c482e6539adcba
|
||||
class ComposerStaticInit15b3e3f37c257ff0b0f8af72563cf505
|
||||
{
|
||||
public static $files = array (
|
||||
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
|
||||
|
@ -2379,24 +2379,10 @@ class ComposerStaticInit222c68caf75058fc89c482e6539adcba
|
|||
'Rector\\Naming\\ValueObject\\VariableAndCallAssign' => __DIR__ . '/../..' . '/rules/Naming/ValueObject/VariableAndCallAssign.php',
|
||||
'Rector\\Naming\\ValueObject\\VariableAndCallForeach' => __DIR__ . '/../..' . '/rules/Naming/ValueObject/VariableAndCallForeach.php',
|
||||
'Rector\\Naming\\VariableRenamer' => __DIR__ . '/../..' . '/rules/Naming/VariableRenamer.php',
|
||||
'Rector\\Nette\\Contract\\FormControlTypeResolverInterface' => __DIR__ . '/..' . '/rector/rector-nette/src/Contract/FormControlTypeResolverInterface.php',
|
||||
'Rector\\Nette\\Contract\\Rector\\LatteRectorInterface' => __DIR__ . '/..' . '/rector/rector-nette/src/Contract/Rector/LatteRectorInterface.php',
|
||||
'Rector\\Nette\\Contract\\Rector\\NeonRectorInterface' => __DIR__ . '/..' . '/rector/rector-nette/src/Contract/Rector/NeonRectorInterface.php',
|
||||
'Rector\\Nette\\Enum\\NetteFormMethodNameToControlType' => __DIR__ . '/..' . '/rector/rector-nette/src/Enum/NetteFormMethodNameToControlType.php',
|
||||
'Rector\\Nette\\FileProcessor\\LatteFileProcessor' => __DIR__ . '/..' . '/rector/rector-nette/src/FileProcessor/LatteFileProcessor.php',
|
||||
'Rector\\Nette\\FileProcessor\\NeonFileProcessor' => __DIR__ . '/..' . '/rector/rector-nette/src/FileProcessor/NeonFileProcessor.php',
|
||||
'Rector\\Nette\\FormControlTypeResolver\\ArrayDimFetchControlTypeResolver' => __DIR__ . '/..' . '/rector/rector-nette/src/FormControlTypeResolver/ArrayDimFetchControlTypeResolver.php',
|
||||
'Rector\\Nette\\FormControlTypeResolver\\AssignDimFetchFormTypeResolver' => __DIR__ . '/..' . '/rector/rector-nette/src/FormControlTypeResolver/AssignDimFetchFormTypeResolver.php',
|
||||
'Rector\\Nette\\FormControlTypeResolver\\AssignedVariablesMethodCallsFormTypeResolver' => __DIR__ . '/..' . '/rector/rector-nette/src/FormControlTypeResolver/AssignedVariablesMethodCallsFormTypeResolver.php',
|
||||
'Rector\\Nette\\FormControlTypeResolver\\ClassMethodFormTypeResolver' => __DIR__ . '/..' . '/rector/rector-nette/src/FormControlTypeResolver/ClassMethodFormTypeResolver.php',
|
||||
'Rector\\Nette\\FormControlTypeResolver\\ConstructorFormControlTypeResolver' => __DIR__ . '/..' . '/rector/rector-nette/src/FormControlTypeResolver/ConstructorFormControlTypeResolver.php',
|
||||
'Rector\\Nette\\FormControlTypeResolver\\GetComponentMethodCallFormControlTypeResolver' => __DIR__ . '/..' . '/rector/rector-nette/src/FormControlTypeResolver/GetComponentMethodCallFormControlTypeResolver.php',
|
||||
'Rector\\Nette\\FormControlTypeResolver\\MagicNetteFactoryInterfaceFormControlTypeResolver' => __DIR__ . '/..' . '/rector/rector-nette/src/FormControlTypeResolver/MagicNetteFactoryInterfaceFormControlTypeResolver.php',
|
||||
'Rector\\Nette\\FormControlTypeResolver\\NewFormControlTypeResolver' => __DIR__ . '/..' . '/rector/rector-nette/src/FormControlTypeResolver/NewFormControlTypeResolver.php',
|
||||
'Rector\\Nette\\FormControlTypeResolver\\OnVariableMethodCallsFormControlTypeResolver' => __DIR__ . '/..' . '/rector/rector-nette/src/FormControlTypeResolver/OnVariableMethodCallsFormControlTypeResolver.php',
|
||||
'Rector\\Nette\\FormControlTypeResolver\\ReturnFormControlTypeResolver' => __DIR__ . '/..' . '/rector/rector-nette/src/FormControlTypeResolver/ReturnFormControlTypeResolver.php',
|
||||
'Rector\\Nette\\FormControlTypeResolver\\ThisVariableInAnotherMethodFormControlTypeResolver' => __DIR__ . '/..' . '/rector/rector-nette/src/FormControlTypeResolver/ThisVariableInAnotherMethodFormControlTypeResolver.php',
|
||||
'Rector\\Nette\\FormControlTypeResolver\\VariableConstructorFormControlTypeResolver' => __DIR__ . '/..' . '/rector/rector-nette/src/FormControlTypeResolver/VariableConstructorFormControlTypeResolver.php',
|
||||
'Rector\\Nette\\Kdyby\\BlueprintFactory\\VariableWithTypesFactory' => __DIR__ . '/..' . '/rector/rector-nette/src/Kdyby/BlueprintFactory/VariableWithTypesFactory.php',
|
||||
'Rector\\Nette\\Kdyby\\ContributeEventClassResolver' => __DIR__ . '/..' . '/rector/rector-nette/src/Kdyby/ContributeEventClassResolver.php',
|
||||
'Rector\\Nette\\Kdyby\\Naming\\EventClassNaming' => __DIR__ . '/..' . '/rector/rector-nette/src/Kdyby/Naming/EventClassNaming.php',
|
||||
|
@ -2413,7 +2399,6 @@ class ComposerStaticInit222c68caf75058fc89c482e6539adcba
|
|||
'Rector\\Nette\\Kdyby\\ValueObject\\VariableWithType' => __DIR__ . '/..' . '/rector/rector-nette/src/Kdyby/ValueObject/VariableWithType.php',
|
||||
'Rector\\Nette\\Latte\\Parser\\TemplateTypeParser' => __DIR__ . '/..' . '/rector/rector-nette/src/Latte/Parser/TemplateTypeParser.php',
|
||||
'Rector\\Nette\\Latte\\Parser\\VarTypeParser' => __DIR__ . '/..' . '/rector/rector-nette/src/Latte/Parser/VarTypeParser.php',
|
||||
'Rector\\Nette\\Naming\\NetteControlNaming' => __DIR__ . '/..' . '/rector/rector-nette/src/Naming/NetteControlNaming.php',
|
||||
'Rector\\Nette\\NeonParser\\Contract\\NeonNodeVisitorInterface' => __DIR__ . '/..' . '/rector/rector-nette/packages/NeonParser/Contract/NeonNodeVisitorInterface.php',
|
||||
'Rector\\Nette\\NeonParser\\Exception\\NotImplementedYetException' => __DIR__ . '/..' . '/rector/rector-nette/packages/NeonParser/Exception/NotImplementedYetException.php',
|
||||
'Rector\\Nette\\NeonParser\\Exception\\UnusedVirtualMethodException' => __DIR__ . '/..' . '/rector/rector-nette/packages/NeonParser/Exception/UnusedVirtualMethodException.php',
|
||||
|
@ -2427,14 +2412,9 @@ class ComposerStaticInit222c68caf75058fc89c482e6539adcba
|
|||
'Rector\\Nette\\NeonParser\\Node\\Service_\\SetupMethodCall' => __DIR__ . '/..' . '/rector/rector-nette/packages/NeonParser/Node/Service_/SetupMethodCall.php',
|
||||
'Rector\\Nette\\NeonParser\\Printer\\FormatPreservingNeonPrinter' => __DIR__ . '/..' . '/rector/rector-nette/packages/NeonParser/Printer/FormatPreservingNeonPrinter.php',
|
||||
'Rector\\Nette\\NeonParser\\Services\\ServiceTypeResolver' => __DIR__ . '/..' . '/rector/rector-nette/packages/NeonParser/Services/ServiceTypeResolver.php',
|
||||
'Rector\\Nette\\NodeAnalyzer\\ArrayDimFetchAnalyzer' => __DIR__ . '/..' . '/rector/rector-nette/src/NodeAnalyzer/ArrayDimFetchAnalyzer.php',
|
||||
'Rector\\Nette\\NodeAnalyzer\\ArrayDimFetchRenamer' => __DIR__ . '/..' . '/rector/rector-nette/src/NodeAnalyzer/ArrayDimFetchRenamer.php',
|
||||
'Rector\\Nette\\NodeAnalyzer\\AssignAnalyzer' => __DIR__ . '/..' . '/rector/rector-nette/src/NodeAnalyzer/AssignAnalyzer.php',
|
||||
'Rector\\Nette\\NodeAnalyzer\\BinaryOpAnalyzer' => __DIR__ . '/..' . '/rector/rector-nette/src/NodeAnalyzer/BinaryOpAnalyzer.php',
|
||||
'Rector\\Nette\\NodeAnalyzer\\ConditionalTemplateAssignReplacer' => __DIR__ . '/..' . '/rector/rector-nette/src/NodeAnalyzer/ConditionalTemplateAssignReplacer.php',
|
||||
'Rector\\Nette\\NodeAnalyzer\\ControlDimFetchAnalyzer' => __DIR__ . '/..' . '/rector/rector-nette/src/NodeAnalyzer/ControlDimFetchAnalyzer.php',
|
||||
'Rector\\Nette\\NodeAnalyzer\\MethodCallArgMerger' => __DIR__ . '/..' . '/rector/rector-nette/src/NodeAnalyzer/MethodCallArgMerger.php',
|
||||
'Rector\\Nette\\NodeAnalyzer\\MethodCallManipulator' => __DIR__ . '/..' . '/rector/rector-nette/src/NodeAnalyzer/MethodCallManipulator.php',
|
||||
'Rector\\Nette\\NodeAnalyzer\\NetteClassAnalyzer' => __DIR__ . '/..' . '/rector/rector-nette/src/NodeAnalyzer/NetteClassAnalyzer.php',
|
||||
'Rector\\Nette\\NodeAnalyzer\\NetteInjectPropertyAnalyzer' => __DIR__ . '/..' . '/rector/rector-nette/src/NodeAnalyzer/NetteInjectPropertyAnalyzer.php',
|
||||
'Rector\\Nette\\NodeAnalyzer\\PregMatchAllAnalyzer' => __DIR__ . '/..' . '/rector/rector-nette/src/NodeAnalyzer/PregMatchAllAnalyzer.php',
|
||||
|
@ -2456,8 +2436,6 @@ class ComposerStaticInit222c68caf75058fc89c482e6539adcba
|
|||
'Rector\\Nette\\NodeFinder\\FormOnSuccessCallbackValuesParamFinder' => __DIR__ . '/..' . '/rector/rector-nette/src/NodeFinder/FormOnSuccessCallbackValuesParamFinder.php',
|
||||
'Rector\\Nette\\NodeFinder\\FormVariableFinder' => __DIR__ . '/..' . '/rector/rector-nette/src/NodeFinder/FormVariableFinder.php',
|
||||
'Rector\\Nette\\NodeFinder\\ParamFinder' => __DIR__ . '/..' . '/rector/rector-nette/src/NodeFinder/ParamFinder.php',
|
||||
'Rector\\Nette\\NodeResolver\\MethodNamesByInputNamesResolver' => __DIR__ . '/..' . '/rector/rector-nette/src/NodeResolver/MethodNamesByInputNamesResolver.php',
|
||||
'Rector\\Nette\\Rector\\ArrayDimFetch\\AnnotateMagicalControlArrayAccessRector' => __DIR__ . '/..' . '/rector/rector-nette/src/Rector/ArrayDimFetch/AnnotateMagicalControlArrayAccessRector.php',
|
||||
'Rector\\Nette\\Rector\\Assign\\ArrayAccessGetControlToGetComponentMethodCallRector' => __DIR__ . '/..' . '/rector/rector-nette/src/Rector/Assign/ArrayAccessGetControlToGetComponentMethodCallRector.php',
|
||||
'Rector\\Nette\\Rector\\Assign\\ArrayAccessSetControlToAddComponentMethodCallRector' => __DIR__ . '/..' . '/rector/rector-nette/src/Rector/Assign/ArrayAccessSetControlToAddComponentMethodCallRector.php',
|
||||
'Rector\\Nette\\Rector\\Assign\\MakeGetComponentAssignAnnotatedRector' => __DIR__ . '/..' . '/rector/rector-nette/src/Rector/Assign/MakeGetComponentAssignAnnotatedRector.php',
|
||||
|
@ -3139,6 +3117,7 @@ class ComposerStaticInit222c68caf75058fc89c482e6539adcba
|
|||
'Rector\\Symfony\\Rector\\Class_\\MakeCommandLazyRector' => __DIR__ . '/..' . '/rector/rector-symfony/src/Rector/Class_/MakeCommandLazyRector.php',
|
||||
'Rector\\Symfony\\Rector\\ConstFetch\\ConstraintUrlOptionRector' => __DIR__ . '/..' . '/rector/rector-symfony/src/Rector/ConstFetch/ConstraintUrlOptionRector.php',
|
||||
'Rector\\Symfony\\Rector\\FuncCall\\ReplaceServiceArgumentRector' => __DIR__ . '/..' . '/rector/rector-symfony/src/Rector/FuncCall/ReplaceServiceArgumentRector.php',
|
||||
'Rector\\Symfony\\Rector\\MethodCall\\AddViolationToBuildViolationRector' => __DIR__ . '/..' . '/rector/rector-symfony/src/Rector/MethodCall/AddViolationToBuildViolationRector.php',
|
||||
'Rector\\Symfony\\Rector\\MethodCall\\AuthorizationCheckerIsGrantedExtractorRector' => __DIR__ . '/..' . '/rector/rector-symfony/src/Rector/MethodCall/AuthorizationCheckerIsGrantedExtractorRector.php',
|
||||
'Rector\\Symfony\\Rector\\MethodCall\\CascadeValidationFormBuilderRector' => __DIR__ . '/..' . '/rector/rector-symfony/src/Rector/MethodCall/CascadeValidationFormBuilderRector.php',
|
||||
'Rector\\Symfony\\Rector\\MethodCall\\ChangeCollectionTypeOptionNameFromTypeToEntryTypeRector' => __DIR__ . '/..' . '/rector/rector-symfony/src/Rector/MethodCall/ChangeCollectionTypeOptionNameFromTypeToEntryTypeRector.php',
|
||||
|
@ -3159,6 +3138,7 @@ class ComposerStaticInit222c68caf75058fc89c482e6539adcba
|
|||
'Rector\\Symfony\\Rector\\MethodCall\\ReadOnlyOptionToAttributeRector' => __DIR__ . '/..' . '/rector/rector-symfony/src/Rector/MethodCall/ReadOnlyOptionToAttributeRector.php',
|
||||
'Rector\\Symfony\\Rector\\MethodCall\\RedirectToRouteRector' => __DIR__ . '/..' . '/rector/rector-symfony/src/Rector/MethodCall/RedirectToRouteRector.php',
|
||||
'Rector\\Symfony\\Rector\\MethodCall\\ReflectionExtractorEnableMagicCallExtractorRector' => __DIR__ . '/..' . '/rector/rector-symfony/src/Rector/MethodCall/ReflectionExtractorEnableMagicCallExtractorRector.php',
|
||||
'Rector\\Symfony\\Rector\\MethodCall\\ServiceSetStringNameToClassNameRector' => __DIR__ . '/..' . '/rector/rector-symfony/src/Rector/MethodCall/ServiceSetStringNameToClassNameRector.php',
|
||||
'Rector\\Symfony\\Rector\\MethodCall\\StringFormTypeToClassRector' => __DIR__ . '/..' . '/rector/rector-symfony/src/Rector/MethodCall/StringFormTypeToClassRector.php',
|
||||
'Rector\\Symfony\\Rector\\MethodCall\\SwiftCreateMessageToNewEmailRector' => __DIR__ . '/..' . '/rector/rector-symfony/src/Rector/MethodCall/SwiftCreateMessageToNewEmailRector.php',
|
||||
'Rector\\Symfony\\Rector\\MethodCall\\SwiftSetBodyToHtmlPlainMethodCallRector' => __DIR__ . '/..' . '/rector/rector-symfony/src/Rector/MethodCall/SwiftSetBodyToHtmlPlainMethodCallRector.php',
|
||||
|
@ -3409,9 +3389,9 @@ class ComposerStaticInit222c68caf75058fc89c482e6539adcba
|
|||
public static function getInitializer(ClassLoader $loader)
|
||||
{
|
||||
return \Closure::bind(function () use ($loader) {
|
||||
$loader->prefixLengthsPsr4 = ComposerStaticInit222c68caf75058fc89c482e6539adcba::$prefixLengthsPsr4;
|
||||
$loader->prefixDirsPsr4 = ComposerStaticInit222c68caf75058fc89c482e6539adcba::$prefixDirsPsr4;
|
||||
$loader->classMap = ComposerStaticInit222c68caf75058fc89c482e6539adcba::$classMap;
|
||||
$loader->prefixLengthsPsr4 = ComposerStaticInit15b3e3f37c257ff0b0f8af72563cf505::$prefixLengthsPsr4;
|
||||
$loader->prefixDirsPsr4 = ComposerStaticInit15b3e3f37c257ff0b0f8af72563cf505::$prefixDirsPsr4;
|
||||
$loader->classMap = ComposerStaticInit15b3e3f37c257ff0b0f8af72563cf505::$classMap;
|
||||
|
||||
}, null, ClassLoader::class);
|
||||
}
|
||||
|
|
|
@ -1923,12 +1923,12 @@
|
|||
"source": {
|
||||
"type": "git",
|
||||
"url": "https:\/\/github.com\/rectorphp\/rector-doctrine.git",
|
||||
"reference": "e6b2be7c1b67969fed3439672aba7db3df651f17"
|
||||
"reference": "ea5a50c055449227910a9f8df5e7e8290ddd4f7c"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-doctrine\/zipball\/e6b2be7c1b67969fed3439672aba7db3df651f17",
|
||||
"reference": "e6b2be7c1b67969fed3439672aba7db3df651f17",
|
||||
"url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-doctrine\/zipball\/ea5a50c055449227910a9f8df5e7e8290ddd4f7c",
|
||||
"reference": "ea5a50c055449227910a9f8df5e7e8290ddd4f7c",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -1953,7 +1953,7 @@
|
|||
"symplify\/rule-doc-generator": "^11.0",
|
||||
"symplify\/vendor-patches": "^11.0"
|
||||
},
|
||||
"time": "2022-07-24T11:45:12+00:00",
|
||||
"time": "2022-08-06T20:05:23+00:00",
|
||||
"default-branch": true,
|
||||
"type": "rector-extension",
|
||||
"extra": {
|
||||
|
@ -2202,12 +2202,12 @@
|
|||
"source": {
|
||||
"type": "git",
|
||||
"url": "https:\/\/github.com\/rectorphp\/rector-nette.git",
|
||||
"reference": "e5b26937365bd6f3576c1a622e1158c79ec49d14"
|
||||
"reference": "51adb00a964775304fabcb2d701f5b6461cc4027"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-nette\/zipball\/e5b26937365bd6f3576c1a622e1158c79ec49d14",
|
||||
"reference": "e5b26937365bd6f3576c1a622e1158c79ec49d14",
|
||||
"url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-nette\/zipball\/51adb00a964775304fabcb2d701f5b6461cc4027",
|
||||
"reference": "51adb00a964775304fabcb2d701f5b6461cc4027",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -2232,6 +2232,7 @@
|
|||
"phpunit\/phpunit": "^9.5",
|
||||
"rector\/phpstan-rules": "^0.5",
|
||||
"rector\/rector-src": "dev-main",
|
||||
"symplify\/easy-ci": "^11.0",
|
||||
"symplify\/easy-coding-standard": "^11.0",
|
||||
"symplify\/monorepo-builder": "^11.0",
|
||||
"symplify\/phpstan-extensions": "^11.0",
|
||||
|
@ -2239,7 +2240,7 @@
|
|||
"symplify\/rule-doc-generator": "^11.0",
|
||||
"symplify\/vendor-patches": "^11.0"
|
||||
},
|
||||
"time": "2022-07-19T22:25:42+00:00",
|
||||
"time": "2022-08-06T21:32:25+00:00",
|
||||
"default-branch": true,
|
||||
"type": "rector-extension",
|
||||
"extra": {
|
||||
|
@ -2415,33 +2416,33 @@
|
|||
"source": {
|
||||
"type": "git",
|
||||
"url": "https:\/\/github.com\/rectorphp\/rector-symfony.git",
|
||||
"reference": "2bf8fc5da3e052752895d79d99344406d134cb32"
|
||||
"reference": "8e8149656ac7c675c9b156cf965abb9925cfdbfa"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-symfony\/zipball\/2bf8fc5da3e052752895d79d99344406d134cb32",
|
||||
"reference": "2bf8fc5da3e052752895d79d99344406d134cb32",
|
||||
"url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-symfony\/zipball\/8e8149656ac7c675c9b156cf965abb9925cfdbfa",
|
||||
"reference": "8e8149656ac7c675c9b156cf965abb9925cfdbfa",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-xml": "*",
|
||||
"php": ">=8.1",
|
||||
"symfony\/string": "^6.0"
|
||||
"symfony\/string": "^6.1"
|
||||
},
|
||||
"conflict": {
|
||||
"rector\/rector": "<0.13"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpstan\/extension-installer": "^1.1",
|
||||
"phpstan\/phpstan": "^1.7.10",
|
||||
"phpstan\/phpstan-strict-rules": "^1.2",
|
||||
"phpstan\/phpstan-webmozart-assert": "^1.1",
|
||||
"phpstan\/phpstan": "^1.8.2",
|
||||
"phpstan\/phpstan-strict-rules": "^1.3",
|
||||
"phpstan\/phpstan-webmozart-assert": "^1.2",
|
||||
"phpunit\/phpunit": "^9.5",
|
||||
"rector\/phpstan-rules": "^0.5",
|
||||
"rector\/phpstan-rules": "^0.5.8",
|
||||
"rector\/rector-src": "dev-main",
|
||||
"symfony\/routing": "^6.0",
|
||||
"symfony\/security-core": "^6.0",
|
||||
"symfony\/security-http": "^6.0",
|
||||
"symfony\/routing": "^6.1",
|
||||
"symfony\/security-core": "^6.1",
|
||||
"symfony\/security-http": "^6.1",
|
||||
"symplify\/easy-ci": "^11.0",
|
||||
"symplify\/easy-coding-standard": "^11.0",
|
||||
"symplify\/phpstan-extensions": "^11.0",
|
||||
|
@ -2449,7 +2450,7 @@
|
|||
"symplify\/rule-doc-generator": "^11.0",
|
||||
"symplify\/vendor-patches": "^11.0"
|
||||
},
|
||||
"time": "2022-07-25T09:57:49+00:00",
|
||||
"time": "2022-08-06T19:26:16+00:00",
|
||||
"default-branch": true,
|
||||
"type": "rector-extension",
|
||||
"extra": {
|
||||
|
|
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-cakephp' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-cakephp', 'relative_install_path' => '../../rector-cakephp', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => 'dev-main ec96616'), '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 e6b2be7'), '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 7ee4e58'), 'rector/rector-generator' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-generator', 'relative_install_path' => '../../rector-generator', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => 'dev-main 0e86e69'), 'rector/rector-laravel' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-laravel', 'relative_install_path' => '../../rector-laravel', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => 'dev-main 987bdb4'), 'rector/rector-nette' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-nette', 'relative_install_path' => '../../rector-nette', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => 'dev-main e5b2693'), 'rector/rector-phpoffice' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-phpoffice', 'relative_install_path' => '../../rector-phpoffice', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => 'dev-main ad7cfce'), '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 d876ff2'), '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 2bf8fc5'));
|
||||
public const EXTENSIONS = array('rector/rector-cakephp' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-cakephp', 'relative_install_path' => '../../rector-cakephp', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => 'dev-main ec96616'), '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 ea5a50c'), '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 7ee4e58'), 'rector/rector-generator' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-generator', 'relative_install_path' => '../../rector-generator', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => 'dev-main 0e86e69'), 'rector/rector-laravel' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-laravel', 'relative_install_path' => '../../rector-laravel', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => 'dev-main 987bdb4'), 'rector/rector-nette' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-nette', 'relative_install_path' => '../../rector-nette', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => 'dev-main 51adb00'), 'rector/rector-phpoffice' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-phpoffice', 'relative_install_path' => '../../rector-phpoffice', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => 'dev-main ad7cfce'), '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 d876ff2'), '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 8e81496'));
|
||||
private function __construct()
|
||||
{
|
||||
}
|
||||
|
|
|
@ -10,6 +10,9 @@ use PhpParser\Node\Stmt\ClassLike;
|
|||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
use PhpParser\Node\Stmt\Property;
|
||||
use Rector\NodeNameResolver\NodeNameResolver;
|
||||
/**
|
||||
* @api
|
||||
*/
|
||||
final class AttributeCleaner
|
||||
{
|
||||
/**
|
||||
|
|
|
@ -12,6 +12,9 @@ use PhpParser\Node\Stmt\ClassLike;
|
|||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
use PhpParser\Node\Stmt\Property;
|
||||
use Rector\NodeNameResolver\NodeNameResolver;
|
||||
/**
|
||||
* @api
|
||||
*/
|
||||
final class AttributeFinder
|
||||
{
|
||||
/**
|
||||
|
|
|
@ -11,6 +11,9 @@ use PhpParser\Node\Stmt\Property;
|
|||
use Rector\BetterPhpDocParser\PhpDoc\DoctrineAnnotationTagValueNode;
|
||||
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo;
|
||||
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory;
|
||||
/**
|
||||
* @api
|
||||
*/
|
||||
final class AttrinationFinder
|
||||
{
|
||||
/**
|
||||
|
|
|
@ -5,6 +5,7 @@ namespace Rector\Doctrine\NodeAnalyzer;
|
|||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Expr\MethodCall;
|
||||
use PhpParser\Node\Stmt\Class_;
|
||||
use PHPStan\Type\ObjectType;
|
||||
use Rector\NodeNameResolver\NodeNameResolver;
|
||||
use Rector\NodeTypeResolver\NodeTypeResolver;
|
||||
|
@ -35,10 +36,10 @@ final class MethodCallNameOnTypeResolver
|
|||
/**
|
||||
* @return string[]
|
||||
*/
|
||||
public function resolve(Node $node, ObjectType $objectType) : array
|
||||
public function resolve(Class_ $class, ObjectType $objectType) : array
|
||||
{
|
||||
$methodNames = [];
|
||||
$this->simpleCallableNodeTraverser->traverseNodesWithCallable($node, function (Node $node) use(&$methodNames, $objectType) {
|
||||
$this->simpleCallableNodeTraverser->traverseNodesWithCallable($class, function (Node $node) use(&$methodNames, $objectType) {
|
||||
if (!$node instanceof MethodCall) {
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
declare (strict_types=1);
|
||||
namespace Rector\Doctrine\PhpDocParser;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Stmt\Property;
|
||||
use Rector\BetterPhpDocParser\PhpDocParser\ClassAnnotationMatcher;
|
||||
class DoctrineClassAnnotationMatcher
|
||||
{
|
||||
|
@ -16,16 +16,16 @@ class DoctrineClassAnnotationMatcher
|
|||
{
|
||||
$this->classAnnotationMatcher = $classAnnotationMatcher;
|
||||
}
|
||||
public function resolveExpectingDoctrineFQCN(string $value, Node $node) : ?string
|
||||
public function resolveExpectingDoctrineFQCN(string $value, Property $property) : ?string
|
||||
{
|
||||
$fullyQualified = $this->classAnnotationMatcher->resolveTagToKnownFullyQualifiedName($value, $node);
|
||||
$fullyQualified = $this->classAnnotationMatcher->resolveTagToKnownFullyQualifiedName($value, $property);
|
||||
if ($fullyQualified === null) {
|
||||
// Doctrine FQCNs are strange: In their examples
|
||||
// they omit the leading slash. This leads to
|
||||
// ClassAnnotationMatcher searching in the wrong
|
||||
// namespace. Therefor we try to add the leading
|
||||
// slash manually here.
|
||||
$fullyQualified = $this->classAnnotationMatcher->resolveTagToKnownFullyQualifiedName('\\' . $value, $node);
|
||||
$fullyQualified = $this->classAnnotationMatcher->resolveTagToKnownFullyQualifiedName('\\' . $value, $property);
|
||||
}
|
||||
return $fullyQualified;
|
||||
}
|
||||
|
|
|
@ -3,8 +3,8 @@
|
|||
declare (strict_types=1);
|
||||
namespace Rector\Doctrine\PhpDocParser;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Stmt\Class_;
|
||||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory;
|
||||
use Rector\Core\PhpParser\Node\BetterNodeFinder;
|
||||
final class DoctrineDocBlockResolver
|
||||
|
@ -24,9 +24,9 @@ final class DoctrineDocBlockResolver
|
|||
$this->phpDocInfoFactory = $phpDocInfoFactory;
|
||||
$this->betterNodeFinder = $betterNodeFinder;
|
||||
}
|
||||
public function isInDoctrineEntityClass(Node $node) : bool
|
||||
public function isInDoctrineEntityClass(ClassMethod $classMethod) : bool
|
||||
{
|
||||
$class = $this->betterNodeFinder->findParentType($node, Class_::class);
|
||||
$class = $this->betterNodeFinder->findParentType($classMethod, Class_::class);
|
||||
if (!$class instanceof Class_) {
|
||||
return \false;
|
||||
}
|
||||
|
|
|
@ -22,6 +22,10 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
|
|||
*/
|
||||
final class MoveCurrentDateTimeDefaultInEntityToConstructorRector extends AbstractRector
|
||||
{
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
private $hasChanged = \false;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Doctrine\NodeManipulator\ConstructorManipulator
|
||||
|
@ -96,27 +100,32 @@ CODE_SAMPLE
|
|||
*/
|
||||
public function refactor(Node $node) : ?Node
|
||||
{
|
||||
$this->hasChanged = \false;
|
||||
foreach ($node->getProperties() as $property) {
|
||||
$this->refactorProperty($property, $node);
|
||||
}
|
||||
if (!$this->hasChanged) {
|
||||
return null;
|
||||
}
|
||||
return $node;
|
||||
}
|
||||
private function refactorProperty(Property $property, Class_ $class) : ?Property
|
||||
private function refactorProperty(Property $property, Class_ $class) : void
|
||||
{
|
||||
$phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($property);
|
||||
$doctrineAnnotationTagValueNode = $phpDocInfo->getByAnnotationClass('Doctrine\\ORM\\Mapping\\Column');
|
||||
if (!$doctrineAnnotationTagValueNode instanceof DoctrineAnnotationTagValueNode) {
|
||||
return null;
|
||||
return;
|
||||
}
|
||||
$type = $doctrineAnnotationTagValueNode->getValueWithoutQuotes('type');
|
||||
if ($type !== 'datetime') {
|
||||
return null;
|
||||
return;
|
||||
}
|
||||
$node = $this->constructorAssignPropertyAnalyzer->resolveConstructorAssign($property);
|
||||
// 0. already has default
|
||||
if ($node !== null) {
|
||||
return null;
|
||||
return;
|
||||
}
|
||||
$this->hasChanged = \true;
|
||||
// 1. remove default options from database level
|
||||
$options = $doctrineAnnotationTagValueNode->getValue('options');
|
||||
if ($options instanceof CurlyListNode) {
|
||||
|
@ -131,7 +140,6 @@ CODE_SAMPLE
|
|||
// 3. remove default from property
|
||||
$onlyProperty = $property->props[0];
|
||||
$onlyProperty->default = null;
|
||||
return $property;
|
||||
}
|
||||
private function refactorClass(Class_ $class, Property $property) : void
|
||||
{
|
||||
|
|
|
@ -27,7 +27,8 @@
|
|||
"rector\/phpstan-rules": "^0.5",
|
||||
"phpstan\/phpstan-webmozart-assert": "^1.2",
|
||||
"phpstan\/phpstan-strict-rules": "^1.3",
|
||||
"symplify\/vendor-patches": "^11.0"
|
||||
"symplify\/vendor-patches": "^11.0",
|
||||
"symplify\/easy-ci": "^11.0"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
|
|
|
@ -4,7 +4,6 @@ declare (strict_types=1);
|
|||
namespace RectorPrefix202208;
|
||||
|
||||
use Rector\Config\RectorConfig;
|
||||
use Rector\Nette\Rector\ArrayDimFetch\AnnotateMagicalControlArrayAccessRector;
|
||||
use Rector\Nette\Rector\Assign\ArrayAccessGetControlToGetComponentMethodCallRector;
|
||||
use Rector\Nette\Rector\Assign\ArrayAccessSetControlToAddComponentMethodCallRector;
|
||||
use Rector\Nette\Rector\Assign\MakeGetComponentAssignAnnotatedRector;
|
||||
|
@ -13,7 +12,6 @@ use Rector\Nette\Rector\Identical\SubstrMinusToStringEndsWithRector;
|
|||
return static function (RectorConfig $rectorConfig) : void {
|
||||
$rectorConfig->rule(TemplateMagicAssignToExplicitVariableArrayRector::class);
|
||||
$rectorConfig->rule(MakeGetComponentAssignAnnotatedRector::class);
|
||||
$rectorConfig->rule(AnnotateMagicalControlArrayAccessRector::class);
|
||||
$rectorConfig->rule(ArrayAccessSetControlToAddComponentMethodCallRector::class);
|
||||
$rectorConfig->rule(ArrayAccessGetControlToGetComponentMethodCallRector::class);
|
||||
$rectorConfig->rule(SubstrMinusToStringEndsWithRector::class);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# 38 Rules Overview
|
||||
# 37 Rules Overview
|
||||
|
||||
## AddNextrasDatePickerToDateControlRector
|
||||
|
||||
|
@ -22,36 +22,6 @@ Nextras/Form upgrade of addDatePicker method call to DateControl assign
|
|||
|
||||
<br>
|
||||
|
||||
## AnnotateMagicalControlArrayAccessRector
|
||||
|
||||
Change magic `$this["some_component"]` to variable assign with `@var` annotation
|
||||
|
||||
- class: [`Rector\Nette\Rector\ArrayDimFetch\AnnotateMagicalControlArrayAccessRector`](../src/Rector/ArrayDimFetch/AnnotateMagicalControlArrayAccessRector.php)
|
||||
|
||||
```diff
|
||||
use Nette\Application\UI\Presenter;
|
||||
use Nette\Application\UI\Form;
|
||||
|
||||
final class SomePresenter extends Presenter
|
||||
{
|
||||
public function run()
|
||||
{
|
||||
- if ($this['some_form']->isSubmitted()) {
|
||||
+ /** @var \Nette\Application\UI\Form $someForm */
|
||||
+ $someForm = $this['some_form'];
|
||||
+ if ($someForm->isSubmitted()) {
|
||||
}
|
||||
}
|
||||
|
||||
protected function createComponentSomeForm()
|
||||
{
|
||||
return new Form();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
<br>
|
||||
|
||||
## ArrayAccessGetControlToGetComponentMethodCallRector
|
||||
|
||||
Change magic arrays access get, to explicit `$this->getComponent(...)` method
|
||||
|
@ -251,7 +221,10 @@ use Rector\Config\RectorConfig;
|
|||
use Rector\Nette\Rector\Class_\FormDataRector;
|
||||
|
||||
return static function (RectorConfig $rectorConfig): void {
|
||||
$rectorConfig->ruleWithConfiguration(FormDataRector::class, [Rector\Nette\Rector\Class_\FormDataRector::FORM_DATA_CLASS_PARENT: '', Rector\Nette\Rector\Class_\FormDataRector::FORM_DATA_CLASS_TRAITS: []]);
|
||||
$rectorConfig->ruleWithConfiguration(FormDataRector::class, [
|
||||
FormDataRector::FORM_DATA_CLASS_PARENT => '',
|
||||
FormDataRector::FORM_DATA_CLASS_TRAITS => [],
|
||||
]);
|
||||
};
|
||||
```
|
||||
|
||||
|
@ -855,7 +828,10 @@ use Rector\Config\RectorConfig;
|
|||
use Rector\Nette\Rector\Class_\TemplateTypeBasedOnPresenterTemplateParametersRector;
|
||||
|
||||
return static function (RectorConfig $rectorConfig): void {
|
||||
$rectorConfig->ruleWithConfiguration(TemplateTypeBasedOnPresenterTemplateParametersRector::class, [Rector\Nette\Rector\Class_\TemplateTypeBasedOnPresenterTemplateParametersRector::TEMPLATE_CLASS_PARENT: '', Rector\Nette\Rector\Class_\TemplateTypeBasedOnPresenterTemplateParametersRector::TEMPLATE_CLASS_TRAITS: []]);
|
||||
$rectorConfig->ruleWithConfiguration(TemplateTypeBasedOnPresenterTemplateParametersRector::class, [
|
||||
TemplateTypeBasedOnPresenterTemplateParametersRector::TEMPLATE_CLASS_PARENT => '',
|
||||
TemplateTypeBasedOnPresenterTemplateParametersRector::TEMPLATE_CLASS_TRAITS => [],
|
||||
]);
|
||||
};
|
||||
```
|
||||
|
||||
|
|
|
@ -1,13 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare (strict_types=1);
|
||||
namespace Rector\Nette\Contract;
|
||||
|
||||
use PhpParser\Node;
|
||||
interface FormControlTypeResolverInterface
|
||||
{
|
||||
/**
|
||||
* @return array<string, string>
|
||||
*/
|
||||
public function resolve(Node $node) : array;
|
||||
}
|
|
@ -1,31 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare (strict_types=1);
|
||||
namespace Rector\Nette\Enum;
|
||||
|
||||
final class NetteFormMethodNameToControlType
|
||||
{
|
||||
/**
|
||||
* @var array<string, string>
|
||||
*/
|
||||
public const METHOD_NAME_TO_CONTROL_TYPE = [
|
||||
'addText' => 'Nette\\Forms\\Controls\\TextInput',
|
||||
'addPassword' => 'Nette\\Forms\\Controls\\TextInput',
|
||||
'addEmail' => 'Nette\\Forms\\Controls\\TextInput',
|
||||
'addInteger' => 'Nette\\Forms\\Controls\\TextInput',
|
||||
'addUpload' => 'Nette\\Forms\\Controls\\UploadControl',
|
||||
'addMultiUpload' => 'Nette\\Forms\\Controls\\UploadControl',
|
||||
'addTextArea' => 'Nette\\Forms\\Controls\\TextArea',
|
||||
'addHidden' => 'Nette\\Forms\\Controls\\HiddenField',
|
||||
'addCheckbox' => 'Nette\\Forms\\Controls\\Checkbox',
|
||||
'addRadioList' => 'Nette\\Forms\\Controls\\RadioList',
|
||||
'addCheckboxList' => 'Nette\\Forms\\Controls\\CheckboxList',
|
||||
'addSelect' => 'Nette\\Forms\\Controls\\SelectBox',
|
||||
'addMultiSelect' => 'Nette\\Forms\\Controls\\MultiSelectBox',
|
||||
'addSubmit' => 'Nette\\Forms\\Controls\\SubmitButton',
|
||||
'addButton' => 'Nette\\Forms\\Controls\\Button',
|
||||
'addImage' => 'Nette\\Forms\\Controls\\ImageButton',
|
||||
// custom
|
||||
'addJSelect' => 'DependentSelectBox\\JsonDependentSelectBox',
|
||||
];
|
||||
}
|
|
@ -1,82 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare (strict_types=1);
|
||||
namespace Rector\Nette\FormControlTypeResolver;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Expr\ArrayDimFetch;
|
||||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
use PHPStan\Type\TypeWithClassName;
|
||||
use Rector\Core\PhpParser\AstResolver;
|
||||
use Rector\Nette\Contract\FormControlTypeResolverInterface;
|
||||
use Rector\Nette\Naming\NetteControlNaming;
|
||||
use Rector\Nette\NodeAnalyzer\ControlDimFetchAnalyzer;
|
||||
use Rector\NodeTypeResolver\NodeTypeResolver;
|
||||
use Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer;
|
||||
final class ArrayDimFetchControlTypeResolver implements FormControlTypeResolverInterface
|
||||
{
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Nette\NodeAnalyzer\ControlDimFetchAnalyzer
|
||||
*/
|
||||
private $controlDimFetchAnalyzer;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Nette\Naming\NetteControlNaming
|
||||
*/
|
||||
private $netteControlNaming;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\NodeTypeResolver\NodeTypeResolver
|
||||
*/
|
||||
private $nodeTypeResolver;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer
|
||||
*/
|
||||
private $returnTypeInferer;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Core\PhpParser\AstResolver
|
||||
*/
|
||||
private $astResolver;
|
||||
public function __construct(ControlDimFetchAnalyzer $controlDimFetchAnalyzer, NetteControlNaming $netteControlNaming, NodeTypeResolver $nodeTypeResolver, ReturnTypeInferer $returnTypeInferer, AstResolver $astResolver)
|
||||
{
|
||||
$this->controlDimFetchAnalyzer = $controlDimFetchAnalyzer;
|
||||
$this->netteControlNaming = $netteControlNaming;
|
||||
$this->nodeTypeResolver = $nodeTypeResolver;
|
||||
$this->returnTypeInferer = $returnTypeInferer;
|
||||
$this->astResolver = $astResolver;
|
||||
}
|
||||
/**
|
||||
* @return array<string, string>
|
||||
*/
|
||||
public function resolve(Node $node) : array
|
||||
{
|
||||
if (!$node instanceof ArrayDimFetch) {
|
||||
return [];
|
||||
}
|
||||
$controlShortName = $this->controlDimFetchAnalyzer->matchName($node);
|
||||
if ($controlShortName === null) {
|
||||
return [];
|
||||
}
|
||||
$createComponentClassMethod = $this->matchCreateComponentClassMethod($node, $controlShortName);
|
||||
if (!$createComponentClassMethod instanceof ClassMethod) {
|
||||
return [];
|
||||
}
|
||||
$createComponentClassMethodReturnType = $this->returnTypeInferer->inferFunctionLike($createComponentClassMethod);
|
||||
if (!$createComponentClassMethodReturnType instanceof TypeWithClassName) {
|
||||
return [];
|
||||
}
|
||||
return [$controlShortName => $createComponentClassMethodReturnType->getClassName()];
|
||||
}
|
||||
private function matchCreateComponentClassMethod(ArrayDimFetch $arrayDimFetch, string $controlShortName) : ?ClassMethod
|
||||
{
|
||||
$callerType = $this->nodeTypeResolver->getType($arrayDimFetch->var);
|
||||
if (!$callerType instanceof TypeWithClassName) {
|
||||
return null;
|
||||
}
|
||||
$methodName = $this->netteControlNaming->createCreateComponentClassMethodName($controlShortName);
|
||||
return $this->astResolver->resolveClassMethod($callerType->getClassName(), $methodName);
|
||||
}
|
||||
}
|
|
@ -1,55 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare (strict_types=1);
|
||||
namespace Rector\Nette\FormControlTypeResolver;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Expr\ArrayDimFetch;
|
||||
use PhpParser\Node\Expr\Assign;
|
||||
use PhpParser\Node\Scalar\String_;
|
||||
use PHPStan\Type\TypeWithClassName;
|
||||
use Rector\Core\PhpParser\Node\BetterNodeFinder;
|
||||
use Rector\Nette\Contract\FormControlTypeResolverInterface;
|
||||
use Rector\NodeTypeResolver\NodeTypeResolver;
|
||||
final class AssignDimFetchFormTypeResolver implements FormControlTypeResolverInterface
|
||||
{
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
|
||||
*/
|
||||
private $betterNodeFinder;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\NodeTypeResolver\NodeTypeResolver
|
||||
*/
|
||||
private $nodeTypeResolver;
|
||||
public function __construct(BetterNodeFinder $betterNodeFinder, NodeTypeResolver $nodeTypeResolver)
|
||||
{
|
||||
$this->betterNodeFinder = $betterNodeFinder;
|
||||
$this->nodeTypeResolver = $nodeTypeResolver;
|
||||
}
|
||||
/**
|
||||
* @return array<string, string>
|
||||
*/
|
||||
public function resolve(Node $node) : array
|
||||
{
|
||||
if (!$node instanceof ArrayDimFetch) {
|
||||
return [];
|
||||
}
|
||||
// traverse up and find all $this['some_name'] = $type
|
||||
/** @var Assign|null $formVariableAssign */
|
||||
$formVariableAssign = $this->betterNodeFinder->findPreviousAssignToExpr($node);
|
||||
if (!$formVariableAssign instanceof Assign) {
|
||||
return [];
|
||||
}
|
||||
if (!$node->dim instanceof String_) {
|
||||
return [];
|
||||
}
|
||||
$exprType = $this->nodeTypeResolver->getType($formVariableAssign->expr);
|
||||
if (!$exprType instanceof TypeWithClassName) {
|
||||
return [];
|
||||
}
|
||||
$name = $node->dim->value;
|
||||
return [$name => $exprType->getClassName()];
|
||||
}
|
||||
}
|
|
@ -1,49 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare (strict_types=1);
|
||||
namespace Rector\Nette\FormControlTypeResolver;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Expr\Assign;
|
||||
use PhpParser\Node\Expr\Variable;
|
||||
use Rector\Core\PhpParser\Node\BetterNodeFinder;
|
||||
use Rector\Nette\Contract\FormControlTypeResolverInterface;
|
||||
use Rector\Nette\NodeResolver\MethodNamesByInputNamesResolver;
|
||||
use RectorPrefix202208\Symfony\Contracts\Service\Attribute\Required;
|
||||
final class AssignedVariablesMethodCallsFormTypeResolver implements FormControlTypeResolverInterface
|
||||
{
|
||||
/**
|
||||
* @var \Rector\Nette\NodeResolver\MethodNamesByInputNamesResolver
|
||||
*/
|
||||
private $methodNamesByInputNamesResolver;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
|
||||
*/
|
||||
private $betterNodeFinder;
|
||||
public function __construct(BetterNodeFinder $betterNodeFinder)
|
||||
{
|
||||
$this->betterNodeFinder = $betterNodeFinder;
|
||||
}
|
||||
/**
|
||||
* @required
|
||||
*/
|
||||
public function autowire(MethodNamesByInputNamesResolver $methodNamesByInputNamesResolver) : void
|
||||
{
|
||||
$this->methodNamesByInputNamesResolver = $methodNamesByInputNamesResolver;
|
||||
}
|
||||
/**
|
||||
* @return array<string, string>
|
||||
*/
|
||||
public function resolve(Node $node) : array
|
||||
{
|
||||
if (!$node instanceof Variable) {
|
||||
return [];
|
||||
}
|
||||
$formVariableAssign = $this->betterNodeFinder->findPreviousAssignToExpr($node);
|
||||
if (!$formVariableAssign instanceof Assign) {
|
||||
return [];
|
||||
}
|
||||
return $this->methodNamesByInputNamesResolver->resolveExpr($formVariableAssign->expr);
|
||||
}
|
||||
}
|
|
@ -1,64 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare (strict_types=1);
|
||||
namespace Rector\Nette\FormControlTypeResolver;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Expr\Variable;
|
||||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
use PhpParser\Node\Stmt\Return_;
|
||||
use Rector\Core\PhpParser\Node\BetterNodeFinder;
|
||||
use Rector\Core\ValueObject\MethodName;
|
||||
use Rector\Nette\Contract\FormControlTypeResolverInterface;
|
||||
use Rector\Nette\NodeResolver\MethodNamesByInputNamesResolver;
|
||||
use Rector\NodeNameResolver\NodeNameResolver;
|
||||
use RectorPrefix202208\Symfony\Contracts\Service\Attribute\Required;
|
||||
final class ClassMethodFormTypeResolver implements FormControlTypeResolverInterface
|
||||
{
|
||||
/**
|
||||
* @var \Rector\Nette\NodeResolver\MethodNamesByInputNamesResolver
|
||||
*/
|
||||
private $methodNamesByInputNamesResolver;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
|
||||
*/
|
||||
private $betterNodeFinder;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\NodeNameResolver\NodeNameResolver
|
||||
*/
|
||||
private $nodeNameResolver;
|
||||
public function __construct(BetterNodeFinder $betterNodeFinder, NodeNameResolver $nodeNameResolver)
|
||||
{
|
||||
$this->betterNodeFinder = $betterNodeFinder;
|
||||
$this->nodeNameResolver = $nodeNameResolver;
|
||||
}
|
||||
/**
|
||||
* @required
|
||||
*/
|
||||
public function autowire(MethodNamesByInputNamesResolver $methodNamesByInputNamesResolver) : void
|
||||
{
|
||||
$this->methodNamesByInputNamesResolver = $methodNamesByInputNamesResolver;
|
||||
}
|
||||
/**
|
||||
* @return array<string, string>
|
||||
*/
|
||||
public function resolve(Node $node) : array
|
||||
{
|
||||
if (!$node instanceof ClassMethod) {
|
||||
return [];
|
||||
}
|
||||
if ($this->nodeNameResolver->isName($node, MethodName::CONSTRUCT)) {
|
||||
return [];
|
||||
}
|
||||
$lastReturn = $this->betterNodeFinder->findLastInstanceOf((array) $node->stmts, Return_::class);
|
||||
if (!$lastReturn instanceof Return_) {
|
||||
return [];
|
||||
}
|
||||
if (!$lastReturn->expr instanceof Variable) {
|
||||
return [];
|
||||
}
|
||||
return $this->methodNamesByInputNamesResolver->resolveExpr($lastReturn->expr);
|
||||
}
|
||||
}
|
|
@ -1,60 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare (strict_types=1);
|
||||
namespace Rector\Nette\FormControlTypeResolver;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Expr\Variable;
|
||||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
use Rector\Core\PhpParser\Node\BetterNodeFinder;
|
||||
use Rector\Core\ValueObject\MethodName;
|
||||
use Rector\Nette\Contract\FormControlTypeResolverInterface;
|
||||
use Rector\Nette\NodeResolver\MethodNamesByInputNamesResolver;
|
||||
use Rector\NodeNameResolver\NodeNameResolver;
|
||||
use RectorPrefix202208\Symfony\Contracts\Service\Attribute\Required;
|
||||
final class ConstructorFormControlTypeResolver implements FormControlTypeResolverInterface
|
||||
{
|
||||
/**
|
||||
* @var \Rector\Nette\NodeResolver\MethodNamesByInputNamesResolver
|
||||
*/
|
||||
private $methodNamesByInputNamesResolver;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
|
||||
*/
|
||||
private $betterNodeFinder;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\NodeNameResolver\NodeNameResolver
|
||||
*/
|
||||
private $nodeNameResolver;
|
||||
public function __construct(BetterNodeFinder $betterNodeFinder, NodeNameResolver $nodeNameResolver)
|
||||
{
|
||||
$this->betterNodeFinder = $betterNodeFinder;
|
||||
$this->nodeNameResolver = $nodeNameResolver;
|
||||
}
|
||||
/**
|
||||
* @required
|
||||
*/
|
||||
public function autowire(MethodNamesByInputNamesResolver $methodNamesByInputNamesResolver) : void
|
||||
{
|
||||
$this->methodNamesByInputNamesResolver = $methodNamesByInputNamesResolver;
|
||||
}
|
||||
/**
|
||||
* @return array<string, string>
|
||||
*/
|
||||
public function resolve(Node $node) : array
|
||||
{
|
||||
if (!$node instanceof ClassMethod) {
|
||||
return [];
|
||||
}
|
||||
if (!$this->nodeNameResolver->isName($node, MethodName::CONSTRUCT)) {
|
||||
return [];
|
||||
}
|
||||
$thisVariable = $this->betterNodeFinder->findVariableOfName($node, 'this');
|
||||
if (!$thisVariable instanceof Variable) {
|
||||
return [];
|
||||
}
|
||||
return $this->methodNamesByInputNamesResolver->resolveExpr($thisVariable);
|
||||
}
|
||||
}
|
|
@ -1,101 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare (strict_types=1);
|
||||
namespace Rector\Nette\FormControlTypeResolver;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Expr\MethodCall;
|
||||
use PHPStan\Type\TypeWithClassName;
|
||||
use Rector\Core\Exception\ShouldNotHappenException;
|
||||
use Rector\Core\PhpParser\AstResolver;
|
||||
use Rector\Core\PhpParser\Node\Value\ValueResolver;
|
||||
use Rector\Core\ValueObject\MethodName;
|
||||
use Rector\Nette\Contract\FormControlTypeResolverInterface;
|
||||
use Rector\Nette\NodeResolver\MethodNamesByInputNamesResolver;
|
||||
use Rector\NodeNameResolver\NodeNameResolver;
|
||||
use Rector\NodeTypeResolver\NodeTypeResolver;
|
||||
use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType;
|
||||
use RectorPrefix202208\Symfony\Contracts\Service\Attribute\Required;
|
||||
final class GetComponentMethodCallFormControlTypeResolver implements FormControlTypeResolverInterface
|
||||
{
|
||||
/**
|
||||
* @var \Rector\Nette\NodeResolver\MethodNamesByInputNamesResolver
|
||||
*/
|
||||
private $methodNamesByInputNamesResolver;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\NodeNameResolver\NodeNameResolver
|
||||
*/
|
||||
private $nodeNameResolver;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\NodeTypeResolver\NodeTypeResolver
|
||||
*/
|
||||
private $nodeTypeResolver;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Core\PhpParser\Node\Value\ValueResolver
|
||||
*/
|
||||
private $valueResolver;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Core\PhpParser\AstResolver
|
||||
*/
|
||||
private $astResolver;
|
||||
public function __construct(NodeNameResolver $nodeNameResolver, NodeTypeResolver $nodeTypeResolver, ValueResolver $valueResolver, AstResolver $astResolver)
|
||||
{
|
||||
$this->nodeNameResolver = $nodeNameResolver;
|
||||
$this->nodeTypeResolver = $nodeTypeResolver;
|
||||
$this->valueResolver = $valueResolver;
|
||||
$this->astResolver = $astResolver;
|
||||
}
|
||||
/**
|
||||
* @required
|
||||
*/
|
||||
public function autowire(MethodNamesByInputNamesResolver $methodNamesByInputNamesResolver) : void
|
||||
{
|
||||
$this->methodNamesByInputNamesResolver = $methodNamesByInputNamesResolver;
|
||||
}
|
||||
/**
|
||||
* @return array<string, string>
|
||||
*/
|
||||
public function resolve(Node $node) : array
|
||||
{
|
||||
if (!$node instanceof MethodCall) {
|
||||
return [];
|
||||
}
|
||||
if (!$this->nodeNameResolver->isName($node->name, 'getComponent')) {
|
||||
return [];
|
||||
}
|
||||
$createComponentClassMethodName = $this->createCreateComponentMethodName($node);
|
||||
$staticType = $this->nodeTypeResolver->getType($node);
|
||||
if (!$staticType instanceof FullyQualifiedObjectType) {
|
||||
return [];
|
||||
}
|
||||
// combine constructor + method body name
|
||||
$constructorClassMethodData = [];
|
||||
$constructorClassMethod = $this->astResolver->resolveClassMethod($staticType->getClassName(), MethodName::CONSTRUCT);
|
||||
if ($constructorClassMethod !== null) {
|
||||
$constructorClassMethodData = $this->methodNamesByInputNamesResolver->resolveExpr($constructorClassMethod);
|
||||
}
|
||||
$callerType = $this->nodeTypeResolver->getType($node->var);
|
||||
if (!$callerType instanceof TypeWithClassName) {
|
||||
return $constructorClassMethodData;
|
||||
}
|
||||
$createComponentClassMethodData = [];
|
||||
$createComponentClassMethod = $this->astResolver->resolveClassMethod($callerType->getClassName(), $createComponentClassMethodName);
|
||||
if ($createComponentClassMethod !== null) {
|
||||
$createComponentClassMethodData = $this->methodNamesByInputNamesResolver->resolveExpr($createComponentClassMethod);
|
||||
}
|
||||
return \array_merge($constructorClassMethodData, $createComponentClassMethodData);
|
||||
}
|
||||
private function createCreateComponentMethodName(MethodCall $methodCall) : string
|
||||
{
|
||||
$firstArgumentValue = $methodCall->args[0]->value;
|
||||
$componentName = $this->valueResolver->getValue($firstArgumentValue);
|
||||
if (!\is_string($componentName)) {
|
||||
throw new ShouldNotHappenException();
|
||||
}
|
||||
return 'createComponent' . \ucfirst($componentName);
|
||||
}
|
||||
}
|
|
@ -1,101 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare (strict_types=1);
|
||||
namespace Rector\Nette\FormControlTypeResolver;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Expr;
|
||||
use PhpParser\Node\Expr\MethodCall;
|
||||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
use PHPStan\Reflection\ClassReflection;
|
||||
use PHPStan\Reflection\ReflectionProvider;
|
||||
use PHPStan\Type\TypeWithClassName;
|
||||
use Rector\Core\PhpParser\AstResolver;
|
||||
use Rector\Core\ValueObject\MethodName;
|
||||
use Rector\Nette\Contract\FormControlTypeResolverInterface;
|
||||
use Rector\Nette\NodeResolver\MethodNamesByInputNamesResolver;
|
||||
use Rector\NodeNameResolver\NodeNameResolver;
|
||||
use Rector\NodeTypeResolver\NodeTypeResolver;
|
||||
use RectorPrefix202208\Symfony\Contracts\Service\Attribute\Required;
|
||||
final class MagicNetteFactoryInterfaceFormControlTypeResolver implements FormControlTypeResolverInterface
|
||||
{
|
||||
/**
|
||||
* @var \Rector\Nette\NodeResolver\MethodNamesByInputNamesResolver
|
||||
*/
|
||||
private $methodNamesByInputNamesResolver;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\NodeNameResolver\NodeNameResolver
|
||||
*/
|
||||
private $nodeNameResolver;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\NodeTypeResolver\NodeTypeResolver
|
||||
*/
|
||||
private $nodeTypeResolver;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \PHPStan\Reflection\ReflectionProvider
|
||||
*/
|
||||
private $reflectionProvider;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Core\PhpParser\AstResolver
|
||||
*/
|
||||
private $astResolver;
|
||||
public function __construct(NodeNameResolver $nodeNameResolver, NodeTypeResolver $nodeTypeResolver, ReflectionProvider $reflectionProvider, AstResolver $astResolver)
|
||||
{
|
||||
$this->nodeNameResolver = $nodeNameResolver;
|
||||
$this->nodeTypeResolver = $nodeTypeResolver;
|
||||
$this->reflectionProvider = $reflectionProvider;
|
||||
$this->astResolver = $astResolver;
|
||||
}
|
||||
/**
|
||||
* @required
|
||||
*/
|
||||
public function autowire(MethodNamesByInputNamesResolver $methodNamesByInputNamesResolver) : void
|
||||
{
|
||||
$this->methodNamesByInputNamesResolver = $methodNamesByInputNamesResolver;
|
||||
}
|
||||
/**
|
||||
* @return array<string, string>
|
||||
*/
|
||||
public function resolve(Node $node) : array
|
||||
{
|
||||
if (!$node instanceof MethodCall) {
|
||||
return [];
|
||||
}
|
||||
// skip constructor, handled elsewhere
|
||||
if ($this->nodeNameResolver->isName($node->name, MethodName::CONSTRUCT)) {
|
||||
return [];
|
||||
}
|
||||
$methodName = $this->nodeNameResolver->getName($node->name);
|
||||
if ($methodName === null) {
|
||||
return [];
|
||||
}
|
||||
$classReflection = $this->resolveClassReflectionByExpr($node->var);
|
||||
if (!$classReflection instanceof ClassReflection) {
|
||||
return [];
|
||||
}
|
||||
$returnedType = $this->nodeTypeResolver->getType($node);
|
||||
if (!$returnedType instanceof TypeWithClassName) {
|
||||
return [];
|
||||
}
|
||||
$classMethod = $this->astResolver->resolveClassMethod($returnedType->getClassName(), MethodName::CONSTRUCT);
|
||||
if (!$classMethod instanceof ClassMethod) {
|
||||
return [];
|
||||
}
|
||||
return $this->methodNamesByInputNamesResolver->resolveExpr($classMethod);
|
||||
}
|
||||
private function resolveClassReflectionByExpr(Expr $expr) : ?ClassReflection
|
||||
{
|
||||
$staticType = $this->nodeTypeResolver->getType($expr);
|
||||
if (!$staticType instanceof TypeWithClassName) {
|
||||
return null;
|
||||
}
|
||||
if (!$this->reflectionProvider->hasClass($staticType->getClassName())) {
|
||||
return null;
|
||||
}
|
||||
return $this->reflectionProvider->getClass($staticType->getClassName());
|
||||
}
|
||||
}
|
|
@ -1,61 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare (strict_types=1);
|
||||
namespace Rector\Nette\FormControlTypeResolver;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Expr\New_;
|
||||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
use Rector\Core\PhpParser\AstResolver;
|
||||
use Rector\Core\ValueObject\MethodName;
|
||||
use Rector\Nette\Contract\FormControlTypeResolverInterface;
|
||||
use Rector\Nette\NodeResolver\MethodNamesByInputNamesResolver;
|
||||
use Rector\NodeNameResolver\NodeNameResolver;
|
||||
use RectorPrefix202208\Symfony\Contracts\Service\Attribute\Required;
|
||||
final class NewFormControlTypeResolver implements FormControlTypeResolverInterface
|
||||
{
|
||||
/**
|
||||
* @var \Rector\Nette\NodeResolver\MethodNamesByInputNamesResolver
|
||||
*/
|
||||
private $methodNamesByInputNamesResolver;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\NodeNameResolver\NodeNameResolver
|
||||
*/
|
||||
private $nodeNameResolver;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Core\PhpParser\AstResolver
|
||||
*/
|
||||
private $astResolver;
|
||||
public function __construct(NodeNameResolver $nodeNameResolver, AstResolver $astResolver)
|
||||
{
|
||||
$this->nodeNameResolver = $nodeNameResolver;
|
||||
$this->astResolver = $astResolver;
|
||||
}
|
||||
/**
|
||||
* @required
|
||||
*/
|
||||
public function autowire(MethodNamesByInputNamesResolver $methodNamesByInputNamesResolver) : void
|
||||
{
|
||||
$this->methodNamesByInputNamesResolver = $methodNamesByInputNamesResolver;
|
||||
}
|
||||
/**
|
||||
* @return array<string, string>
|
||||
*/
|
||||
public function resolve(Node $node) : array
|
||||
{
|
||||
if (!$node instanceof New_) {
|
||||
return [];
|
||||
}
|
||||
$className = $this->nodeNameResolver->getName($node->class);
|
||||
if ($className === null) {
|
||||
return [];
|
||||
}
|
||||
$classMethod = $this->astResolver->resolveClassMethod($className, MethodName::CONSTRUCT);
|
||||
if (!$classMethod instanceof ClassMethod) {
|
||||
return [];
|
||||
}
|
||||
return $this->methodNamesByInputNamesResolver->resolveExpr($classMethod);
|
||||
}
|
||||
}
|
|
@ -1,66 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare (strict_types=1);
|
||||
namespace Rector\Nette\FormControlTypeResolver;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Expr\Variable;
|
||||
use Rector\Core\Exception\ShouldNotHappenException;
|
||||
use Rector\Core\PhpParser\Node\Value\ValueResolver;
|
||||
use Rector\Nette\Contract\FormControlTypeResolverInterface;
|
||||
use Rector\Nette\Enum\NetteFormMethodNameToControlType;
|
||||
use Rector\Nette\NodeAnalyzer\MethodCallManipulator;
|
||||
use Rector\NodeNameResolver\NodeNameResolver;
|
||||
final class OnVariableMethodCallsFormControlTypeResolver implements FormControlTypeResolverInterface
|
||||
{
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Nette\NodeAnalyzer\MethodCallManipulator
|
||||
*/
|
||||
private $methodCallManipulator;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\NodeNameResolver\NodeNameResolver
|
||||
*/
|
||||
private $nodeNameResolver;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Core\PhpParser\Node\Value\ValueResolver
|
||||
*/
|
||||
private $valueResolver;
|
||||
public function __construct(MethodCallManipulator $methodCallManipulator, NodeNameResolver $nodeNameResolver, ValueResolver $valueResolver)
|
||||
{
|
||||
$this->methodCallManipulator = $methodCallManipulator;
|
||||
$this->nodeNameResolver = $nodeNameResolver;
|
||||
$this->valueResolver = $valueResolver;
|
||||
}
|
||||
/**
|
||||
* @return array<string, string>
|
||||
*/
|
||||
public function resolve(Node $node) : array
|
||||
{
|
||||
if (!$node instanceof Variable) {
|
||||
return [];
|
||||
}
|
||||
$onFormMethodCalls = $this->methodCallManipulator->findMethodCallsOnVariable($node);
|
||||
$methodNamesByInputNames = [];
|
||||
foreach ($onFormMethodCalls as $onFormMethodCall) {
|
||||
$methodName = $this->nodeNameResolver->getName($onFormMethodCall->name);
|
||||
if ($methodName === null) {
|
||||
continue;
|
||||
}
|
||||
if (!isset(NetteFormMethodNameToControlType::METHOD_NAME_TO_CONTROL_TYPE[$methodName])) {
|
||||
continue;
|
||||
}
|
||||
if (!isset($onFormMethodCall->args[0])) {
|
||||
continue;
|
||||
}
|
||||
$addedInputName = $this->valueResolver->getValue($onFormMethodCall->args[0]->value);
|
||||
if (!\is_string($addedInputName)) {
|
||||
throw new ShouldNotHappenException();
|
||||
}
|
||||
$methodNamesByInputNames[$addedInputName] = $methodName;
|
||||
}
|
||||
return $methodNamesByInputNames;
|
||||
}
|
||||
}
|
|
@ -1,53 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare (strict_types=1);
|
||||
namespace Rector\Nette\FormControlTypeResolver;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Expr\Assign;
|
||||
use PhpParser\Node\Expr\Variable;
|
||||
use PhpParser\Node\Stmt\Return_;
|
||||
use Rector\Core\PhpParser\Node\BetterNodeFinder;
|
||||
use Rector\Nette\Contract\FormControlTypeResolverInterface;
|
||||
use Rector\Nette\NodeResolver\MethodNamesByInputNamesResolver;
|
||||
use RectorPrefix202208\Symfony\Contracts\Service\Attribute\Required;
|
||||
final class ReturnFormControlTypeResolver implements FormControlTypeResolverInterface
|
||||
{
|
||||
/**
|
||||
* @var \Rector\Nette\NodeResolver\MethodNamesByInputNamesResolver
|
||||
*/
|
||||
private $methodNamesByInputNamesResolver;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
|
||||
*/
|
||||
private $betterNodeFinder;
|
||||
public function __construct(BetterNodeFinder $betterNodeFinder)
|
||||
{
|
||||
$this->betterNodeFinder = $betterNodeFinder;
|
||||
}
|
||||
/**
|
||||
* @required
|
||||
*/
|
||||
public function autowire(MethodNamesByInputNamesResolver $methodNamesByInputNamesResolver) : void
|
||||
{
|
||||
$this->methodNamesByInputNamesResolver = $methodNamesByInputNamesResolver;
|
||||
}
|
||||
/**
|
||||
* @return array<string, string>
|
||||
*/
|
||||
public function resolve(Node $node) : array
|
||||
{
|
||||
if (!$node instanceof Return_) {
|
||||
return [];
|
||||
}
|
||||
if (!$node->expr instanceof Variable) {
|
||||
return [];
|
||||
}
|
||||
$initialAssign = $this->betterNodeFinder->findPreviousAssignToExpr($node->expr);
|
||||
if (!$initialAssign instanceof Assign) {
|
||||
return [];
|
||||
}
|
||||
return $this->methodNamesByInputNamesResolver->resolveExpr($node);
|
||||
}
|
||||
}
|
|
@ -1,70 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare (strict_types=1);
|
||||
namespace Rector\Nette\FormControlTypeResolver;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Expr\Variable;
|
||||
use PhpParser\Node\Stmt\Class_;
|
||||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
use Rector\Core\PhpParser\Node\BetterNodeFinder;
|
||||
use Rector\Core\ValueObject\MethodName;
|
||||
use Rector\Nette\Contract\FormControlTypeResolverInterface;
|
||||
use Rector\Nette\NodeResolver\MethodNamesByInputNamesResolver;
|
||||
use Rector\NodeNameResolver\NodeNameResolver;
|
||||
use RectorPrefix202208\Symfony\Contracts\Service\Attribute\Required;
|
||||
final class ThisVariableInAnotherMethodFormControlTypeResolver implements FormControlTypeResolverInterface
|
||||
{
|
||||
/**
|
||||
* @var \Rector\Nette\NodeResolver\MethodNamesByInputNamesResolver
|
||||
*/
|
||||
private $methodNamesByInputNamesResolver;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\NodeNameResolver\NodeNameResolver
|
||||
*/
|
||||
private $nodeNameResolver;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
|
||||
*/
|
||||
private $betterNodeFinder;
|
||||
public function __construct(NodeNameResolver $nodeNameResolver, BetterNodeFinder $betterNodeFinder)
|
||||
{
|
||||
$this->nodeNameResolver = $nodeNameResolver;
|
||||
$this->betterNodeFinder = $betterNodeFinder;
|
||||
}
|
||||
/**
|
||||
* @required
|
||||
*/
|
||||
public function autowire(MethodNamesByInputNamesResolver $methodNamesByInputNamesResolver) : void
|
||||
{
|
||||
$this->methodNamesByInputNamesResolver = $methodNamesByInputNamesResolver;
|
||||
}
|
||||
/**
|
||||
* @return array<string, string>
|
||||
*/
|
||||
public function resolve(Node $node) : array
|
||||
{
|
||||
if (!$node instanceof Variable) {
|
||||
return [];
|
||||
}
|
||||
$classMethod = $this->betterNodeFinder->findParentType($node, ClassMethod::class);
|
||||
if (!$classMethod instanceof ClassMethod) {
|
||||
return [];
|
||||
}
|
||||
// handled elsewhere
|
||||
if ($this->nodeNameResolver->isName($classMethod, MethodName::CONSTRUCT)) {
|
||||
return [];
|
||||
}
|
||||
$class = $this->betterNodeFinder->findParentType($node, Class_::class);
|
||||
if (!$class instanceof Class_) {
|
||||
return [];
|
||||
}
|
||||
$constructorClassMethod = $class->getMethod(MethodName::CONSTRUCT);
|
||||
if (!$constructorClassMethod instanceof ClassMethod) {
|
||||
return [];
|
||||
}
|
||||
return $this->methodNamesByInputNamesResolver->resolveExpr($constructorClassMethod);
|
||||
}
|
||||
}
|
|
@ -1,84 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare (strict_types=1);
|
||||
namespace Rector\Nette\FormControlTypeResolver;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Expr\Variable;
|
||||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
use PHPStan\Reflection\ReflectionProvider;
|
||||
use PHPStan\Type\TypeWithClassName;
|
||||
use Rector\Core\PhpParser\AstResolver;
|
||||
use Rector\Core\ValueObject\MethodName;
|
||||
use Rector\Nette\Contract\FormControlTypeResolverInterface;
|
||||
use Rector\Nette\NodeResolver\MethodNamesByInputNamesResolver;
|
||||
use Rector\NodeNameResolver\NodeNameResolver;
|
||||
use Rector\NodeTypeResolver\NodeTypeResolver;
|
||||
use RectorPrefix202208\Symfony\Contracts\Service\Attribute\Required;
|
||||
final class VariableConstructorFormControlTypeResolver implements FormControlTypeResolverInterface
|
||||
{
|
||||
/**
|
||||
* @var \Rector\Nette\NodeResolver\MethodNamesByInputNamesResolver
|
||||
*/
|
||||
private $methodNamesByInputNamesResolver;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\NodeTypeResolver\NodeTypeResolver
|
||||
*/
|
||||
private $nodeTypeResolver;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\NodeNameResolver\NodeNameResolver
|
||||
*/
|
||||
private $nodeNameResolver;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \PHPStan\Reflection\ReflectionProvider
|
||||
*/
|
||||
private $reflectionProvider;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Core\PhpParser\AstResolver
|
||||
*/
|
||||
private $astResolver;
|
||||
public function __construct(NodeTypeResolver $nodeTypeResolver, NodeNameResolver $nodeNameResolver, ReflectionProvider $reflectionProvider, AstResolver $astResolver)
|
||||
{
|
||||
$this->nodeTypeResolver = $nodeTypeResolver;
|
||||
$this->nodeNameResolver = $nodeNameResolver;
|
||||
$this->reflectionProvider = $reflectionProvider;
|
||||
$this->astResolver = $astResolver;
|
||||
}
|
||||
/**
|
||||
* @return array<string, string>
|
||||
*/
|
||||
public function resolve(Node $node) : array
|
||||
{
|
||||
if (!$node instanceof Variable) {
|
||||
return [];
|
||||
}
|
||||
// handled else-where
|
||||
if ($this->nodeNameResolver->isName($node, 'this')) {
|
||||
return [];
|
||||
}
|
||||
$formType = $this->nodeTypeResolver->getType($node);
|
||||
if (!$formType instanceof TypeWithClassName) {
|
||||
return [];
|
||||
}
|
||||
$formClassReflection = $this->reflectionProvider->getClass($formType->getClassName());
|
||||
if (!$formClassReflection->isSubclassOf('Nette\\Application\\UI\\Form')) {
|
||||
return [];
|
||||
}
|
||||
$classMethod = $this->astResolver->resolveClassMethod($formType->getClassName(), MethodName::CONSTRUCT);
|
||||
if (!$classMethod instanceof ClassMethod) {
|
||||
return [];
|
||||
}
|
||||
return $this->methodNamesByInputNamesResolver->resolveExpr($classMethod);
|
||||
}
|
||||
/**
|
||||
* @required
|
||||
*/
|
||||
public function autowire(MethodNamesByInputNamesResolver $methodNamesByInputNamesResolver) : void
|
||||
{
|
||||
$this->methodNamesByInputNamesResolver = $methodNamesByInputNamesResolver;
|
||||
}
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare (strict_types=1);
|
||||
namespace Rector\Nette\Naming;
|
||||
|
||||
use RectorPrefix202208\Symfony\Component\String\UnicodeString;
|
||||
final class NetteControlNaming
|
||||
{
|
||||
public function createVariableName(string $shortName) : string
|
||||
{
|
||||
$variableNameUnicodeString = new UnicodeString($shortName);
|
||||
$variableName = $variableNameUnicodeString->camel()->toString();
|
||||
if (\substr_compare($variableName, 'Form', -\strlen('Form')) === 0) {
|
||||
return $variableName;
|
||||
}
|
||||
return $variableName . 'Control';
|
||||
}
|
||||
public function createCreateComponentClassMethodName(string $shortName) : string
|
||||
{
|
||||
$shortNameUnicodeString = new UnicodeString($shortName);
|
||||
$componentName = $shortNameUnicodeString->upper()->camel()->toString();
|
||||
return 'createComponent' . $componentName;
|
||||
}
|
||||
}
|
|
@ -1,22 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare (strict_types=1);
|
||||
namespace Rector\Nette\NodeAnalyzer;
|
||||
|
||||
use PhpParser\Node\Expr\ArrayDimFetch;
|
||||
use PhpParser\Node\Expr\Assign;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
final class ArrayDimFetchAnalyzer
|
||||
{
|
||||
public function isBeingAssignedOrInitialized(ArrayDimFetch $arrayDimFetch) : bool
|
||||
{
|
||||
$parent = $arrayDimFetch->getAttribute(AttributeKey::PARENT_NODE);
|
||||
if (!$parent instanceof Assign) {
|
||||
return \false;
|
||||
}
|
||||
if ($parent->var === $arrayDimFetch) {
|
||||
return \true;
|
||||
}
|
||||
return $parent->expr === $arrayDimFetch;
|
||||
}
|
||||
}
|
|
@ -1,57 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare (strict_types=1);
|
||||
namespace Rector\Nette\NodeAnalyzer;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Expr\ArrayDimFetch;
|
||||
use PhpParser\Node\Expr\ArrowFunction;
|
||||
use PhpParser\Node\Expr\Closure;
|
||||
use PhpParser\Node\Expr\Variable;
|
||||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
use PhpParser\Node\Stmt\Function_;
|
||||
use PhpParser\NodeTraverser;
|
||||
use Rector\Core\PhpParser\Comparing\NodeComparator;
|
||||
use Rector\Naming\VariableRenamer;
|
||||
use RectorPrefix202208\Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser;
|
||||
final class ArrayDimFetchRenamer
|
||||
{
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser
|
||||
*/
|
||||
private $simpleCallableNodeTraverser;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Core\PhpParser\Comparing\NodeComparator
|
||||
*/
|
||||
private $nodeComparator;
|
||||
public function __construct(SimpleCallableNodeTraverser $simpleCallableNodeTraverser, NodeComparator $nodeComparator)
|
||||
{
|
||||
$this->simpleCallableNodeTraverser = $simpleCallableNodeTraverser;
|
||||
$this->nodeComparator = $nodeComparator;
|
||||
}
|
||||
/**
|
||||
* @see VariableRenamer::renameVariableInFunctionLike()
|
||||
*/
|
||||
public function renameToVariable(ClassMethod $classMethod, ArrayDimFetch $arrayDimFetch, string $variableName) : void
|
||||
{
|
||||
$this->simpleCallableNodeTraverser->traverseNodesWithCallable((array) $classMethod->stmts, function (Node $node) use($arrayDimFetch, $variableName) {
|
||||
// do not rename element above
|
||||
if ($node->getLine() <= $arrayDimFetch->getLine()) {
|
||||
return null;
|
||||
}
|
||||
if ($this->isScopeNesting($node)) {
|
||||
return NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN;
|
||||
}
|
||||
if (!$this->nodeComparator->areNodesEqual($node, $arrayDimFetch)) {
|
||||
return null;
|
||||
}
|
||||
return new Variable($variableName);
|
||||
});
|
||||
}
|
||||
private function isScopeNesting(Node $node) : bool
|
||||
{
|
||||
return $node instanceof Closure || $node instanceof Function_ || $node instanceof ArrowFunction;
|
||||
}
|
||||
}
|
|
@ -1,79 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare (strict_types=1);
|
||||
namespace Rector\Nette\NodeAnalyzer;
|
||||
|
||||
use PhpParser\Node\Expr\ArrayDimFetch;
|
||||
use PhpParser\Node\Expr\Assign;
|
||||
use PhpParser\Node\Expr\Variable;
|
||||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
use PhpParser\Node\Stmt\Expression;
|
||||
use PHPStan\Type\ObjectType;
|
||||
use Rector\BetterPhpDocParser\PhpDocManipulator\VarAnnotationManipulator;
|
||||
use Rector\Core\PhpParser\Node\BetterNodeFinder;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
use Rector\PostRector\Collector\NodesToAddCollector;
|
||||
final class AssignAnalyzer
|
||||
{
|
||||
/**
|
||||
* @var string[]
|
||||
*/
|
||||
private $alreadyInitializedAssignsClassMethodObjectHashes = [];
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\PostRector\Collector\NodesToAddCollector
|
||||
*/
|
||||
private $nodesToAddCollector;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\BetterPhpDocParser\PhpDocManipulator\VarAnnotationManipulator
|
||||
*/
|
||||
private $varAnnotationManipulator;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
|
||||
*/
|
||||
private $betterNodeFinder;
|
||||
public function __construct(NodesToAddCollector $nodesToAddCollector, VarAnnotationManipulator $varAnnotationManipulator, BetterNodeFinder $betterNodeFinder)
|
||||
{
|
||||
$this->nodesToAddCollector = $nodesToAddCollector;
|
||||
$this->varAnnotationManipulator = $varAnnotationManipulator;
|
||||
$this->betterNodeFinder = $betterNodeFinder;
|
||||
}
|
||||
public function addAssignExpressionForFirstCase(string $variableName, ArrayDimFetch $arrayDimFetch, ObjectType $controlObjectType) : void
|
||||
{
|
||||
if ($this->shouldSkipForAlreadyAddedInCurrentClassMethod($arrayDimFetch, $variableName)) {
|
||||
return;
|
||||
}
|
||||
$assignExpression = $this->createAnnotatedAssignExpression($variableName, $arrayDimFetch, $controlObjectType);
|
||||
$this->nodesToAddCollector->addNodeBeforeNode($assignExpression, $arrayDimFetch);
|
||||
}
|
||||
private function shouldSkipForAlreadyAddedInCurrentClassMethod(ArrayDimFetch $arrayDimFetch, string $variableName) : bool
|
||||
{
|
||||
$classMethod = $this->betterNodeFinder->findParentType($arrayDimFetch, ClassMethod::class);
|
||||
if (!$classMethod instanceof ClassMethod) {
|
||||
return \false;
|
||||
}
|
||||
$classMethodObjectHash = \spl_object_hash($classMethod) . $variableName;
|
||||
if (\in_array($classMethodObjectHash, $this->alreadyInitializedAssignsClassMethodObjectHashes, \true)) {
|
||||
return \true;
|
||||
}
|
||||
$this->alreadyInitializedAssignsClassMethodObjectHashes[] = $classMethodObjectHash;
|
||||
return \false;
|
||||
}
|
||||
private function createAnnotatedAssignExpression(string $variableName, ArrayDimFetch $arrayDimFetch, ObjectType $controlObjectType) : Expression
|
||||
{
|
||||
$assignExpression = $this->createAssignExpression($variableName, $arrayDimFetch);
|
||||
$this->varAnnotationManipulator->decorateNodeWithInlineVarType($assignExpression, $controlObjectType, $variableName);
|
||||
return $assignExpression;
|
||||
}
|
||||
private function createAssignExpression(string $variableName, ArrayDimFetch $arrayDimFetch) : Expression
|
||||
{
|
||||
$variable = new Variable($variableName);
|
||||
$assignedArrayDimFetch = clone $arrayDimFetch;
|
||||
$assign = new Assign($variable, $assignedArrayDimFetch);
|
||||
$variable->setAttribute(AttributeKey::PARENT_NODE, $assign);
|
||||
$assignedArrayDimFetch->setAttribute(AttributeKey::PARENT_NODE, $assign);
|
||||
return new Expression($assign);
|
||||
}
|
||||
}
|
|
@ -1,72 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare (strict_types=1);
|
||||
namespace Rector\Nette\NodeAnalyzer;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Expr\ArrayDimFetch;
|
||||
use PhpParser\Node\Expr\Assign;
|
||||
use PhpParser\Node\Expr\Variable;
|
||||
use PhpParser\Node\Scalar\String_;
|
||||
use PHPStan\Type\ObjectType;
|
||||
use Rector\NodeTypeResolver\NodeTypeResolver;
|
||||
final class ControlDimFetchAnalyzer
|
||||
{
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\NodeTypeResolver\NodeTypeResolver
|
||||
*/
|
||||
private $nodeTypeResolver;
|
||||
public function __construct(NodeTypeResolver $nodeTypeResolver)
|
||||
{
|
||||
$this->nodeTypeResolver = $nodeTypeResolver;
|
||||
}
|
||||
public function matchNameOnFormOrControlVariable(Node $node) : ?string
|
||||
{
|
||||
return $this->matchNameOnVariableType($node, new ObjectType('Nette\\Application\\UI\\Form'));
|
||||
}
|
||||
public function matchNameOnControlVariable(Node $node) : ?string
|
||||
{
|
||||
return $this->matchNameOnVariableType($node, new ObjectType('Nette\\Application\\UI\\Control'));
|
||||
}
|
||||
public function matchName(Node $node) : ?string
|
||||
{
|
||||
if (!$node instanceof ArrayDimFetch) {
|
||||
return null;
|
||||
}
|
||||
if (!$this->isVariableTypes($node->var, [new ObjectType('Nette\\ComponentModel\\IContainer')])) {
|
||||
return null;
|
||||
}
|
||||
if (!$node->dim instanceof String_) {
|
||||
return null;
|
||||
}
|
||||
return $node->dim->value;
|
||||
}
|
||||
private function matchNameOnVariableType(Node $node, ObjectType $objectType) : ?string
|
||||
{
|
||||
$matchedName = $this->matchName($node);
|
||||
if ($matchedName === null) {
|
||||
return null;
|
||||
}
|
||||
/** @var Assign $node */
|
||||
if (!$this->isVariableTypes($node->var, [$objectType])) {
|
||||
return null;
|
||||
}
|
||||
return $matchedName;
|
||||
}
|
||||
/**
|
||||
* @param ObjectType[] $objectTypes
|
||||
*/
|
||||
private function isVariableTypes(Node $node, array $objectTypes) : bool
|
||||
{
|
||||
if (!$node instanceof Variable) {
|
||||
return \false;
|
||||
}
|
||||
foreach ($objectTypes as $objectType) {
|
||||
if ($this->nodeTypeResolver->isObjectType($node, $objectType)) {
|
||||
return \true;
|
||||
}
|
||||
}
|
||||
return \false;
|
||||
}
|
||||
}
|
|
@ -1,61 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare (strict_types=1);
|
||||
namespace Rector\Nette\NodeAnalyzer;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Expr\MethodCall;
|
||||
use PhpParser\Node\Expr\Variable;
|
||||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
use Rector\Core\PhpParser\Node\BetterNodeFinder;
|
||||
use Rector\Defluent\NodeAnalyzer\FluentChainMethodCallNodeAnalyzer;
|
||||
use Rector\NodeNameResolver\NodeNameResolver;
|
||||
final class MethodCallManipulator
|
||||
{
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
|
||||
*/
|
||||
private $betterNodeFinder;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\NodeNameResolver\NodeNameResolver
|
||||
*/
|
||||
private $nodeNameResolver;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Defluent\NodeAnalyzer\FluentChainMethodCallNodeAnalyzer
|
||||
*/
|
||||
private $fluentChainMethodCallNodeAnalyzer;
|
||||
public function __construct(BetterNodeFinder $betterNodeFinder, NodeNameResolver $nodeNameResolver, FluentChainMethodCallNodeAnalyzer $fluentChainMethodCallNodeAnalyzer)
|
||||
{
|
||||
$this->betterNodeFinder = $betterNodeFinder;
|
||||
$this->nodeNameResolver = $nodeNameResolver;
|
||||
$this->fluentChainMethodCallNodeAnalyzer = $fluentChainMethodCallNodeAnalyzer;
|
||||
}
|
||||
/**
|
||||
* @return MethodCall[]
|
||||
*/
|
||||
public function findMethodCallsOnVariable(Variable $variable) : array
|
||||
{
|
||||
// get scope node, e.g. parent function call, method call or anonymous function
|
||||
$classMethod = $this->betterNodeFinder->findParentType($variable, ClassMethod::class);
|
||||
if (!$classMethod instanceof ClassMethod) {
|
||||
return [];
|
||||
}
|
||||
$variableName = $this->nodeNameResolver->getName($variable);
|
||||
if ($variableName === null) {
|
||||
return [];
|
||||
}
|
||||
/** @var MethodCall[] $methodCalls */
|
||||
$methodCalls = $this->betterNodeFinder->findInstanceOf($classMethod, MethodCall::class);
|
||||
return \array_filter($methodCalls, function (MethodCall $methodCall) use($variableName) : bool {
|
||||
// cover fluent interfaces too
|
||||
$callerNode = $this->fluentChainMethodCallNodeAnalyzer->resolveRootExpr($methodCall);
|
||||
if (!$callerNode instanceof Variable) {
|
||||
return \false;
|
||||
}
|
||||
return $this->nodeNameResolver->isName($callerNode, $variableName);
|
||||
});
|
||||
}
|
||||
}
|
|
@ -1,34 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare (strict_types=1);
|
||||
namespace Rector\Nette\NodeResolver;
|
||||
|
||||
use PhpParser\Node;
|
||||
use Rector\Nette\Contract\FormControlTypeResolverInterface;
|
||||
final class MethodNamesByInputNamesResolver
|
||||
{
|
||||
/**
|
||||
* @var FormControlTypeResolverInterface[]
|
||||
* @readonly
|
||||
*/
|
||||
private $formControlTypeResolvers;
|
||||
/**
|
||||
* @param FormControlTypeResolverInterface[] $formControlTypeResolvers
|
||||
*/
|
||||
public function __construct(array $formControlTypeResolvers)
|
||||
{
|
||||
$this->formControlTypeResolvers = $formControlTypeResolvers;
|
||||
}
|
||||
/**
|
||||
* @return array<string, string>
|
||||
*/
|
||||
public function resolveExpr(Node $node) : array
|
||||
{
|
||||
$methodNamesByInputNames = [];
|
||||
foreach ($this->formControlTypeResolvers as $formControlTypeResolver) {
|
||||
$currentMethodNamesByInputNames = $formControlTypeResolver->resolve($node);
|
||||
$methodNamesByInputNames = \array_merge($methodNamesByInputNames, $currentMethodNamesByInputNames);
|
||||
}
|
||||
return $methodNamesByInputNames;
|
||||
}
|
||||
}
|
|
@ -1,166 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare (strict_types=1);
|
||||
namespace Rector\Nette\Rector\ArrayDimFetch;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Expr\ArrayDimFetch;
|
||||
use PhpParser\Node\Expr\Isset_;
|
||||
use PhpParser\Node\Expr\Variable;
|
||||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
use PhpParser\Node\Stmt\Unset_;
|
||||
use PHPStan\Type\ObjectType;
|
||||
use Rector\Core\Rector\AbstractRector;
|
||||
use Rector\Nette\Naming\NetteControlNaming;
|
||||
use Rector\Nette\NodeAnalyzer\ArrayDimFetchAnalyzer;
|
||||
use Rector\Nette\NodeAnalyzer\ArrayDimFetchRenamer;
|
||||
use Rector\Nette\NodeAnalyzer\AssignAnalyzer;
|
||||
use Rector\Nette\NodeAnalyzer\ControlDimFetchAnalyzer;
|
||||
use Rector\Nette\NodeResolver\MethodNamesByInputNamesResolver;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
|
||||
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
|
||||
/**
|
||||
* @see \Rector\Nette\Tests\Rector\ArrayDimFetch\AnnotateMagicalControlArrayAccessRector\AnnotateMagicalControlArrayAccessRectorTest
|
||||
*/
|
||||
final class AnnotateMagicalControlArrayAccessRector extends AbstractRector
|
||||
{
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Nette\NodeResolver\MethodNamesByInputNamesResolver
|
||||
*/
|
||||
private $methodNamesByInputNamesResolver;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Nette\NodeAnalyzer\ArrayDimFetchRenamer
|
||||
*/
|
||||
private $arrayDimFetchRenamer;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Nette\NodeAnalyzer\ArrayDimFetchAnalyzer
|
||||
*/
|
||||
private $arrayDimFetchAnalyzer;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Nette\NodeAnalyzer\ControlDimFetchAnalyzer
|
||||
*/
|
||||
private $controlDimFetchAnalyzer;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Nette\Naming\NetteControlNaming
|
||||
*/
|
||||
private $netteControlNaming;
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\Nette\NodeAnalyzer\AssignAnalyzer
|
||||
*/
|
||||
private $assignAnalyzer;
|
||||
public function __construct(MethodNamesByInputNamesResolver $methodNamesByInputNamesResolver, ArrayDimFetchRenamer $arrayDimFetchRenamer, ArrayDimFetchAnalyzer $arrayDimFetchAnalyzer, ControlDimFetchAnalyzer $controlDimFetchAnalyzer, NetteControlNaming $netteControlNaming, AssignAnalyzer $assignAnalyzer)
|
||||
{
|
||||
$this->methodNamesByInputNamesResolver = $methodNamesByInputNamesResolver;
|
||||
$this->arrayDimFetchRenamer = $arrayDimFetchRenamer;
|
||||
$this->arrayDimFetchAnalyzer = $arrayDimFetchAnalyzer;
|
||||
$this->controlDimFetchAnalyzer = $controlDimFetchAnalyzer;
|
||||
$this->netteControlNaming = $netteControlNaming;
|
||||
$this->assignAnalyzer = $assignAnalyzer;
|
||||
}
|
||||
/**
|
||||
* @return array<class-string<Node>>
|
||||
*/
|
||||
public function getNodeTypes() : array
|
||||
{
|
||||
return [ArrayDimFetch::class];
|
||||
}
|
||||
public function getRuleDefinition() : RuleDefinition
|
||||
{
|
||||
return new RuleDefinition('Change magic $this["some_component"] to variable assign with @var annotation', [new CodeSample(<<<'CODE_SAMPLE'
|
||||
use Nette\Application\UI\Presenter;
|
||||
use Nette\Application\UI\Form;
|
||||
|
||||
final class SomePresenter extends Presenter
|
||||
{
|
||||
public function run()
|
||||
{
|
||||
if ($this['some_form']->isSubmitted()) {
|
||||
}
|
||||
}
|
||||
|
||||
protected function createComponentSomeForm()
|
||||
{
|
||||
return new Form();
|
||||
}
|
||||
}
|
||||
CODE_SAMPLE
|
||||
, <<<'CODE_SAMPLE'
|
||||
use Nette\Application\UI\Presenter;
|
||||
use Nette\Application\UI\Form;
|
||||
|
||||
final class SomePresenter extends Presenter
|
||||
{
|
||||
public function run()
|
||||
{
|
||||
/** @var \Nette\Application\UI\Form $someForm */
|
||||
$someForm = $this['some_form'];
|
||||
if ($someForm->isSubmitted()) {
|
||||
}
|
||||
}
|
||||
|
||||
protected function createComponentSomeForm()
|
||||
{
|
||||
return new Form();
|
||||
}
|
||||
}
|
||||
CODE_SAMPLE
|
||||
)]);
|
||||
}
|
||||
/**
|
||||
* @param ArrayDimFetch $node
|
||||
*/
|
||||
public function refactor(Node $node) : ?Node
|
||||
{
|
||||
if ($this->shouldSkip($node)) {
|
||||
return null;
|
||||
}
|
||||
$controlName = $this->controlDimFetchAnalyzer->matchNameOnControlVariable($node);
|
||||
if ($controlName === null) {
|
||||
return null;
|
||||
}
|
||||
// probably multiplier factory, nothing we can do... yet
|
||||
if (\strpos($controlName, '-') !== \false) {
|
||||
return null;
|
||||
}
|
||||
$variableName = $this->netteControlNaming->createVariableName($controlName);
|
||||
$controlObjectType = $this->resolveControlType($node, $controlName);
|
||||
if (!$controlObjectType instanceof ObjectType) {
|
||||
return null;
|
||||
}
|
||||
$this->assignAnalyzer->addAssignExpressionForFirstCase($variableName, $node, $controlObjectType);
|
||||
$classMethod = $this->betterNodeFinder->findParentType($node, ClassMethod::class);
|
||||
if ($classMethod instanceof ClassMethod) {
|
||||
$this->arrayDimFetchRenamer->renameToVariable($classMethod, $node, $variableName);
|
||||
}
|
||||
return new Variable($variableName);
|
||||
}
|
||||
private function shouldSkip(ArrayDimFetch $arrayDimFetch) : bool
|
||||
{
|
||||
if ($this->arrayDimFetchAnalyzer->isBeingAssignedOrInitialized($arrayDimFetch)) {
|
||||
return \true;
|
||||
}
|
||||
$parent = $arrayDimFetch->getAttribute(AttributeKey::PARENT_NODE);
|
||||
if (!$parent instanceof Isset_ && !$parent instanceof Unset_) {
|
||||
return \false;
|
||||
}
|
||||
return !$arrayDimFetch->dim instanceof Variable;
|
||||
}
|
||||
private function resolveControlType(ArrayDimFetch $arrayDimFetch, string $controlName) : ?ObjectType
|
||||
{
|
||||
$controlTypes = $this->methodNamesByInputNamesResolver->resolveExpr($arrayDimFetch);
|
||||
if ($controlTypes === []) {
|
||||
return null;
|
||||
}
|
||||
if (!isset($controlTypes[$controlName])) {
|
||||
return null;
|
||||
}
|
||||
return new ObjectType($controlTypes[$controlName]);
|
||||
}
|
||||
}
|
|
@ -6,19 +6,19 @@
|
|||
"require": {
|
||||
"php": ">=8.1",
|
||||
"ext-xml": "*",
|
||||
"symfony\/string": "^6.0"
|
||||
"symfony\/string": "^6.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpstan\/extension-installer": "^1.1",
|
||||
"phpstan\/phpstan": "^1.7.10",
|
||||
"phpstan\/phpstan-strict-rules": "^1.2",
|
||||
"phpstan\/phpstan-webmozart-assert": "^1.1",
|
||||
"phpstan\/phpstan": "^1.8.2",
|
||||
"phpstan\/phpstan-strict-rules": "^1.3",
|
||||
"phpstan\/phpstan-webmozart-assert": "^1.2",
|
||||
"phpunit\/phpunit": "^9.5",
|
||||
"rector\/phpstan-rules": "^0.5",
|
||||
"rector\/phpstan-rules": "^0.5.8",
|
||||
"rector\/rector-src": "dev-main",
|
||||
"symfony\/routing": "^6.0",
|
||||
"symfony\/security-core": "^6.0",
|
||||
"symfony\/security-http": "^6.0",
|
||||
"symfony\/routing": "^6.1",
|
||||
"symfony\/security-core": "^6.1",
|
||||
"symfony\/security-http": "^6.1",
|
||||
"symplify\/easy-ci": "^11.0",
|
||||
"symplify\/easy-coding-standard": "^11.0",
|
||||
"symplify\/phpstan-extensions": "^11.0",
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
<?php
|
||||
|
||||
declare (strict_types=1);
|
||||
namespace RectorPrefix202208;
|
||||
|
||||
use Rector\Config\RectorConfig;
|
||||
use Rector\Symfony\Set\SymfonySetList;
|
||||
return static function (RectorConfig $rectorConfig) : void {
|
||||
$rectorConfig->sets([SymfonySetList::SYMFONY_25]);
|
||||
};
|
|
@ -4,7 +4,8 @@ declare (strict_types=1);
|
|||
namespace RectorPrefix202208;
|
||||
|
||||
use Rector\Config\RectorConfig;
|
||||
use Rector\Symfony\Set\SymfonyLevelSetList;
|
||||
use Rector\Symfony\Set\SymfonySetList;
|
||||
return static function (RectorConfig $rectorConfig) : void {
|
||||
$rectorConfig->sets([SymfonySetList::SYMFONY_26]);
|
||||
$rectorConfig->sets([SymfonySetList::SYMFONY_26, SymfonyLevelSetList::UP_TO_SYMFONY_25]);
|
||||
};
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
<?php
|
||||
|
||||
declare (strict_types=1);
|
||||
namespace RectorPrefix202208;
|
||||
|
||||
use Rector\Config\RectorConfig;
|
||||
use Rector\Symfony\Rector\MethodCall\AddViolationToBuildViolationRector;
|
||||
return static function (RectorConfig $rectorConfig) : void {
|
||||
$rectorConfig->rule(AddViolationToBuildViolationRector::class);
|
||||
};
|
|
@ -1,4 +1,4 @@
|
|||
# 66 Rules Overview
|
||||
# 68 Rules Overview
|
||||
|
||||
## ActionSuffixRemoverRector
|
||||
|
||||
|
@ -66,6 +66,24 @@ Collect routes from Symfony project router and add Route annotation to controlle
|
|||
|
||||
<br>
|
||||
|
||||
## AddViolationToBuildViolationRector
|
||||
|
||||
Change `$context->addViolationAt` to `$context->buildViolation` on Validator ExecutionContext
|
||||
|
||||
- class: [`Rector\Symfony\Rector\MethodCall\AddViolationToBuildViolationRector`](../src/Rector/MethodCall/AddViolationToBuildViolationRector.php)
|
||||
|
||||
```diff
|
||||
-$context->addViolationAt('property', 'The value {{ value }} is invalid.', array(
|
||||
- '{{ value }}' => $invalidValue,
|
||||
-));
|
||||
+$context->buildViolation('The value {{ value }} is invalid.')
|
||||
+ ->atPath('property')
|
||||
+ ->setParameter('{{ value }}', $invalidValue)
|
||||
+ ->addViolation();
|
||||
```
|
||||
|
||||
<br>
|
||||
|
||||
## AuthorizationCheckerIsGrantedExtractorRector
|
||||
|
||||
Change `$this->authorizationChecker->isGranted([$a, $b])` to `$this->authorizationChecker->isGranted($a) || $this->authorizationChecker->isGranted($b)`
|
||||
|
@ -1334,6 +1352,25 @@ Change RouteCollectionBuilder to RoutingConfiguratorRector
|
|||
|
||||
<br>
|
||||
|
||||
## ServiceSetStringNameToClassNameRector
|
||||
|
||||
Change `$service->set()` string names to class-type-based names, to allow `$container->get()` by types in Symfony 2.8
|
||||
|
||||
- class: [`Rector\Symfony\Rector\MethodCall\ServiceSetStringNameToClassNameRector`](../src/Rector/MethodCall/ServiceSetStringNameToClassNameRector.php)
|
||||
|
||||
```diff
|
||||
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
||||
|
||||
return static function (ContainerConfigurator $containerConfigurator): void {
|
||||
$services = $containerConfigurator->services();
|
||||
|
||||
- $services->set('some_name', App\SomeClass::class);
|
||||
+ $services->set('app\\someclass', App\SomeClass::class);
|
||||
};
|
||||
```
|
||||
|
||||
<br>
|
||||
|
||||
## SimpleFunctionAndFilterRector
|
||||
|
||||
Changes Twig_Function_Method to Twig_SimpleFunction calls in Twig_Extension.
|
||||
|
|
118
vendor/rector/rector-symfony/src/Rector/MethodCall/AddViolationToBuildViolationRector.php
vendored
Normal file
118
vendor/rector/rector-symfony/src/Rector/MethodCall/AddViolationToBuildViolationRector.php
vendored
Normal file
|
@ -0,0 +1,118 @@
|
|||
<?php
|
||||
|
||||
declare (strict_types=1);
|
||||
namespace Rector\Symfony\Rector\MethodCall;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Arg;
|
||||
use PhpParser\Node\Expr;
|
||||
use PhpParser\Node\Expr\Array_;
|
||||
use PhpParser\Node\Expr\ArrayItem;
|
||||
use PhpParser\Node\Expr\MethodCall;
|
||||
use PhpParser\Node\Identifier;
|
||||
use PHPStan\Type\ObjectType;
|
||||
use Rector\Core\Rector\AbstractRector;
|
||||
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
|
||||
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
|
||||
/**
|
||||
* @see https://stackoverflow.com/questions/25264922/symfony-2-5-addviolationat-deprecated-use-buildviolation
|
||||
* @see \Rector\Symfony\Tests\Rector\MethodCall\AddViolationToBuildViolationRector\AddViolationToBuildViolationRectorTest
|
||||
*/
|
||||
final class AddViolationToBuildViolationRector extends AbstractRector
|
||||
{
|
||||
public function getRuleDefinition() : RuleDefinition
|
||||
{
|
||||
return new RuleDefinition('Change `$context->addViolationAt` to `$context->buildViolation` on Validator ExecutionContext', [new CodeSample(<<<'CODE_SAMPLE'
|
||||
$context->addViolationAt('property', 'The value {{ value }} is invalid.', array(
|
||||
'{{ value }}' => $invalidValue,
|
||||
));
|
||||
CODE_SAMPLE
|
||||
, <<<'CODE_SAMPLE'
|
||||
$context->buildViolation('The value {{ value }} is invalid.')
|
||||
->atPath('property')
|
||||
->setParameter('{{ value }}', $invalidValue)
|
||||
->addViolation();
|
||||
CODE_SAMPLE
|
||||
)]);
|
||||
}
|
||||
/**
|
||||
* @return array<class-string<Node>>
|
||||
*/
|
||||
public function getNodeTypes() : array
|
||||
{
|
||||
return [MethodCall::class];
|
||||
}
|
||||
/**
|
||||
* @param MethodCall $node
|
||||
*/
|
||||
public function refactor(Node $node) : ?MethodCall
|
||||
{
|
||||
$objectType = $this->nodeTypeResolver->getType($node->var);
|
||||
if (!$objectType instanceof ObjectType) {
|
||||
return null;
|
||||
}
|
||||
$executionContext = new ObjectType('Symfony\\Component\\Validator\\Context\\ExecutionContextInterface');
|
||||
if (!$executionContext->isSuperTypeOf($objectType)->yes()) {
|
||||
return null;
|
||||
}
|
||||
if (!$this->nodeNameResolver->isName($node->name, 'addViolationAt')) {
|
||||
return null;
|
||||
}
|
||||
$args = $node->getArgs();
|
||||
$path = $args[0];
|
||||
$message = $args[1];
|
||||
$node->name = new Identifier('buildViolation');
|
||||
$node->args = [$message];
|
||||
$node = new MethodCall($node, 'atPath', [$path]);
|
||||
$node = $this->buildFluentWithParameters($node, $args);
|
||||
$node = $this->buildFluentWithInvalidValue($node, $args);
|
||||
$node = $this->buildFluentWithPlural($node, $args);
|
||||
$node = $this->buildFluentWithCode($node, $args);
|
||||
$node = new MethodCall($node, 'addViolation');
|
||||
return $node;
|
||||
}
|
||||
/**
|
||||
* @param Arg[] $args
|
||||
*/
|
||||
private function buildFluentWithParameters(MethodCall $methodCall, array $args) : MethodCall
|
||||
{
|
||||
if (isset($args[2]) && $args[2]->value instanceof Array_) {
|
||||
foreach ($args[2]->value->items as $item) {
|
||||
if ($item instanceof ArrayItem && $item->key instanceof Expr) {
|
||||
$methodCall = new MethodCall($methodCall, 'setParameter', [new Arg($item->key), new Arg($item->value)]);
|
||||
}
|
||||
}
|
||||
}
|
||||
return $methodCall;
|
||||
}
|
||||
/**
|
||||
* @param Arg[] $args
|
||||
*/
|
||||
private function buildFluentWithInvalidValue(MethodCall $methodCall, array $args) : MethodCall
|
||||
{
|
||||
if (isset($args[3])) {
|
||||
$methodCall = new MethodCall($methodCall, 'setInvalidValue', [new Arg($args[3]->value)]);
|
||||
}
|
||||
return $methodCall;
|
||||
}
|
||||
/**
|
||||
* @param Arg[] $args
|
||||
*/
|
||||
private function buildFluentWithPlural(MethodCall $methodCall, array $args) : MethodCall
|
||||
{
|
||||
if (isset($args[4])) {
|
||||
$methodCall = new MethodCall($methodCall, 'setPlural', [new Arg($args[4]->value)]);
|
||||
}
|
||||
return $methodCall;
|
||||
}
|
||||
/**
|
||||
* @param Arg[] $args
|
||||
*/
|
||||
private function buildFluentWithCode(MethodCall $methodCall, array $args) : MethodCall
|
||||
{
|
||||
if (isset($args[5])) {
|
||||
$methodCall = new MethodCall($methodCall, 'setCode', [new Arg($args[5]->value)]);
|
||||
}
|
||||
return $methodCall;
|
||||
}
|
||||
}
|
84
vendor/rector/rector-symfony/src/Rector/MethodCall/ServiceSetStringNameToClassNameRector.php
vendored
Normal file
84
vendor/rector/rector-symfony/src/Rector/MethodCall/ServiceSetStringNameToClassNameRector.php
vendored
Normal file
|
@ -0,0 +1,84 @@
|
|||
<?php
|
||||
|
||||
declare (strict_types=1);
|
||||
namespace Rector\Symfony\Rector\MethodCall;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Expr\ClassConstFetch;
|
||||
use PhpParser\Node\Expr\MethodCall;
|
||||
use PhpParser\Node\Scalar\String_;
|
||||
use PHPStan\Type\ObjectType;
|
||||
use Rector\Core\Rector\AbstractRector;
|
||||
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
|
||||
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
|
||||
/**
|
||||
* @see \Rector\Symfony\Tests\Rector\MethodCall\ServiceSetStringNameToClassNameRector\ServiceSetStringNameToClassNameRectorTest
|
||||
*/
|
||||
final class ServiceSetStringNameToClassNameRector extends AbstractRector
|
||||
{
|
||||
public function getRuleDefinition() : RuleDefinition
|
||||
{
|
||||
return new RuleDefinition('Change $service->set() string names to class-type-based names, to allow $container->get() by types in Symfony 2.8', [new CodeSample(<<<'CODE_SAMPLE'
|
||||
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
||||
|
||||
return static function (ContainerConfigurator $containerConfigurator): void {
|
||||
$services = $containerConfigurator->services();
|
||||
|
||||
$services->set('some_name', App\SomeClass::class);
|
||||
};
|
||||
CODE_SAMPLE
|
||||
, <<<'CODE_SAMPLE'
|
||||
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
||||
|
||||
return static function (ContainerConfigurator $containerConfigurator): void {
|
||||
$services = $containerConfigurator->services();
|
||||
|
||||
$services->set('app\\someclass', App\SomeClass::class);
|
||||
};
|
||||
CODE_SAMPLE
|
||||
)]);
|
||||
}
|
||||
/**
|
||||
* @return array<class-string<Node>>
|
||||
*/
|
||||
public function getNodeTypes() : array
|
||||
{
|
||||
return [MethodCall::class];
|
||||
}
|
||||
/**
|
||||
* @param MethodCall $node
|
||||
*/
|
||||
public function refactor(Node $node) : ?Node
|
||||
{
|
||||
if (!$this->isName($node->name, 'set')) {
|
||||
return null;
|
||||
}
|
||||
if (\count($node->getArgs()) !== 2) {
|
||||
return null;
|
||||
}
|
||||
if (!$this->isObjectType($node->var, new ObjectType('Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\ServicesConfigurator'))) {
|
||||
return null;
|
||||
}
|
||||
$args = $node->getArgs();
|
||||
$firstArg = $args[0];
|
||||
$serviceName = $this->valueResolver->getValue($firstArg->value);
|
||||
if (!\is_string($serviceName)) {
|
||||
return null;
|
||||
}
|
||||
// already slash renamed
|
||||
if (\strpos($serviceName, '\\') !== \false) {
|
||||
return null;
|
||||
}
|
||||
$secondArg = $args[1];
|
||||
if (!$secondArg->value instanceof ClassConstFetch && !$secondArg->value instanceof String_) {
|
||||
return null;
|
||||
}
|
||||
$serviceType = $this->valueResolver->getValue($secondArg->value);
|
||||
if (!\is_string($serviceType)) {
|
||||
return null;
|
||||
}
|
||||
$typedServiceName = \strtolower($serviceType);
|
||||
$firstArg->value = String_::fromString("'" . $typedServiceName . "'");
|
||||
return $node;
|
||||
}
|
||||
}
|
|
@ -6,6 +6,10 @@ namespace Rector\Symfony\Set;
|
|||
use Rector\Set\Contract\SetListInterface;
|
||||
final class SymfonyLevelSetList implements SetListInterface
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
public const UP_TO_SYMFONY_25 = __DIR__ . '/../../config/sets/symfony/level/up-to-symfony-25.php';
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
|
|
|
@ -10,6 +10,10 @@ final class SymfonySetList implements SetListInterface
|
|||
* @var string
|
||||
*/
|
||||
public const SYMFONY_STRICT = __DIR__ . '/../../config/sets/symfony/symfony-strict.php';
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
public const SYMFONY_25 = __DIR__ . '/../../config/sets/symfony/symfony25.php';
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue