Skip to content

Deprecate WillReturnCallbackFallbackToThrowRector - #740

Merged
TomasVotruba merged 1 commit into
mainfrom
deprecate-will-return-callback-fallback-to-throw
Jul 31, 2026
Merged

Deprecate WillReturnCallbackFallbackToThrowRector#740
TomasVotruba merged 1 commit into
mainfrom
deprecate-will-return-callback-fallback-to-throw

Conversation

@TomasVotruba

Copy link
Copy Markdown
Member

WillReturnCallbackFallbackToThrowRector is not part of any set. It sat commented out in phpunit-code-quality.php behind an "enable once better tested" note, so it only ran when registered by hand.

The pattern it targets is very rare and hardly automatable - it only fires on a willReturnCallback() closure that uses $matcher, branches on the invocation count, and ends on an if with no explicit fallback return:

 $this->someServiceMock->expects($matcher)
     ->method('run')
     ->willReturnCallback(function () use ($matcher) {
         if ($matcher->numberOfInvocations() === 1) {
             return 1;
         }
+
+        throw new \PHPUnit\Framework\Exception(sprintf('Method should not be called for the %dth time', $matcher->numberOfInvocations()));
     });

Whether an extra call should throw, return a default, or is simply not worth guarding is a per-test decision. Better handled in a custom way, or left untouched.

Standard deprecation shape: implements DeprecatedInterface, refactor() throws, tests removed, commented-out set entry dropped. MatcherInvocationCountMethodCallNodeFactory stays - WillReturnCallbackFactory still uses it.

The case is very rare and hardly automatable, and the rule is not part
of any set - it sat commented out in the code-quality set. Better handle
it in a custom way, or keep the code untouched.
@TomasVotruba
TomasVotruba merged commit ca978f2 into main Jul 31, 2026
7 checks passed
@TomasVotruba
TomasVotruba deleted the deprecate-will-return-callback-fallback-to-throw branch July 31, 2026 16:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant