-
Notifications
You must be signed in to change notification settings - Fork 12.7k
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
Do not re-parse function signatures to suggest generics #99249
Conversation
r? @wesleywiser (rust-highfive has picked a reviewer for you, use r? to override) |
☔ The latest upstream changes (presumably #97313) made this pull request unmergeable. Please resolve the merge conflicts. |
Re-rolling the dice. |
nagisa is on vacation. |
} else { | ||
err.help("try using a local generic parameter instead"); | ||
} | ||
let span = sm.span_through_char(span, '<').shrink_to_hi(); |
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.
Is this going to work if there are lifetime parameters?
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.
It won't. I'll file an issue to track this (the former implementation did not support this either).
| help: try using a local generic parameter instead: `bfnr<U, V: Baz<U>, W: Fn(), T>` | ||
| - ^ use of generic parameter from outer function | ||
| | | ||
| help: try using a local generic parameter instead: `T,` |
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.
It looks like the space gets trimmed. Should we re-emit the whole generics so that it is more accurate?
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.
I already find this suggestion quite verbose as it is. Forcing a verbose diagnostic may be a bit too much, wouldn't it?
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 output is fine. At most, we should make it a span_suggestion_verbose
to get the diff output which I find clearer for these kind of additions, instead of modifying the span/suggestion to make it work better with the inline suggestion.
d749499
to
dff4280
Compare
@bors r+ |
Do not re-parse function signatures to suggest generics This PR uses the existing resolution rib infrastructure to channel the correct span information to suggest generic parameters. This allows to avoid re-parsing a function's source code. Drive-by cleanup: this removes useless `FnItemRibKind` from late resolution ribs. All the use cases are already covered by `ItemRibKind` and `AssocItemRibKind` which have more precise semantics.
Rollup of 9 pull requests Successful merges: - rust-lang#99249 (Do not re-parse function signatures to suggest generics) - rust-lang#100309 (Extend comma suggestion to cases where fields arent missing) - rust-lang#100368 (InferCtxt tainted_by_errors_flag should be Option<ErrorGuaranteed>) - rust-lang#100768 (Migrate `rustc_plugin_impl` to `SessionDiagnostic`) - rust-lang#100835 (net listen backlog update, follow-up from rust-lang#97963.) - rust-lang#100851 (Fix rustc_parse_format precision & width spans) - rust-lang#100857 (Refactor query modifier parsing) - rust-lang#100907 (Fix typo in UnreachableProp) - rust-lang#100909 (Minor `ast::LitKind` improvements) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
LL | const CONST: fn() = || { | ||
LL | struct _Obligation where T:; | ||
| ^ use of generic parameter from outer function | ||
| | ||
= help: try using a local generic parameter instead | ||
| - ^ use of generic parameter from outer function | ||
| | | ||
| help: try using a local generic parameter instead: `<T>` |
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 is an unfortunate case.
This PR uses the existing resolution rib infrastructure to channel the correct span information to suggest generic parameters. This allows to avoid re-parsing a function's source code.
Drive-by cleanup: this removes useless
FnItemRibKind
from late resolution ribs. All the use cases are already covered byItemRibKind
andAssocItemRibKind
which have more precise semantics.