From b408d9e7cdec8dadcee766681b8bd8185da55097 Mon Sep 17 00:00:00 2001 From: Stefan Talen Date: Tue, 27 Jun 2023 17:20:06 +0200 Subject: [PATCH] Skip argument if value equals default value (#4368) --- .../Fixture/skip_add_with_default_value.php.inc | 14 ++++++++++++++ .../ArgumentAdderRector/Source/SomeClass.php | 3 +++ .../ArgumentAdderRector/config/configured_rule.php | 1 + .../Rector/ClassMethod/ArgumentAdderRector.php | 11 +++++++++++ 4 files changed, 29 insertions(+) create mode 100644 rules-tests/Arguments/Rector/ClassMethod/ArgumentAdderRector/Fixture/skip_add_with_default_value.php.inc diff --git a/rules-tests/Arguments/Rector/ClassMethod/ArgumentAdderRector/Fixture/skip_add_with_default_value.php.inc b/rules-tests/Arguments/Rector/ClassMethod/ArgumentAdderRector/Fixture/skip_add_with_default_value.php.inc new file mode 100644 index 00000000000..82f065b3021 --- /dev/null +++ b/rules-tests/Arguments/Rector/ClassMethod/ArgumentAdderRector/Fixture/skip_add_with_default_value.php.inc @@ -0,0 +1,14 @@ +someMethod(); + } +} diff --git a/rules-tests/Arguments/Rector/ClassMethod/ArgumentAdderRector/Source/SomeClass.php b/rules-tests/Arguments/Rector/ClassMethod/ArgumentAdderRector/Source/SomeClass.php index c6e4eb3fb35..e341b1b5a77 100644 --- a/rules-tests/Arguments/Rector/ClassMethod/ArgumentAdderRector/Source/SomeClass.php +++ b/rules-tests/Arguments/Rector/ClassMethod/ArgumentAdderRector/Source/SomeClass.php @@ -4,5 +4,8 @@ class SomeClass { + public function someMethod($default = 1): void + { + } } diff --git a/rules-tests/Arguments/Rector/ClassMethod/ArgumentAdderRector/config/configured_rule.php b/rules-tests/Arguments/Rector/ClassMethod/ArgumentAdderRector/config/configured_rule.php index e205957aea3..1b2d6e8fd06 100644 --- a/rules-tests/Arguments/Rector/ClassMethod/ArgumentAdderRector/config/configured_rule.php +++ b/rules-tests/Arguments/Rector/ClassMethod/ArgumentAdderRector/config/configured_rule.php @@ -52,5 +52,6 @@ ), new ArgumentAdder(SomeClass::class, 'withoutTypeOrDefaultValue', 0, 'arguments', [], $arrayType), new ArgumentAdder(SomeMultiArg::class, 'run', 2, 'c', 4), + new ArgumentAdder(SomeClass::class, 'someMethod', 0, 'default', 1), ]); }; diff --git a/rules/Arguments/Rector/ClassMethod/ArgumentAdderRector.php b/rules/Arguments/Rector/ClassMethod/ArgumentAdderRector.php index 842fc9646fe..f6899646c6a 100644 --- a/rules/Arguments/Rector/ClassMethod/ArgumentAdderRector.php +++ b/rules/Arguments/Rector/ClassMethod/ArgumentAdderRector.php @@ -251,6 +251,17 @@ private function shouldSkipParameter( return true; } + // Check if default value is the same + $classMethod = $this->astResolver->resolveClassMethodFromCall($node); + if (($classMethod instanceof ClassMethod) && + isset($classMethod->params[$position]) && + ! $this->changedArgumentsDetector->isDefaultValueChanged( + $classMethod->params[$position], + $argumentAdder->getArgumentDefaultValue() + )) { + return true; + } + // is correct scope? return ! $this->argumentAddingScope->isInCorrectScope($node, $argumentAdder); }