From 8ff7747eab74154d32f76c9db4443762567e6dda Mon Sep 17 00:00:00 2001 From: Jean-Luc Herren Date: Wed, 29 Mar 2023 00:36:37 +0200 Subject: [PATCH] RemoveNonExistingVarAnnotationRector: Allow return annotations (#3534) Fixes rectorphp/rector#7859 --- .../Fixture/return_annotation_invalid.php.inc | 28 +++++++++++++++++++ .../return_annotation_unwanted.php.inc | 28 +++++++++++++++++++ .../skip_direct_return_func_call.php.inc | 12 ++++++++ .../RemoveNonExistingVarAnnotationRector.php | 14 ++++++++++ 4 files changed, 82 insertions(+) create mode 100644 rules-tests/DeadCode/Rector/Node/RemoveNonExistingVarAnnotationRector/Fixture/return_annotation_invalid.php.inc create mode 100644 rules-tests/DeadCode/Rector/Node/RemoveNonExistingVarAnnotationRector/Fixture/return_annotation_unwanted.php.inc create mode 100644 rules-tests/DeadCode/Rector/Node/RemoveNonExistingVarAnnotationRector/Fixture/skip_direct_return_func_call.php.inc diff --git a/rules-tests/DeadCode/Rector/Node/RemoveNonExistingVarAnnotationRector/Fixture/return_annotation_invalid.php.inc b/rules-tests/DeadCode/Rector/Node/RemoveNonExistingVarAnnotationRector/Fixture/return_annotation_invalid.php.inc new file mode 100644 index 00000000000..b1c385cbc17 --- /dev/null +++ b/rules-tests/DeadCode/Rector/Node/RemoveNonExistingVarAnnotationRector/Fixture/return_annotation_invalid.php.inc @@ -0,0 +1,28 @@ + +----- + diff --git a/rules-tests/DeadCode/Rector/Node/RemoveNonExistingVarAnnotationRector/Fixture/return_annotation_unwanted.php.inc b/rules-tests/DeadCode/Rector/Node/RemoveNonExistingVarAnnotationRector/Fixture/return_annotation_unwanted.php.inc new file mode 100644 index 00000000000..3fdd8fa12e0 --- /dev/null +++ b/rules-tests/DeadCode/Rector/Node/RemoveNonExistingVarAnnotationRector/Fixture/return_annotation_unwanted.php.inc @@ -0,0 +1,28 @@ + */ + return new stdClass; + } +} + +?> +----- + diff --git a/rules-tests/DeadCode/Rector/Node/RemoveNonExistingVarAnnotationRector/Fixture/skip_direct_return_func_call.php.inc b/rules-tests/DeadCode/Rector/Node/RemoveNonExistingVarAnnotationRector/Fixture/skip_direct_return_func_call.php.inc new file mode 100644 index 00000000000..ab88a4fdafd --- /dev/null +++ b/rules-tests/DeadCode/Rector/Node/RemoveNonExistingVarAnnotationRector/Fixture/skip_direct_return_func_call.php.inc @@ -0,0 +1,12 @@ +variableName, '$'); + + if ($variableName === '' && $this->isAnnotatableReturn($node)) { + return null; + } + if ($this->hasVariableName($node, $variableName)) { return null; } @@ -197,4 +204,11 @@ private function isObjectShapePseudoType(VarTagValueNode $varTagValueNode): bool return str_contains($varTagValueNode->description, '}'); } + + private function isAnnotatableReturn(Node $node): bool + { + return $node instanceof Return_ + && $node->expr instanceof CallLike + && ! $node->expr instanceof New_; + } }