diff options
Diffstat (limited to 'crates/hir/src/display.rs')
-rw-r--r-- | crates/hir/src/display.rs | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/crates/hir/src/display.rs b/crates/hir/src/display.rs new file mode 100644 index 000000000..86f48256e --- /dev/null +++ b/crates/hir/src/display.rs | |||
@@ -0,0 +1,25 @@ | |||
1 | //! HirDisplay implementations for various hir types. | ||
2 | use hir_ty::display::{ | ||
3 | write_bounds_like_dyn_trait_with_prefix, HirDisplay, HirDisplayError, HirFormatter, | ||
4 | }; | ||
5 | |||
6 | use crate::{Substs, Type, TypeParam}; | ||
7 | |||
8 | impl HirDisplay for Type { | ||
9 | fn hir_fmt(&self, f: &mut HirFormatter) -> Result<(), HirDisplayError> { | ||
10 | self.ty.value.hir_fmt(f) | ||
11 | } | ||
12 | } | ||
13 | |||
14 | impl HirDisplay for TypeParam { | ||
15 | fn hir_fmt(&self, f: &mut HirFormatter) -> Result<(), HirDisplayError> { | ||
16 | write!(f, "{}", self.name(f.db))?; | ||
17 | let bounds = f.db.generic_predicates_for_param(self.id); | ||
18 | let substs = Substs::type_params(f.db, self.id.parent); | ||
19 | let predicates = bounds.iter().cloned().map(|b| b.subst(&substs)).collect::<Vec<_>>(); | ||
20 | if !(predicates.is_empty() || f.omit_verbose_types()) { | ||
21 | write_bounds_like_dyn_trait_with_prefix(":", &predicates, f)?; | ||
22 | } | ||
23 | Ok(()) | ||
24 | } | ||
25 | } | ||