[Naming] Fix partial rename in RenameVariableToMatchMethodCallReturnTypeRector with same-named nested arrow param - #8428
Merged
TomasVotruba merged 1 commit intoSep 2, 2026
Conversation
…ypeRector when a nested arrow function has a param of the same name The tracked $currentFunctionLike is only updated on enter, so it lingers past its own body. A variable located after a nested arrow function was matched against that stale function-like params and skipped, renaming the assignment but not its later usage. Closes rectorphp/rector#9872
TomasVotruba
deleted the
fix-rename-variable-usage-same-named-arrow-param
branch
September 2, 2026 09:00
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes rectorphp/rector#9872
Problem
RenameVariableToMatchMethodCallReturnTypeRectorrenamed a variable at its assignment but left later usages untouched when a nested arrow function declared a parameter of the same name:resulted in:
Cause
VariableRenamer::renameVariableInFunctionLike()tracks the innermost$currentFunctionLikewhile traversing, but that tracker is only updated on enter and never reset on leave (the traverser is enter-only). Once traversal left the arrow function,$currentFunctionLikestill pointed at it, soisParamInParentFunction()matched the later$queryusage against the arrow function param of the same name and skipped it.Fix
Ignore the tracked function-like when the variable sits after its body (token position), so params of an already-left arrow function no longer block the rename.