From 1a4bb3812639deedb0073386607c02a21ecee383 Mon Sep 17 00:00:00 2001 From: TomasVotruba Date: Wed, 26 Feb 2020 00:47:46 +0100 Subject: [PATCH] skip open source class in rmeove unused param in open-source --- .../RemoveOverriddenValuesRector.php | 4 +++ .../RemoveUnusedParameterRector.php | 35 +++++++++++++++---- .../skip_abstract_class.php.inc | 16 +++++++++ 3 files changed, 48 insertions(+), 7 deletions(-) create mode 100644 rules/dead-code/tests/Rector/ClassMethod/RemoveUnusedParameterRector/FixtureOpenSource/skip_abstract_class.php.inc diff --git a/rules/dead-code/src/Rector/ClassMethod/RemoveOverriddenValuesRector.php b/rules/dead-code/src/Rector/ClassMethod/RemoveOverriddenValuesRector.php index f357fb2d0b8..0902bee10b9 100644 --- a/rules/dead-code/src/Rector/ClassMethod/RemoveOverriddenValuesRector.php +++ b/rules/dead-code/src/Rector/ClassMethod/RemoveOverriddenValuesRector.php @@ -94,6 +94,10 @@ PHP ); $nodesToRemove = $this->resolveNodesToRemove($assignedVariableNames, $nodesByTypeAndPosition); + if ($nodesToRemove === []) { + return null; + } + $this->removeNodes($nodesToRemove); return $node; diff --git a/rules/dead-code/src/Rector/ClassMethod/RemoveUnusedParameterRector.php b/rules/dead-code/src/Rector/ClassMethod/RemoveUnusedParameterRector.php index e14ed0da5e6..e6a4e5d01ad 100644 --- a/rules/dead-code/src/Rector/ClassMethod/RemoveUnusedParameterRector.php +++ b/rules/dead-code/src/Rector/ClassMethod/RemoveUnusedParameterRector.php @@ -21,6 +21,7 @@ use Symplify\PackageBuilder\Parameter\ParameterProvider; * @see https://www.php.net/manual/en/function.compact.php * * @see \Rector\DeadCode\Tests\Rector\ClassMethod\RemoveUnusedParameterRector\RemoveUnusedParameterRectorTest + * @see \Rector\DeadCode\Tests\Rector\ClassMethod\RemoveUnusedParameterRector\OpenSourceRectorTest */ final class RemoveUnusedParameterRector extends AbstractRector { @@ -127,6 +128,10 @@ PHP $childrenOfClass = $this->classLikeParsedNodesFinder->findChildrenOfClass($className); $unusedParameters = $this->getUnusedParameters($node, $methodName, $childrenOfClass); + if ($unusedParameters === []) { + return null; + } + foreach ($childrenOfClass as $childClassNode) { $methodOfChild = $childClassNode->getMethod($methodName); if ($methodOfChild !== null) { @@ -211,19 +216,35 @@ PHP return true; } - // skip as possible contract for 3rd party - $projetType = $this->parameterProvider->provideParameter(Option::PROJECT_TYPE); - if ($classMethod->isAbstract() && $projetType === Option::PROJECT_TYPE_OPEN_SOURCE) { - return true; - } - $class = $classMethod->getAttribute(AttributeKey::CLASS_NODE); - // skip interfaces and traits if (! $class instanceof Class_) { return true; } + if ($this->shouldSkipOpenSourceAbstract($classMethod, $class)) { + return true; + } + return $this->isAnonymousClass($class); } + + private function shouldSkipOpenSourceAbstract(ClassMethod $classMethod, Class_ $class): bool + { + // skip as possible contract for 3rd party + $projectType = $this->parameterProvider->provideParameter(Option::PROJECT_TYPE); + if ($projectType !== Option::PROJECT_TYPE_OPEN_SOURCE) { + return false; + } + + if ($classMethod->isAbstract()) { + return true; + } + + if (! $class->isAbstract()) { + return false; + } + + return $classMethod->isPublic(); + } } diff --git a/rules/dead-code/tests/Rector/ClassMethod/RemoveUnusedParameterRector/FixtureOpenSource/skip_abstract_class.php.inc b/rules/dead-code/tests/Rector/ClassMethod/RemoveUnusedParameterRector/FixtureOpenSource/skip_abstract_class.php.inc new file mode 100644 index 00000000000..ded4c5d3133 --- /dev/null +++ b/rules/dead-code/tests/Rector/ClassMethod/RemoveUnusedParameterRector/FixtureOpenSource/skip_abstract_class.php.inc @@ -0,0 +1,16 @@ +