Fix #4498: Go to definition in lifted expressions #4516
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.
Consider the following snippet:
This is rewritten as:
During lifting, we need to assign positions to the trees. We were
assigning the position of
new A
in the original code tox$0
inNil.::(x$0)
, and the original position ofnew A
toval x$0 = new A
with a zero-extent.
Still considering this snippet, this means that when trying to go to the
definition on
new A
, the IDE would think that the user tried to go tothe definition of
x$0
, because the IDE would look for the matchingtree by position.
This commit changes this so that the lifted definition
(
val x$0 = new A
) gets the position of the original expression, andthe reference gets a synthetic, zero-extent position. With this change,
the IDE correctly finds the right tree when selecting
new A
in theoriginal code.
Fixes #4498