aboutsummaryrefslogtreecommitdiff
path: root/crates/hir_ty/src/display.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/hir_ty/src/display.rs')
-rw-r--r--crates/hir_ty/src/display.rs28
1 files changed, 18 insertions, 10 deletions
diff --git a/crates/hir_ty/src/display.rs b/crates/hir_ty/src/display.rs
index 64b68014d..efb48c7ee 100644
--- a/crates/hir_ty/src/display.rs
+++ b/crates/hir_ty/src/display.rs
@@ -381,19 +381,24 @@ impl HirDisplay for ApplicationTy {
381 } 381 }
382 } 382 }
383 TypeCtor::OpaqueType(opaque_ty_id) => { 383 TypeCtor::OpaqueType(opaque_ty_id) => {
384 let bounds = match opaque_ty_id { 384 match opaque_ty_id {
385 OpaqueTyId::ReturnTypeImplTrait(func, idx) => { 385 OpaqueTyId::ReturnTypeImplTrait(func, idx) => {
386 let datas = 386 let datas =
387 f.db.return_type_impl_traits(func).expect("impl trait id without data"); 387 f.db.return_type_impl_traits(func).expect("impl trait id without data");
388 let data = (*datas) 388 let data = (*datas)
389 .as_ref() 389 .as_ref()
390 .map(|rpit| rpit.impl_traits[idx as usize].bounds.clone()); 390 .map(|rpit| rpit.impl_traits[idx as usize].bounds.clone());
391 data.subst(&self.parameters) 391 let bounds = data.subst(&self.parameters);
392 write!(f, "impl ")?;
393 write_bounds_like_dyn_trait(&bounds.value, f)?;
394 // FIXME: it would maybe be good to distinguish this from the alias type (when debug printing), and to show the substitution
392 } 395 }
393 }; 396 OpaqueTyId::AsyncBlockTypeImplTrait(..) => {
394 write!(f, "impl ")?; 397 write!(f, "impl Future<Output = ")?;
395 write_bounds_like_dyn_trait(&bounds.value, f)?; 398 self.parameters[0].hir_fmt(f)?;
396 // FIXME: it would maybe be good to distinguish this from the alias type (when debug printing), and to show the substitution 399 write!(f, ">")?;
400 }
401 }
397 } 402 }
398 TypeCtor::Closure { .. } => { 403 TypeCtor::Closure { .. } => {
399 let sig = self.parameters[0].callable_sig(f.db); 404 let sig = self.parameters[0].callable_sig(f.db);
@@ -474,18 +479,21 @@ impl HirDisplay for Ty {
474 write_bounds_like_dyn_trait(predicates, f)?; 479 write_bounds_like_dyn_trait(predicates, f)?;
475 } 480 }
476 Ty::Opaque(opaque_ty) => { 481 Ty::Opaque(opaque_ty) => {
477 let bounds = match opaque_ty.opaque_ty_id { 482 match opaque_ty.opaque_ty_id {
478 OpaqueTyId::ReturnTypeImplTrait(func, idx) => { 483 OpaqueTyId::ReturnTypeImplTrait(func, idx) => {
479 let datas = 484 let datas =
480 f.db.return_type_impl_traits(func).expect("impl trait id without data"); 485 f.db.return_type_impl_traits(func).expect("impl trait id without data");
481 let data = (*datas) 486 let data = (*datas)
482 .as_ref() 487 .as_ref()
483 .map(|rpit| rpit.impl_traits[idx as usize].bounds.clone()); 488 .map(|rpit| rpit.impl_traits[idx as usize].bounds.clone());
484 data.subst(&opaque_ty.parameters) 489 let bounds = data.subst(&opaque_ty.parameters);
490 write!(f, "impl ")?;
491 write_bounds_like_dyn_trait(&bounds.value, f)?;
492 }
493 OpaqueTyId::AsyncBlockTypeImplTrait(..) => {
494 write!(f, "{{async block}}")?;
485 } 495 }
486 }; 496 };
487 write!(f, "impl ")?;
488 write_bounds_like_dyn_trait(&bounds.value, f)?;
489 } 497 }
490 Ty::Unknown => write!(f, "{{unknown}}")?, 498 Ty::Unknown => write!(f, "{{unknown}}")?,
491 Ty::Infer(..) => write!(f, "_")?, 499 Ty::Infer(..) => write!(f, "_")?,