-
-
Notifications
You must be signed in to change notification settings - Fork 14.2k
Fix/Make proc_macro span_close() and span_open() more accurate after set_span() calls #149052
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
Keith-Cancel
wants to merge
2
commits into
rust-lang:main
Choose a base branch
from
Keith-Cancel:main
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+42
−2
Open
Changes from all commits
Commits
Show all changes
2 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
Oops, something went wrong.
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.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This seems like quite the expensive operation to call here. For one this goes through the bridge (which is expensive for rust-analyzer, especially this call, as once we implement it will always do an RPC roundtrip), but that aside, this also always allocates a new string.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The allocation and the further bridge calls to
subspancan be avoided by moving this whole logic into the compiler's side of the bridge.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
An alternative solution is to just add
fn set_span_(open,close)to the API.Typically the user of
set_spanknows whether the passed span actually contains the group's source text, and if it's known, thenset_span_(open,close)can be called as well.I don't suspect it happens often, I'd expect
set_spanto be set to something semi-related from the macro input.If we do this, then #149229 probably shouldn't be merged.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Or it can be merged if
set_span_openchanges only the opening span,set_span_closechanges only the closing span, andset_spanchanges both to the same value.This would also solve the question of what goes back to the compiler when
proc_macro::Spanis converted tocompiler::Span.Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A
set_span_open()andset_span_close(), only effecting their respective fields and spanset_span()overwriting both seems fine. Also if we want to add those API or similar API, #149229 makes even more sense because the entire field becomes more awkward with those proposed API.Although for a public API we probably want that API to be
set_span_open_close(Span, Span)to at least to make sure the spans are from the same file.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That is a good point and certainly do able.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That also requires going through the bridge though.