[CodeQuality] Add empty array support to InlineArrayReturnAssignRector (#2397)

This commit is contained in:
Tomas Votruba 2022-05-31 09:42:03 +02:00 committed by GitHub
parent dc6bd9680c
commit 01fc91e575
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 286 additions and 163 deletions

View File

@ -3,7 +3,6 @@
declare(strict_types=1);
use Rector\CodeQuality\Rector\Array_\ArrayThisCallToThisMethodCallRector;
use Rector\CodeQuality\Rector\Array_\CallableThisArrayToAnonymousFunctionRector;
use Rector\CodeQuality\Rector\Assign\CombinedAssignRector;
use Rector\CodeQuality\Rector\Assign\SplitListAssignToSeparateLineRector;
@ -82,61 +81,6 @@ use Rector\Php71\Rector\FuncCall\RemoveExtraParametersRector;
use Rector\Renaming\Rector\FuncCall\RenameFunctionRector;
return static function (RectorConfig $rectorConfig): void {
$rectorConfig->rule(CombinedAssignRector::class);
$rectorConfig->rule(SimplifyEmptyArrayCheckRector::class);
$rectorConfig->rule(ReplaceMultipleBooleanNotRector::class);
$rectorConfig->rule(ForeachToInArrayRector::class);
$rectorConfig->rule(SimplifyForeachToCoalescingRector::class);
$rectorConfig->rule(SimplifyFuncGetArgsCountRector::class);
$rectorConfig->rule(SimplifyInArrayValuesRector::class);
$rectorConfig->rule(SimplifyStrposLowerRector::class);
$rectorConfig->rule(GetClassToInstanceOfRector::class);
$rectorConfig->rule(SimplifyArraySearchRector::class);
$rectorConfig->rule(SimplifyConditionsRector::class);
$rectorConfig->rule(SimplifyIfNotNullReturnRector::class);
$rectorConfig->rule(SimplifyIfReturnBoolRector::class);
$rectorConfig->rule(SimplifyUselessVariableRector::class);
$rectorConfig->rule(UnnecessaryTernaryExpressionRector::class);
$rectorConfig->rule(RemoveExtraParametersRector::class);
$rectorConfig->rule(SimplifyDeMorganBinaryRector::class);
$rectorConfig->rule(SimplifyTautologyTernaryRector::class);
$rectorConfig->rule(SimplifyForeachToArrayFilterRector::class);
$rectorConfig->rule(SingleInArrayToCompareRector::class);
$rectorConfig->rule(SimplifyIfElseToTernaryRector::class);
$rectorConfig->rule(JoinStringConcatRector::class);
$rectorConfig->rule(ConsecutiveNullCompareReturnsToNullCoalesceQueueRector::class);
$rectorConfig->rule(SimplifyIfIssetToNullCoalescingRector::class);
$rectorConfig->rule(ExplicitBoolCompareRector::class);
$rectorConfig->rule(CombineIfRector::class);
$rectorConfig->rule(UseIdenticalOverEqualWithSameTypeRector::class);
$rectorConfig->rule(SimplifyBoolIdenticalTrueRector::class);
$rectorConfig->rule(SimplifyRegexPatternRector::class);
$rectorConfig->rule(BooleanNotIdenticalToNotIdenticalRector::class);
$rectorConfig->rule(CallableThisArrayToAnonymousFunctionRector::class);
$rectorConfig->rule(AndAssignsToSeparateLinesRector::class);
$rectorConfig->rule(ForToForeachRector::class);
$rectorConfig->rule(CompactToVariablesRector::class);
$rectorConfig->rule(CompleteDynamicPropertiesRector::class);
$rectorConfig->rule(IsAWithStringWithThirdArgumentRector::class);
$rectorConfig->rule(StrlenZeroToIdenticalEmptyStringRector::class);
$rectorConfig->rule(RemoveAlwaysTrueConditionSetInConstructorRector::class);
$rectorConfig->rule(ThrowWithPreviousExceptionRector::class);
$rectorConfig->rule(RemoveSoleValueSprintfRector::class);
$rectorConfig->rule(ShortenElseIfRector::class);
$rectorConfig->rule(AddPregQuoteDelimiterRector::class);
$rectorConfig->rule(ArrayMergeOfNonArraysToSimpleArrayRector::class);
$rectorConfig->rule(IntvalToTypeCastRector::class);
$rectorConfig->rule(ArrayKeyExistsTernaryThenValueToCoalescingRector::class);
$rectorConfig->rule(AbsolutizeRequireAndIncludePathRector::class);
$rectorConfig->rule(ChangeArrayPushToArrayAssignRector::class);
$rectorConfig->rule(ForRepeatedCountToOwnVariableRector::class);
$rectorConfig->rule(ForeachItemsAssignToEmptyArrayToAssignRector::class);
$rectorConfig->rule(InlineIfToExplicitIfRector::class);
$rectorConfig->rule(ArrayKeysAndInArrayToArrayKeyExistsRector::class);
$rectorConfig->rule(SplitListAssignToSeparateLineRector::class);
$rectorConfig->rule(UnusedForeachValueToArrayKeysRector::class);
$rectorConfig->rule(ArrayThisCallToThisMethodCallRector::class);
$rectorConfig->rule(CommonNotEqualRector::class);
$rectorConfig
->ruleWithConfiguration(RenameFunctionRector::class, [
'split' => 'explode',
@ -165,6 +109,61 @@ return static function (RectorConfig $rectorConfig): void {
]);
$rectorConfig->rules([
CombinedAssignRector::class,
SimplifyEmptyArrayCheckRector::class,
ReplaceMultipleBooleanNotRector::class,
ForeachToInArrayRector::class,
SimplifyForeachToCoalescingRector::class,
SimplifyFuncGetArgsCountRector::class,
SimplifyInArrayValuesRector::class,
SimplifyStrposLowerRector::class,
GetClassToInstanceOfRector::class,
SimplifyArraySearchRector::class,
SimplifyConditionsRector::class,
SimplifyIfNotNullReturnRector::class,
SimplifyIfReturnBoolRector::class,
SimplifyUselessVariableRector::class,
UnnecessaryTernaryExpressionRector::class,
RemoveExtraParametersRector::class,
SimplifyDeMorganBinaryRector::class,
SimplifyTautologyTernaryRector::class,
SimplifyForeachToArrayFilterRector::class,
SingleInArrayToCompareRector::class,
SimplifyIfElseToTernaryRector::class,
JoinStringConcatRector::class,
ConsecutiveNullCompareReturnsToNullCoalesceQueueRector::class,
SimplifyIfIssetToNullCoalescingRector::class,
ExplicitBoolCompareRector::class,
CombineIfRector::class,
UseIdenticalOverEqualWithSameTypeRector::class,
SimplifyBoolIdenticalTrueRector::class,
SimplifyRegexPatternRector::class,
BooleanNotIdenticalToNotIdenticalRector::class,
CallableThisArrayToAnonymousFunctionRector::class,
AndAssignsToSeparateLinesRector::class,
ForToForeachRector::class,
CompactToVariablesRector::class,
CompleteDynamicPropertiesRector::class,
IsAWithStringWithThirdArgumentRector::class,
StrlenZeroToIdenticalEmptyStringRector::class,
RemoveAlwaysTrueConditionSetInConstructorRector::class,
ThrowWithPreviousExceptionRector::class,
RemoveSoleValueSprintfRector::class,
ShortenElseIfRector::class,
AddPregQuoteDelimiterRector::class,
ArrayMergeOfNonArraysToSimpleArrayRector::class,
IntvalToTypeCastRector::class,
ArrayKeyExistsTernaryThenValueToCoalescingRector::class,
AbsolutizeRequireAndIncludePathRector::class,
ChangeArrayPushToArrayAssignRector::class,
ForRepeatedCountToOwnVariableRector::class,
ForeachItemsAssignToEmptyArrayToAssignRector::class,
InlineIfToExplicitIfRector::class,
ArrayKeysAndInArrayToArrayKeyExistsRector::class,
SplitListAssignToSeparateLineRector::class,
UnusedForeachValueToArrayKeysRector::class,
ArrayThisCallToThisMethodCallRector::class,
CommonNotEqualRector::class,
SetTypeToCastRector::class,
LogicalToBooleanRector::class,
VarToPublicPropertyRector::class,

View File

@ -3,7 +3,6 @@
declare(strict_types=1);
use Rector\CodingStyle\Rector\Assign\PHPStormVarAnnotationRector;
use Rector\CodingStyle\Rector\Assign\SplitDoubleAssignRector;
use Rector\CodingStyle\Rector\Catch_\CatchExceptionNameMatchingTypeRector;
use Rector\CodingStyle\Rector\Class_\AddArrayDefaultToArrayPropertyRector;
@ -34,38 +33,39 @@ use Rector\Php55\Rector\String_\StringClassNameToClassConstantRector;
use Rector\Transform\Rector\FuncCall\FuncCallToConstFetchRector;
return static function (RectorConfig $rectorConfig): void {
$rectorConfig->rule(PHPStormVarAnnotationRector::class);
$rectorConfig->rule(NullableCompareToNullRector::class);
$rectorConfig->rule(BinarySwitchToIfElseRector::class);
$rectorConfig->rule(ConsistentImplodeRector::class);
$rectorConfig->rule(TernaryConditionVariableAssignmentRector::class);
$rectorConfig->rule(SymplifyQuoteEscapeRector::class);
$rectorConfig->rule(SplitGroupedConstantsAndPropertiesRector::class);
$rectorConfig->rule(StringClassNameToClassConstantRector::class);
$rectorConfig->rule(ConsistentPregDelimiterRector::class);
$rectorConfig->rule(CatchExceptionNameMatchingTypeRector::class);
$rectorConfig->rule(UseIncrementAssignRector::class);
$rectorConfig->rule(SplitDoubleAssignRector::class);
$rectorConfig->rule(VarConstantCommentRector::class);
$rectorConfig->rule(EncapsedStringsToSprintfRector::class);
$rectorConfig->rule(WrapEncapsedVariableInCurlyBracesRector::class);
$rectorConfig->rule(NewlineBeforeNewAssignSetRector::class);
$rectorConfig->rule(AddArrayDefaultToArrayPropertyRector::class);
$rectorConfig->rule(AddFalseDefaultToBoolPropertyRector::class);
$rectorConfig->rule(MakeInheritedMethodVisibilitySameAsParentRector::class);
$rectorConfig->rule(CallUserFuncArrayToVariadicRector::class);
$rectorConfig->rule(VersionCompareFuncCallToConstantRector::class);
$rectorConfig
->ruleWithConfiguration(FuncCallToConstFetchRector::class, [
'php_sapi_name' => 'PHP_SAPI',
'pi' => 'M_PI',
]);
$rectorConfig->rule(SeparateMultiUseImportsRector::class);
$rectorConfig->rule(RemoveDoubleUnderscoreInMethodNameRector::class);
$rectorConfig->rule(PostIncDecToPreIncDecRector::class);
$rectorConfig->rule(UnSpreadOperatorRector::class);
$rectorConfig->rule(NewlineAfterStatementRector::class);
$rectorConfig->rule(RemoveFinalFromConstRector::class);
$rectorConfig->rules([
SeparateMultiUseImportsRector::class,
RemoveDoubleUnderscoreInMethodNameRector::class,
PostIncDecToPreIncDecRector::class,
UnSpreadOperatorRector::class,
NewlineAfterStatementRector::class,
RemoveFinalFromConstRector::class,
PHPStormVarAnnotationRector::class,
NullableCompareToNullRector::class,
BinarySwitchToIfElseRector::class,
ConsistentImplodeRector::class,
TernaryConditionVariableAssignmentRector::class,
SymplifyQuoteEscapeRector::class,
SplitGroupedConstantsAndPropertiesRector::class,
StringClassNameToClassConstantRector::class,
ConsistentPregDelimiterRector::class,
CatchExceptionNameMatchingTypeRector::class,
UseIncrementAssignRector::class,
SplitDoubleAssignRector::class,
VarConstantCommentRector::class,
EncapsedStringsToSprintfRector::class,
WrapEncapsedVariableInCurlyBracesRector::class,
NewlineBeforeNewAssignSetRector::class,
AddArrayDefaultToArrayPropertyRector::class,
AddFalseDefaultToBoolPropertyRector::class,
MakeInheritedMethodVisibilitySameAsParentRector::class,
CallUserFuncArrayToVariadicRector::class,
VersionCompareFuncCallToConstantRector::class,
]);
};

View File

@ -3,7 +3,6 @@
declare(strict_types=1);
use Rector\CodeQuality\Rector\FunctionLike\SimplifyUselessVariableRector;
use Rector\Config\RectorConfig;
use Rector\DeadCode\Rector\Array_\RemoveDuplicatedArrayKeyRector;
use Rector\DeadCode\Rector\Assign\RemoveDoubleAssignRector;
@ -51,51 +50,52 @@ use Rector\DeadCode\Rector\TryCatch\RemoveDeadTryCatchRector;
use Rector\PHPUnit\Rector\ClassMethod\RemoveEmptyTestMethodRector;
return static function (RectorConfig $rectorConfig): void {
$rectorConfig->rule(UnwrapFutureCompatibleIfFunctionExistsRector::class);
$rectorConfig->rule(UnwrapFutureCompatibleIfPhpVersionRector::class);
$rectorConfig->rule(RecastingRemovalRector::class);
$rectorConfig->rule(RemoveDeadStmtRector::class);
$rectorConfig->rule(RemoveDuplicatedArrayKeyRector::class);
$rectorConfig->rule(RemoveUnusedForeachKeyRector::class);
$rectorConfig->rule(RemoveParentCallWithoutParentRector::class);
$rectorConfig->rule(RemoveEmptyClassMethodRector::class);
$rectorConfig->rule(RemoveDoubleAssignRector::class);
$rectorConfig->rule(SimplifyMirrorAssignRector::class);
$rectorConfig->rule(RemoveOverriddenValuesRector::class);
$rectorConfig->rule(RemoveUnusedPrivatePropertyRector::class);
$rectorConfig->rule(RemoveUnusedPrivateClassConstantRector::class);
$rectorConfig->rule(RemoveUnusedPrivateMethodRector::class);
$rectorConfig->rule(RemoveDeadConstructorRector::class);
$rectorConfig->rule(RemoveDeadReturnRector::class);
$rectorConfig->rule(RemoveDeadContinueRector::class);
$rectorConfig->rule(RemoveDeadIfForeachForRector::class);
$rectorConfig->rule(RemoveAndTrueRector::class);
$rectorConfig->rule(RemoveConcatAutocastRector::class);
$rectorConfig->rule(SimplifyUselessVariableRector::class);
$rectorConfig->rule(RemoveDelegatingParentCallRector::class);
$rectorConfig->rule(RemoveDuplicatedInstanceOfRector::class);
$rectorConfig->rule(RemoveDuplicatedCaseInSwitchRector::class);
$rectorConfig->rule(RemoveNullPropertyInitializationRector::class);
$rectorConfig->rule(RemoveUnreachableStatementRector::class);
$rectorConfig->rule(SimplifyIfElseWithSameContentRector::class);
$rectorConfig->rule(TernaryToBooleanOrFalseToBooleanAndRector::class);
$rectorConfig->rule(RemoveEmptyTestMethodRector::class);
$rectorConfig->rule(RemoveDeadTryCatchRector::class);
$rectorConfig->rule(RemoveUnusedVariableAssignRector::class);
$rectorConfig->rule(RemoveDuplicatedIfReturnRector::class);
$rectorConfig->rule(RemoveUnusedNonEmptyArrayBeforeForeachRector::class);
$rectorConfig->rule(RemoveEmptyMethodCallRector::class);
$rectorConfig->rule(RemoveDeadConditionAboveReturnRector::class);
$rectorConfig->rule(RemoveUnusedConstructorParamRector::class);
$rectorConfig->rule(RemoveDeadInstanceOfRector::class);
$rectorConfig->rule(RemoveDeadLoopRector::class);
$rectorConfig->rule(RemoveUnusedPrivateMethodParameterRector::class);
$rectorConfig->rule(RemoveUnusedParamInRequiredAutowireRector::class);
// docblock
$rectorConfig->rule(RemoveUselessParamTagRector::class);
$rectorConfig->rule(RemoveUselessReturnTagRector::class);
$rectorConfig->rule(RemoveNonExistingVarAnnotationRector::class);
$rectorConfig->rule(RemoveUnusedPromotedPropertyRector::class);
$rectorConfig->rule(RemoveLastReturnRector::class);
$rectorConfig->rules([
UnwrapFutureCompatibleIfFunctionExistsRector::class,
UnwrapFutureCompatibleIfPhpVersionRector::class,
RecastingRemovalRector::class,
RemoveDeadStmtRector::class,
RemoveDuplicatedArrayKeyRector::class,
RemoveUnusedForeachKeyRector::class,
RemoveParentCallWithoutParentRector::class,
RemoveEmptyClassMethodRector::class,
RemoveDoubleAssignRector::class,
SimplifyMirrorAssignRector::class,
RemoveOverriddenValuesRector::class,
RemoveUnusedPrivatePropertyRector::class,
RemoveUnusedPrivateClassConstantRector::class,
RemoveUnusedPrivateMethodRector::class,
RemoveDeadConstructorRector::class,
RemoveDeadReturnRector::class,
RemoveDeadContinueRector::class,
RemoveDeadIfForeachForRector::class,
RemoveAndTrueRector::class,
RemoveConcatAutocastRector::class,
SimplifyUselessVariableRector::class,
RemoveDelegatingParentCallRector::class,
RemoveDuplicatedInstanceOfRector::class,
RemoveDuplicatedCaseInSwitchRector::class,
RemoveNullPropertyInitializationRector::class,
RemoveUnreachableStatementRector::class,
SimplifyIfElseWithSameContentRector::class,
TernaryToBooleanOrFalseToBooleanAndRector::class,
RemoveEmptyTestMethodRector::class,
RemoveDeadTryCatchRector::class,
RemoveUnusedVariableAssignRector::class,
RemoveDuplicatedIfReturnRector::class,
RemoveUnusedNonEmptyArrayBeforeForeachRector::class,
RemoveEmptyMethodCallRector::class,
RemoveDeadConditionAboveReturnRector::class,
RemoveUnusedConstructorParamRector::class,
RemoveDeadInstanceOfRector::class,
RemoveDeadLoopRector::class,
RemoveUnusedPrivateMethodParameterRector::class,
RemoveUnusedParamInRequiredAutowireRector::class,
// docblock
RemoveUselessParamTagRector::class,
RemoveUselessReturnTagRector::class,
RemoveNonExistingVarAnnotationRector::class,
RemoveUnusedPromotedPropertyRector::class,
RemoveLastReturnRector::class,
]);
};

View File

@ -485,6 +485,7 @@ parameters:
- rules/Php70/EregToPcreTransformer.php
- rules/CodeQuality/Rector/PropertyFetch/ExplicitMethodCallOverMagicGetSetRector.php
- src/Kernel/RectorKernel.php
- rules/Php72/Rector/Assign/ReplaceEachAssignmentWithKeyCurrentRector.php
- '#Method Rector\\Core\\Application\\ApplicationFileProcessor\:\:runParallel\(\) should return array\{system_errors\: array<Rector\\Core\\ValueObject\\Error\\SystemError\>, file_diffs\: array<Rector\\Core\\ValueObject\\Reporting\\FileDiff\>\} but returns array#'

View File

@ -0,0 +1,32 @@
<?php
namespace Rector\Tests\CodeQuality\Rector\ClassMethod\InlineArrayReturnAssignRector\Fixture;
final class EmptyArray
{
public function run()
{
$person = [];
$person[] = 'Timmy';
$person[] = 'Back';
return $person;
}
}
?>
-----
<?php
namespace Rector\Tests\CodeQuality\Rector\ClassMethod\InlineArrayReturnAssignRector\Fixture;
final class EmptyArray
{
public function run()
{
return ['Timmy', 'Back'];
}
}
?>

View File

@ -0,0 +1,38 @@
<?php
namespace Rector\Tests\CodeQuality\Rector\ClassMethod\InlineArrayReturnAssignRector\Fixture;
final class KeepComments
{
public function getPerson()
{
$person = [];
// name
$person['name'] = 'Timmy';
// surname
$person['surname'] = 'Back';
return $person;
}
}
?>
-----
<?php
namespace Rector\Tests\CodeQuality\Rector\ClassMethod\InlineArrayReturnAssignRector\Fixture;
final class KeepComments
{
public function getPerson()
{
return [
// name
'name' => 'Timmy',
// surname
'surname' => 'Back',
];
}
}
?>

View File

@ -0,0 +1,16 @@
<?php
namespace Rector\Tests\CodeQuality\Rector\ClassMethod\InlineArrayReturnAssignRector\Fixture;
final class SkipDifferentVariableSameKey
{
public function run($person2)
{
$person = [];
$person2['name'] = 'Timmy';
$person['name'] = 'Back';
return $person;
}
}

View File

@ -44,11 +44,13 @@ final class VariableDimFetchAssignResolver
$assign = $stmtExpr;
$keyExpr = $this->matchKeyOnArrayDimFetchOfVariable($assign, $variable);
if (! $keyExpr instanceof Expr) {
return [];
}
$keysAndExprs[] = new KeyAndExpr($keyExpr, $assign->expr, $stmt->getComments());
}
$keysAndExprs[] = new KeyAndExpr($keyExpr, $assign->expr);
// we can only work with same variable
// and exclusively various keys or empty keys
if (! $this->hasExclusivelyNullKeyOrFilledKey($keysAndExprs)) {
return [];
}
return $keysAndExprs;
@ -76,4 +78,27 @@ final class VariableDimFetchAssignResolver
return $arrayDimFetch->dim;
}
/**
* @param KeyAndExpr[] $keysAndExprs
*/
private function hasExclusivelyNullKeyOrFilledKey(array $keysAndExprs): bool
{
$alwaysNullKey = true;
$alwaysStringKey = true;
foreach ($keysAndExprs as $keyAndExpr) {
if ($keyAndExpr->getKeyExpr() !== null) {
$alwaysNullKey = false;
} else {
$alwaysStringKey = false;
}
}
if ($alwaysNullKey) {
return true;
}
return $alwaysStringKey;
}
}

View File

@ -16,6 +16,7 @@ use Rector\CodeQuality\NodeAnalyzer\VariableDimFetchAssignResolver;
use Rector\CodeQuality\ValueObject\KeyAndExpr;
use Rector\Core\Contract\PhpParser\Node\StmtsAwareInterface;
use Rector\Core\Rector\AbstractRector;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -148,7 +149,10 @@ CODE_SAMPLE
{
$arrayItems = [];
foreach ($keysAndExprs as $keyAndExpr) {
$arrayItems[] = new ArrayItem($keyAndExpr->getExpr(), $keyAndExpr->getKeyExpr());
$arrayItem = new ArrayItem($keyAndExpr->getExpr(), $keyAndExpr->getKeyExpr());
$arrayItem->setAttribute(AttributeKey::COMMENTS, $keyAndExpr->getComments());
$arrayItems[] = $arrayItem;
}
return new Array_($arrayItems);

View File

@ -4,17 +4,22 @@ declare(strict_types=1);
namespace Rector\CodeQuality\ValueObject;
use PhpParser\Comment;
use PhpParser\Node\Expr;
final class KeyAndExpr
{
/**
* @param Comment[] $comments
*/
public function __construct(
private readonly Expr $keyExpr,
private readonly Expr $expr
private readonly ?Expr $keyExpr,
private readonly Expr $expr,
private readonly array $comments
) {
}
public function getKeyExpr(): Expr
public function getKeyExpr(): ?Expr
{
return $this->keyExpr;
}
@ -23,4 +28,12 @@ final class KeyAndExpr
{
return $this->expr;
}
/**
* @return Comment[]
*/
public function getComments(): array
{
return $this->comments;
}
}

View File

@ -123,17 +123,13 @@ CODE_SAMPLE
*/
private function createNewNodes(Expr $assignVariable, Expr $eachedVariable): array
{
$newNodes = [];
$newNodes[] = $this->createDimFetchAssignWithFuncCall($assignVariable, $eachedVariable, 1, 'current');
$newNodes[] = $this->createDimFetchAssignWithFuncCall($assignVariable, $eachedVariable, 'value', 'current');
$newNodes[] = $this->createDimFetchAssignWithFuncCall($assignVariable, $eachedVariable, 0, self::KEY);
$newNodes[] = $this->createDimFetchAssignWithFuncCall($assignVariable, $eachedVariable, self::KEY, self::KEY);
$newNodes[] = $this->nodeFactory->createFuncCall('next', [new Arg($eachedVariable)]);
return $newNodes;
return [
$this->createDimFetchAssignWithFuncCall($assignVariable, $eachedVariable, 1, 'current'),
$this->createDimFetchAssignWithFuncCall($assignVariable, $eachedVariable, 'value', 'current'),
$this->createDimFetchAssignWithFuncCall($assignVariable, $eachedVariable, 0, self::KEY),
$this->createDimFetchAssignWithFuncCall($assignVariable, $eachedVariable, self::KEY, self::KEY),
$this->nodeFactory->createFuncCall('next', [new Arg($eachedVariable)]),
];
}
private function createDimFetchAssignWithFuncCall(

View File

@ -75,20 +75,19 @@ final class RectorKernel implements LightKernelInterface
*/
private function createCompilerPasses(): array
{
$compilerPasses = [];
return [
// must run before AutowireArrayParameterCompilerPass, as the autowired array cannot contain removed services
$compilerPasses[] = new RemoveSkippedRectorsCompilerPass();
// must run before AutowireArrayParameterCompilerPass, as the autowired array cannot contain removed services
new RemoveSkippedRectorsCompilerPass(),
// autowire Rectors by default (mainly for tests)
$compilerPasses[] = new AutowireInterfacesCompilerPass([RectorInterface::class]);
$compilerPasses[] = new MakeRectorsPublicCompilerPass();
// autowire Rectors by default (mainly for tests)
new AutowireInterfacesCompilerPass([RectorInterface::class]),
new MakeRectorsPublicCompilerPass(),
// add all merged arguments of Rector services
$compilerPasses[] = new MergeImportedRectorConfigureCallValuesCompilerPass($this->configureCallValuesCollector);
$compilerPasses[] = new AutowireArrayParameterCompilerPass();
return $compilerPasses;
// add all merged arguments of Rector services
new MergeImportedRectorConfigureCallValuesCompilerPass($this->configureCallValuesCollector),
new AutowireArrayParameterCompilerPass(),
];
}
/**