fix: goto-definition for constants inside range pattern #16759
Merged
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.
Fix #15653.
This PR addresses the issue where it was not possible to navigate to constants in range patterns, specifically including two major changes:
Previously, both the
start
andend
fields inPat::Range
were of typeLiteralOrConst
. When performinggoto-definition
on constants inside range patterns, r-a would useresolve_bind_pat_to_const
to find their definitions. However, because the content of aConst
is notPat
butPath
, it was not stored in thesource_map
, soresolve_bind_pat_to_const
would returnsNone
. This PR changes them toConst(PatId)
, so that during the lowering process, they are considered as apat
, allowing their definitions to be found later throughresolve_bind_pat_to_const
.The process related to range patterns in MIR-lowering has been modified to correctly handle the above changes.