mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-02 06:41:48 +00:00
Merge #10202
10202: fix: Type param hover shows correct sized bounds. r=flodiebold a=iDawer Closes #9949 This adds implicit `: Sized` bound to type parameters at lowering step. Hovering on type parameter does not show it's `: Sized` bound be it set explicitly or implicitly. This is because it doesn't track that the bound was set implicitly. ### Perf ```rust ./target/rust-analyzer-baseline-3dae94bf -q analysis-stats --memory-usage . Database loaded: 4.51s, 311minstr, 110mb (metadata 1.08s, 22minstr, 743kb; build 3.20s, 8730kinstr, -237kb) crates: 38, mods: 770, decls: 17173, fns: 12835 Item Collection: 29.63s, 85ginstr, 372mb exprs: 353460, ??ty: 364 (0%), ?ty: 232 (0%), !ty: 144 Inference: 118.25s, 284ginstr, 601mb Total: 147.88s, 370ginstr, 973mb ./target/rust-analyzer-hover-ty-param-dfb15292 -q analysis-stats --memory-usage . Database loaded: 4.53s, 311minstr, 110mb (metadata 1.10s, 22minstr, 743kb; build 3.20s, 8672kinstr, -189kb) crates: 38, mods: 770, decls: 17173, fns: 12835 Item Collection: 29.59s, 85ginstr, 372mb exprs: 353460, ??ty: 364 (0%), ?ty: 232 (0%), !ty: 144 Inference: 121.69s, 296ginstr, 601mb Total: 151.28s, 382ginstr, 974mb ``` Co-authored-by: Dawer <7803845+iDawer@users.noreply.github.com>
This commit is contained in:
commit
317059985a
3 changed files with 201 additions and 21 deletions
|
@ -1024,7 +1024,7 @@ pub(crate) fn generic_predicates_for_param_query(
|
|||
let ctx =
|
||||
TyLoweringContext::new(db, &resolver).with_type_param_mode(TypeParamLoweringMode::Variable);
|
||||
let generics = generics(db.upcast(), param_id.parent);
|
||||
resolver
|
||||
let mut predicates: Vec<_> = resolver
|
||||
.where_predicates_in_scope()
|
||||
// we have to filter out all other predicates *first*, before attempting to lower them
|
||||
.filter(|pred| match pred {
|
||||
|
@ -1038,7 +1038,15 @@ pub(crate) fn generic_predicates_for_param_query(
|
|||
WherePredicate::Lifetime { .. } => false,
|
||||
})
|
||||
.flat_map(|pred| ctx.lower_where_predicate(pred, true).map(|p| make_binders(&generics, p)))
|
||||
.collect()
|
||||
.collect();
|
||||
|
||||
let subst = generics.bound_vars_subst(DebruijnIndex::INNERMOST);
|
||||
let explicitly_unsized_tys = ctx.unsized_types.into_inner();
|
||||
let implicitly_sized_predicates =
|
||||
implicitly_sized_clauses(db, param_id.parent, &explicitly_unsized_tys, &subst, &resolver)
|
||||
.map(|p| make_binders(&generics, crate::wrap_empty_binders(p)));
|
||||
predicates.extend(implicitly_sized_predicates);
|
||||
predicates.into()
|
||||
}
|
||||
|
||||
pub(crate) fn generic_predicates_for_param_recover(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue