Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir/src/display.rs')
| -rw-r--r-- | crates/hir/src/display.rs | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/crates/hir/src/display.rs b/crates/hir/src/display.rs index e9ace855fc..38bbf41797 100644 --- a/crates/hir/src/display.rs +++ b/crates/hir/src/display.rs @@ -325,7 +325,21 @@ fn write_generic_params(def: GenericDefId, f: &mut HirFormatter) -> Result<(), H fn write_where_clause(def: GenericDefId, f: &mut HirFormatter) -> Result<(), HirDisplayError> { let params = f.db.generic_params(def); - if params.where_predicates.is_empty() { + + // unnamed type targets are displayed inline with the argument itself, e.g. `f: impl Y`. + let is_unnamed_type_target = |target: &WherePredicateTypeTarget| match target { + WherePredicateTypeTarget::TypeRef(_) => false, + WherePredicateTypeTarget::TypeParam(id) => params.types[*id].name.is_none(), + }; + + let has_displayable_predicate = params + .where_predicates + .iter() + .any(|pred| { + !matches!(pred, WherePredicate::TypeBound { target, .. } if is_unnamed_type_target(target)) + }); + + if !has_displayable_predicate { return Ok(()); } @@ -348,6 +362,7 @@ fn write_where_clause(def: GenericDefId, f: &mut HirFormatter) -> Result<(), Hir }; match pred { + WherePredicate::TypeBound { target, .. } if is_unnamed_type_target(target) => {} WherePredicate::TypeBound { target, bound } => { if matches!(prev_pred, Some(WherePredicate::TypeBound { target: target_, .. }) if target_ == target) { |