diff options
author | Lukas Wirth <[email protected]> | 2021-04-06 10:45:41 +0100 |
---|---|---|
committer | Lukas Wirth <[email protected]> | 2021-04-06 10:45:41 +0100 |
commit | 9fbba7bc45ec6bea9468931d9d9fdd0141826f0a (patch) | |
tree | 266da1eafcd60457fa99cc422a415e27992c08d7 /crates/hir_ty/src/display.rs | |
parent | 047b5313013383fc4fafaef6d6d8d6a64549e3cb (diff) |
Add chalk_ir::Const to TyKind::Array
Diffstat (limited to 'crates/hir_ty/src/display.rs')
-rw-r--r-- | crates/hir_ty/src/display.rs | 46 |
1 files changed, 36 insertions, 10 deletions
diff --git a/crates/hir_ty/src/display.rs b/crates/hir_ty/src/display.rs index 22416c0cf..8fe4ed3fa 100644 --- a/crates/hir_ty/src/display.rs +++ b/crates/hir_ty/src/display.rs | |||
@@ -5,6 +5,7 @@ use std::{ | |||
5 | fmt::{self, Debug}, | 5 | fmt::{self, Debug}, |
6 | }; | 6 | }; |
7 | 7 | ||
8 | use chalk_ir::BoundVar; | ||
8 | use hir_def::{ | 9 | use hir_def::{ |
9 | db::DefDatabase, | 10 | db::DefDatabase, |
10 | find_path, | 11 | find_path, |
@@ -18,12 +19,12 @@ use hir_def::{ | |||
18 | use hir_expand::name::Name; | 19 | use hir_expand::name::Name; |
19 | 20 | ||
20 | use crate::{ | 21 | use crate::{ |
21 | db::HirDatabase, from_assoc_type_id, from_foreign_def_id, from_placeholder_idx, | 22 | const_from_placeholder_idx, db::HirDatabase, from_assoc_type_id, from_foreign_def_id, |
22 | lt_from_placeholder_idx, primitive, subst_prefix, to_assoc_type_id, traits::chalk::from_chalk, | 23 | from_placeholder_idx, lt_from_placeholder_idx, primitive, subst_prefix, to_assoc_type_id, |
23 | utils::generics, AdtId, AliasEq, AliasTy, CallableDefId, CallableSig, DomainGoal, GenericArg, | 24 | traits::chalk::from_chalk, utils::generics, AdtId, AliasEq, AliasTy, CallableDefId, |
24 | ImplTraitId, Interner, Lifetime, LifetimeData, LifetimeOutlives, Mutability, OpaqueTy, | 25 | CallableSig, Const, ConstValue, DomainGoal, GenericArg, ImplTraitId, Interner, Lifetime, |
25 | ProjectionTy, ProjectionTyExt, QuantifiedWhereClause, Scalar, TraitRef, Ty, TyExt, TyKind, | 26 | LifetimeData, LifetimeOutlives, Mutability, OpaqueTy, ProjectionTy, ProjectionTyExt, |
26 | WhereClause, | 27 | QuantifiedWhereClause, Scalar, TraitRef, Ty, TyExt, TyKind, WhereClause, |
27 | }; | 28 | }; |
28 | 29 | ||
29 | pub struct HirFormatter<'a> { | 30 | pub struct HirFormatter<'a> { |
@@ -290,6 +291,29 @@ impl HirDisplay for GenericArg { | |||
290 | } | 291 | } |
291 | } | 292 | } |
292 | 293 | ||
294 | impl HirDisplay for Const { | ||
295 | fn hir_fmt(&self, f: &mut HirFormatter) -> Result<(), HirDisplayError> { | ||
296 | let data = self.interned(); | ||
297 | match data.value { | ||
298 | ConstValue::BoundVar(idx) => idx.hir_fmt(f), | ||
299 | ConstValue::InferenceVar(..) => write!(f, "_"), | ||
300 | ConstValue::Placeholder(idx) => { | ||
301 | let id = const_from_placeholder_idx(f.db, idx); | ||
302 | let generics = generics(f.db.upcast(), id.parent); | ||
303 | let param_data = &generics.params.consts[id.local_id]; | ||
304 | write!(f, "{}", param_data.name) | ||
305 | } | ||
306 | ConstValue::Concrete(_) => write!(f, "_"), | ||
307 | } | ||
308 | } | ||
309 | } | ||
310 | |||
311 | impl HirDisplay for BoundVar { | ||
312 | fn hir_fmt(&self, f: &mut HirFormatter) -> Result<(), HirDisplayError> { | ||
313 | write!(f, "?{}.{}", self.debruijn.depth(), self.index) | ||
314 | } | ||
315 | } | ||
316 | |||
293 | impl HirDisplay for Ty { | 317 | impl HirDisplay for Ty { |
294 | fn hir_fmt(&self, f: &mut HirFormatter) -> Result<(), HirDisplayError> { | 318 | fn hir_fmt(&self, f: &mut HirFormatter) -> Result<(), HirDisplayError> { |
295 | if f.should_truncate() { | 319 | if f.should_truncate() { |
@@ -309,10 +333,12 @@ impl HirDisplay for Ty { | |||
309 | t.hir_fmt(f)?; | 333 | t.hir_fmt(f)?; |
310 | write!(f, "]")?; | 334 | write!(f, "]")?; |
311 | } | 335 | } |
312 | TyKind::Array(t) => { | 336 | TyKind::Array(t, c) => { |
313 | write!(f, "[")?; | 337 | write!(f, "[")?; |
314 | t.hir_fmt(f)?; | 338 | t.hir_fmt(f)?; |
315 | write!(f, "; _]")?; | 339 | write!(f, "; ")?; |
340 | c.hir_fmt(f)?; | ||
341 | write!(f, "]")?; | ||
316 | } | 342 | } |
317 | TyKind::Raw(m, t) | TyKind::Ref(m, _, t) => { | 343 | TyKind::Raw(m, t) | TyKind::Ref(m, _, t) => { |
318 | let ty_display = | 344 | let ty_display = |
@@ -617,7 +643,7 @@ impl HirDisplay for Ty { | |||
617 | } | 643 | } |
618 | } | 644 | } |
619 | } | 645 | } |
620 | TyKind::BoundVar(idx) => write!(f, "?{}.{}", idx.debruijn.depth(), idx.index)?, | 646 | TyKind::BoundVar(idx) => idx.hir_fmt(f)?, |
621 | TyKind::Dyn(dyn_ty) => { | 647 | TyKind::Dyn(dyn_ty) => { |
622 | write_bounds_like_dyn_trait_with_prefix( | 648 | write_bounds_like_dyn_trait_with_prefix( |
623 | "dyn", | 649 | "dyn", |
@@ -850,7 +876,7 @@ impl HirDisplay for Lifetime { | |||
850 | impl HirDisplay for LifetimeData { | 876 | impl HirDisplay for LifetimeData { |
851 | fn hir_fmt(&self, f: &mut HirFormatter) -> Result<(), HirDisplayError> { | 877 | fn hir_fmt(&self, f: &mut HirFormatter) -> Result<(), HirDisplayError> { |
852 | match self { | 878 | match self { |
853 | LifetimeData::BoundVar(idx) => write!(f, "?{}.{}", idx.debruijn.depth(), idx.index), | 879 | LifetimeData::BoundVar(idx) => idx.hir_fmt(f), |
854 | LifetimeData::InferenceVar(_) => write!(f, "_"), | 880 | LifetimeData::InferenceVar(_) => write!(f, "_"), |
855 | LifetimeData::Placeholder(idx) => { | 881 | LifetimeData::Placeholder(idx) => { |
856 | let id = lt_from_placeholder_idx(f.db, *idx); | 882 | let id = lt_from_placeholder_idx(f.db, *idx); |