diff --git a/rules/CodeQuality/Rector/ClassMethod/NarrowUnionTypeDocRector.php b/rules/CodeQuality/Rector/ClassMethod/NarrowUnionTypeDocRector.php index 085ce4fae6c..022d68f4be4 100644 --- a/rules/CodeQuality/Rector/ClassMethod/NarrowUnionTypeDocRector.php +++ b/rules/CodeQuality/Rector/ClassMethod/NarrowUnionTypeDocRector.php @@ -90,11 +90,14 @@ public function refactor(Node $node): ?Node } } - if ($phpDocInfo->hasChanged()) { - $node->setAttribute(AttributeKey::HAS_PHP_DOC_INFO_JUST_CHANGED, true); - return $node; + if (! $phpDocInfo->hasChanged()) { + return null; } + $node->setAttribute(AttributeKey::HAS_PHP_DOC_INFO_JUST_CHANGED, true); + + // @see https://github.com/rectorphp/rector-src/pull/795 + // avoid duplicated ifs and returns when combined with ChangeOrIfReturnToEarlyReturnRector, ChangeAndIfToEarlyReturnRector, and AddArrayReturnDocTypeRector return null; } diff --git a/tests/Issues/IssueEarlyReturnAndOrNarrow/Fixture/and_next_or.php.inc b/tests/Issues/IssueEarlyReturnAndOrNarrow/Fixture/and_next_or.php.inc new file mode 100644 index 00000000000..274d3fa0981 --- /dev/null +++ b/tests/Issues/IssueEarlyReturnAndOrNarrow/Fixture/and_next_or.php.inc @@ -0,0 +1,44 @@ + +----- + diff --git a/tests/Issues/IssueEarlyReturnAndOrNarrow/IssueEarlyReturnAndOrNarrowTest.php b/tests/Issues/IssueEarlyReturnAndOrNarrow/IssueEarlyReturnAndOrNarrowTest.php new file mode 100644 index 00000000000..a3b40a4e978 --- /dev/null +++ b/tests/Issues/IssueEarlyReturnAndOrNarrow/IssueEarlyReturnAndOrNarrowTest.php @@ -0,0 +1,33 @@ +doTestFileInfo($fileInfo); + } + + /** + * @return Iterator + */ + public function provideData(): Iterator + { + return $this->yieldFilesFromDirectory(__DIR__ . '/Fixture'); + } + + public function provideConfigFilePath(): string + { + return __DIR__ . '/config/configured_rule.php'; + } +} diff --git a/tests/Issues/IssueEarlyReturnAndOrNarrow/config/configured_rule.php b/tests/Issues/IssueEarlyReturnAndOrNarrow/config/configured_rule.php new file mode 100644 index 00000000000..75d41be81e2 --- /dev/null +++ b/tests/Issues/IssueEarlyReturnAndOrNarrow/config/configured_rule.php @@ -0,0 +1,17 @@ +services(); + $services->set(ChangeOrIfReturnToEarlyReturnRector::class); + $services->set(ChangeAndIfToEarlyReturnRector::class); + $services->set(AddArrayReturnDocTypeRector::class); + $services->set(NarrowUnionTypeDocRector::class); +};