diff options
Diffstat (limited to 'crates/hir_ty/src/display.rs')
-rw-r--r-- | crates/hir_ty/src/display.rs | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/crates/hir_ty/src/display.rs b/crates/hir_ty/src/display.rs index d7a3977e5..e7c9dabc2 100644 --- a/crates/hir_ty/src/display.rs +++ b/crates/hir_ty/src/display.rs | |||
@@ -1,4 +1,6 @@ | |||
1 | //! FIXME: write short doc here | 1 | //! The `HirDisplay` trait, which serves two purposes: Turning various bits from |
2 | //! HIR back into source code, and just displaying them for debugging/testing | ||
3 | //! purposes. | ||
2 | 4 | ||
3 | use std::{ | 5 | use std::{ |
4 | array, | 6 | array, |
@@ -20,11 +22,11 @@ use hir_expand::name::Name; | |||
20 | 22 | ||
21 | use crate::{ | 23 | use crate::{ |
22 | const_from_placeholder_idx, db::HirDatabase, from_assoc_type_id, from_foreign_def_id, | 24 | const_from_placeholder_idx, db::HirDatabase, from_assoc_type_id, from_foreign_def_id, |
23 | from_placeholder_idx, lt_from_placeholder_idx, primitive, subst_prefix, to_assoc_type_id, | 25 | from_placeholder_idx, lt_from_placeholder_idx, mapping::from_chalk, primitive, subst_prefix, |
24 | traits::chalk::from_chalk, utils::generics, AdtId, AliasEq, AliasTy, CallableDefId, | 26 | to_assoc_type_id, utils::generics, AdtId, AliasEq, AliasTy, CallableDefId, CallableSig, Const, |
25 | CallableSig, Const, ConstValue, DomainGoal, GenericArg, ImplTraitId, Interner, Lifetime, | 27 | ConstValue, DomainGoal, GenericArg, ImplTraitId, Interner, Lifetime, LifetimeData, |
26 | LifetimeData, LifetimeOutlives, Mutability, OpaqueTy, ProjectionTy, ProjectionTyExt, | 28 | LifetimeOutlives, Mutability, OpaqueTy, ProjectionTy, ProjectionTyExt, QuantifiedWhereClause, |
27 | QuantifiedWhereClause, Scalar, TraitRef, TraitRefExt, Ty, TyExt, TyKind, WhereClause, | 29 | Scalar, TraitRef, TraitRefExt, Ty, TyExt, TyKind, WhereClause, |
28 | }; | 30 | }; |
29 | 31 | ||
30 | pub struct HirFormatter<'a> { | 32 | pub struct HirFormatter<'a> { |
@@ -265,7 +267,7 @@ impl HirDisplay for ProjectionTy { | |||
265 | write!(f, " as {}", trait_.name)?; | 267 | write!(f, " as {}", trait_.name)?; |
266 | if self.substitution.len(&Interner) > 1 { | 268 | if self.substitution.len(&Interner) > 1 { |
267 | write!(f, "<")?; | 269 | write!(f, "<")?; |
268 | f.write_joined(&self.substitution.interned()[1..], ", ")?; | 270 | f.write_joined(&self.substitution.as_slice(&Interner)[1..], ", ")?; |
269 | write!(f, ">")?; | 271 | write!(f, ">")?; |
270 | } | 272 | } |
271 | write!(f, ">::{}", f.db.type_alias_data(from_assoc_type_id(self.associated_ty_id)).name)?; | 273 | write!(f, ">::{}", f.db.type_alias_data(from_assoc_type_id(self.associated_ty_id)).name)?; |
@@ -416,7 +418,7 @@ impl HirDisplay for Ty { | |||
416 | write!(f, ",)")?; | 418 | write!(f, ",)")?; |
417 | } else { | 419 | } else { |
418 | write!(f, "(")?; | 420 | write!(f, "(")?; |
419 | f.write_joined(&*substs.interned(), ", ")?; | 421 | f.write_joined(&*substs.as_slice(&Interner), ", ")?; |
420 | write!(f, ")")?; | 422 | write!(f, ")")?; |
421 | } | 423 | } |
422 | } | 424 | } |
@@ -444,7 +446,7 @@ impl HirDisplay for Ty { | |||
444 | // We print all params except implicit impl Trait params. Still a bit weird; should we leave out parent and self? | 446 | // We print all params except implicit impl Trait params. Still a bit weird; should we leave out parent and self? |
445 | if total_len > 0 { | 447 | if total_len > 0 { |
446 | write!(f, "<")?; | 448 | write!(f, "<")?; |
447 | f.write_joined(¶meters.interned()[..total_len], ", ")?; | 449 | f.write_joined(¶meters.as_slice(&Interner)[..total_len], ", ")?; |
448 | write!(f, ">")?; | 450 | write!(f, ">")?; |
449 | } | 451 | } |
450 | } | 452 | } |
@@ -491,7 +493,7 @@ impl HirDisplay for Ty { | |||
491 | .map(|generic_def_id| f.db.generic_defaults(generic_def_id)) | 493 | .map(|generic_def_id| f.db.generic_defaults(generic_def_id)) |
492 | .filter(|defaults| !defaults.is_empty()) | 494 | .filter(|defaults| !defaults.is_empty()) |
493 | { | 495 | { |
494 | None => parameters.interned().as_ref(), | 496 | None => parameters.as_slice(&Interner), |
495 | Some(default_parameters) => { | 497 | Some(default_parameters) => { |
496 | let mut default_from = 0; | 498 | let mut default_from = 0; |
497 | for (i, parameter) in parameters.iter(&Interner).enumerate() { | 499 | for (i, parameter) in parameters.iter(&Interner).enumerate() { |
@@ -515,11 +517,11 @@ impl HirDisplay for Ty { | |||
515 | } | 517 | } |
516 | } | 518 | } |
517 | } | 519 | } |
518 | ¶meters.interned()[0..default_from] | 520 | ¶meters.as_slice(&Interner)[0..default_from] |
519 | } | 521 | } |
520 | } | 522 | } |
521 | } else { | 523 | } else { |
522 | parameters.interned().as_ref() | 524 | parameters.as_slice(&Interner) |
523 | }; | 525 | }; |
524 | if !parameters_to_write.is_empty() { | 526 | if !parameters_to_write.is_empty() { |
525 | write!(f, "<")?; | 527 | write!(f, "<")?; |
@@ -542,7 +544,7 @@ impl HirDisplay for Ty { | |||
542 | write!(f, "{}::{}", trait_.name, type_alias_data.name)?; | 544 | write!(f, "{}::{}", trait_.name, type_alias_data.name)?; |
543 | if parameters.len(&Interner) > 0 { | 545 | if parameters.len(&Interner) > 0 { |
544 | write!(f, "<")?; | 546 | write!(f, "<")?; |
545 | f.write_joined(&*parameters.interned(), ", ")?; | 547 | f.write_joined(&*parameters.as_slice(&Interner), ", ")?; |
546 | write!(f, ">")?; | 548 | write!(f, ">")?; |
547 | } | 549 | } |
548 | } else { | 550 | } else { |
@@ -749,13 +751,13 @@ fn write_bounds_like_dyn_trait( | |||
749 | // existential) here, which is the only thing that's | 751 | // existential) here, which is the only thing that's |
750 | // possible in actual Rust, and hence don't print it | 752 | // possible in actual Rust, and hence don't print it |
751 | write!(f, "{}", f.db.trait_data(trait_).name)?; | 753 | write!(f, "{}", f.db.trait_data(trait_).name)?; |
752 | if let [_, params @ ..] = &*trait_ref.substitution.interned().as_slice() { | 754 | if let [_, params @ ..] = &*trait_ref.substitution.as_slice(&Interner) { |
753 | if is_fn_trait { | 755 | if is_fn_trait { |
754 | if let Some(args) = | 756 | if let Some(args) = |
755 | params.first().and_then(|it| it.assert_ty_ref(&Interner).as_tuple()) | 757 | params.first().and_then(|it| it.assert_ty_ref(&Interner).as_tuple()) |
756 | { | 758 | { |
757 | write!(f, "(")?; | 759 | write!(f, "(")?; |
758 | f.write_joined(&*args.interned(), ", ")?; | 760 | f.write_joined(args.as_slice(&Interner), ", ")?; |
759 | write!(f, ")")?; | 761 | write!(f, ")")?; |
760 | } | 762 | } |
761 | } else if !params.is_empty() { | 763 | } else if !params.is_empty() { |
@@ -814,7 +816,7 @@ fn fmt_trait_ref(tr: &TraitRef, f: &mut HirFormatter, use_as: bool) -> Result<() | |||
814 | write!(f, "{}", f.db.trait_data(tr.hir_trait_id()).name)?; | 816 | write!(f, "{}", f.db.trait_data(tr.hir_trait_id()).name)?; |
815 | if tr.substitution.len(&Interner) > 1 { | 817 | if tr.substitution.len(&Interner) > 1 { |
816 | write!(f, "<")?; | 818 | write!(f, "<")?; |
817 | f.write_joined(&tr.substitution.interned()[1..], ", ")?; | 819 | f.write_joined(&tr.substitution.as_slice(&Interner)[1..], ", ")?; |
818 | write!(f, ">")?; | 820 | write!(f, ">")?; |
819 | } | 821 | } |
820 | Ok(()) | 822 | Ok(()) |