diff --git a/rules/solid/tests/Rector/ClassMethod/ChangeReadOnlyVariableWithDefaultValueToConstantRector/Fixture/skip_test_variable_test.php.inc b/rules/solid/tests/Rector/ClassMethod/ChangeReadOnlyVariableWithDefaultValueToConstantRector/Fixture/skip_test_variable_test.php.inc new file mode 100644 index 000000000000..376a3f804829 --- /dev/null +++ b/rules/solid/tests/Rector/ClassMethod/ChangeReadOnlyVariableWithDefaultValueToConstantRector/Fixture/skip_test_variable_test.php.inc @@ -0,0 +1,16 @@ +assertSame($expectedValue, $result); + } +} diff --git a/src/PhpParser/Node/Manipulator/VariableManipulator.php b/src/PhpParser/Node/Manipulator/VariableManipulator.php index b51f79b64102..c70e5e598365 100644 --- a/src/PhpParser/Node/Manipulator/VariableManipulator.php +++ b/src/PhpParser/Node/Manipulator/VariableManipulator.php @@ -4,6 +4,7 @@ namespace Rector\Core\PhpParser\Node\Manipulator; +use Nette\Utils\Strings; use PhpParser\Node; use PhpParser\Node\Expr\Array_; use PhpParser\Node\Expr\Assign; @@ -13,6 +14,7 @@ use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\PhpParser\NodeTraverser\CallableNodeTraverser; use Rector\Core\PhpParser\Printer\BetterStandardPrinter; +use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeTypeResolver\Node\AttributeKey; final class VariableManipulator @@ -42,18 +44,25 @@ final class VariableManipulator */ private $arrayManipulator; + /** + * @var NodeNameResolver + */ + private $nodeNameResolver; + public function __construct( CallableNodeTraverser $callableNodeTraverser, AssignManipulator $assignManipulator, BetterStandardPrinter $betterStandardPrinter, BetterNodeFinder $betterNodeFinder, - ArrayManipulator $arrayManipulator + ArrayManipulator $arrayManipulator, + NodeNameResolver $nodeNameResolver ) { $this->callableNodeTraverser = $callableNodeTraverser; $this->assignManipulator = $assignManipulator; $this->betterStandardPrinter = $betterStandardPrinter; $this->betterNodeFinder = $betterNodeFinder; $this->arrayManipulator = $arrayManipulator; + $this->nodeNameResolver = $nodeNameResolver; } /** @@ -82,6 +91,10 @@ public function collectScalarOrArrayAssignsOfVariable(ClassMethod $classMethod): return null; } + if ($this->isTestCaseExpectedVariable($node->var)) { + return null; + } + $assignsOfArrayToVariable[] = $node; }); @@ -135,4 +148,15 @@ private function isReadOnlyVariable(ClassMethod $classMethod, Variable $variable return true; } + + private function isTestCaseExpectedVariable(Variable $variable): bool + { + /** @var string $className */ + $className = $variable->getAttribute(AttributeKey::CLASS_NAME); + if (! Strings::endsWith($className, 'Test')) { + return false; + } + + return $this->nodeNameResolver->isName($variable, 'expect*'); + } }