mirror of
https://github.com/rectorphp/rector.git
synced 2024-06-06 19:30:50 +00:00
[CodeQuality] Add empty array support to InlineArrayReturnAssignRector (#2397)
This commit is contained in:
parent
dc6bd9680c
commit
01fc91e575
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
]);
|
||||
};
|
||||
|
|
|
@ -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,
|
||||
]);
|
||||
};
|
||||
|
|
|
@ -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#'
|
||||
|
||||
|
|
|
@ -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'];
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
|
@ -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',
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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(),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue
Block a user