Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/hir-ty/src/display.rs63
-rw-r--r--crates/hir/src/display.rs13
-rw-r--r--crates/hir/src/lib.rs3
-rw-r--r--crates/ide/src/moniker.rs13
4 files changed, 24 insertions, 68 deletions
diff --git a/crates/hir-ty/src/display.rs b/crates/hir-ty/src/display.rs
index d8db473682..a4e052a036 100644
--- a/crates/hir-ty/src/display.rs
+++ b/crates/hir-ty/src/display.rs
@@ -474,7 +474,9 @@ impl HirDisplay for ProjectionTy {
let trait_ref = self.trait_ref(f.db);
write!(f, "<")?;
- fmt_trait_ref(f, &trait_ref, TraitRefFormat::SelfAsTrait)?;
+ trait_ref.self_type_parameter(Interner).hir_fmt(f)?;
+ write!(f, " as ")?;
+ trait_ref.hir_fmt(f)?;
write!(
f,
">::{}",
@@ -1775,50 +1777,14 @@ fn write_bounds_like_dyn_trait(
Ok(())
}
-#[derive(Clone, Copy)]
-pub enum TraitRefFormat {
- SelfAsTrait,
- SelfImplementsTrait,
- OnlyTrait,
-}
-
-fn fmt_trait_ref(
- f: &mut HirFormatter<'_>,
- tr: &TraitRef,
- format: TraitRefFormat,
-) -> Result<(), HirDisplayError> {
- if f.should_truncate() {
- return write!(f, "{TYPE_HINT_TRUNCATION}");
- }
-
- match format {
- TraitRefFormat::SelfAsTrait => {
- tr.self_type_parameter(Interner).hir_fmt(f)?;
- write!(f, " as ")?;
- }
- TraitRefFormat::SelfImplementsTrait => {
- tr.self_type_parameter(Interner).hir_fmt(f)?;
- write!(f, ": ")?;
- }
- TraitRefFormat::OnlyTrait => {}
- }
-
- let trait_ = tr.hir_trait_id();
- f.start_location_link(trait_.into());
- write!(f, "{}", f.db.trait_data(trait_).name.display(f.db.upcast(), f.edition()))?;
- f.end_location_link();
- let substs = tr.substitution.as_slice(Interner);
- hir_fmt_generics(f, &substs[1..], None, substs[0].ty(Interner))
-}
-
-pub struct TraitRefDisplayWrapper {
- pub trait_ref: TraitRef,
- pub format: TraitRefFormat,
-}
-
-impl HirDisplay for TraitRefDisplayWrapper {
+impl HirDisplay for TraitRef {
fn hir_fmt(&self, f: &mut HirFormatter<'_>) -> Result<(), HirDisplayError> {
- fmt_trait_ref(f, &self.trait_ref, self.format)
+ let trait_ = self.hir_trait_id();
+ f.start_location_link(trait_.into());
+ write!(f, "{}", f.db.trait_data(trait_).name.display(f.db.upcast(), f.edition()))?;
+ f.end_location_link();
+ let substs = self.substitution.as_slice(Interner);
+ hir_fmt_generics(f, &substs[1..], None, substs[0].ty(Interner))
}
}
@@ -1830,11 +1796,16 @@ impl HirDisplay for WhereClause {
match self {
WhereClause::Implemented(trait_ref) => {
- fmt_trait_ref(f, trait_ref, TraitRefFormat::SelfImplementsTrait)?;
+ trait_ref.self_type_parameter(Interner).hir_fmt(f)?;
+ write!(f, ": ")?;
+ trait_ref.hir_fmt(f)?;
}
WhereClause::AliasEq(AliasEq { alias: AliasTy::Projection(projection_ty), ty }) => {
write!(f, "<")?;
- fmt_trait_ref(f, &projection_ty.trait_ref(f.db), TraitRefFormat::SelfAsTrait)?;
+ let trait_ref = &projection_ty.trait_ref(f.db);
+ trait_ref.self_type_parameter(Interner).hir_fmt(f)?;
+ write!(f, " as ")?;
+ trait_ref.hir_fmt(f)?;
write!(f, ">::",)?;
let type_alias = from_assoc_type_id(projection_ty.associated_ty_id);
f.start_location_link(type_alias.into());
diff --git a/crates/hir/src/display.rs b/crates/hir/src/display.rs
index 0d97585476..a5a6bebe6d 100644
--- a/crates/hir/src/display.rs
+++ b/crates/hir/src/display.rs
@@ -743,18 +743,9 @@ impl HirDisplay for Static {
}
}
-pub struct TraitRefDisplayWrapper {
- pub trait_ref: TraitRef,
- pub format: hir_ty::display::TraitRefFormat,
-}
-
-impl HirDisplay for TraitRefDisplayWrapper {
+impl HirDisplay for TraitRef {
fn hir_fmt(&self, f: &mut HirFormatter<'_>) -> Result<(), HirDisplayError> {
- hir_ty::display::TraitRefDisplayWrapper {
- format: self.format,
- trait_ref: self.trait_ref.trait_ref.clone(),
- }
- .hir_fmt(f)
+ self.trait_ref.hir_fmt(f)
}
}
diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs
index d0fd2e8e05..ac8a62ee85 100644
--- a/crates/hir/src/lib.rs
+++ b/crates/hir/src/lib.rs
@@ -96,7 +96,6 @@ use crate::db::{DefDatabase, HirDatabase};
pub use crate::{
attrs::{resolve_doc_path_on, HasAttrs},
diagnostics::*,
- display::TraitRefDisplayWrapper,
has_source::HasSource,
semantics::{
PathResolution, Semantics, SemanticsImpl, SemanticsScope, TypeInfo, VisibleTraits,
@@ -149,7 +148,7 @@ pub use {
hir_ty::{
consteval::ConstEvalError,
diagnostics::UnsafetyReason,
- display::{ClosureStyle, HirDisplay, HirDisplayError, HirWrite, TraitRefFormat},
+ display::{ClosureStyle, HirDisplay, HirDisplayError, HirWrite},
dyn_compatibility::{DynCompatibilityViolation, MethodViolationCode},
layout::LayoutError,
mir::{MirEvalError, MirLowerError},
diff --git a/crates/ide/src/moniker.rs b/crates/ide/src/moniker.rs
index dfb640cbb2..e29e05d3d5 100644
--- a/crates/ide/src/moniker.rs
+++ b/crates/ide/src/moniker.rs
@@ -3,10 +3,7 @@
use core::fmt;
-use hir::{
- Adt, AsAssocItem, Crate, HirDisplay, MacroKind, Semantics, TraitRefDisplayWrapper,
- TraitRefFormat,
-};
+use hir::{Adt, AsAssocItem, Crate, HirDisplay, MacroKind, Semantics};
use ide_db::{
base_db::{CrateOrigin, LangCrateOrigin},
defs::{Definition, IdentClass},
@@ -312,15 +309,13 @@ fn def_to_non_local_moniker(
match def {
Definition::SelfType(impl_) => {
if let Some(trait_ref) = impl_.trait_ref(db) {
- // Trait impls use `trait_type` constraint syntax for the 2nd parameter.
- let trait_ref_for_display =
- TraitRefDisplayWrapper { trait_ref, format: TraitRefFormat::OnlyTrait };
+ // Trait impls use the trait type for the 2nd parameter.
reverse_description.push(MonikerDescriptor {
- name: display(db, edition, module, trait_ref_for_display),
+ name: display(db, edition, module, trait_ref),
desc: MonikerDescriptorKind::TypeParameter,
});
}
- // Both inherent and trait impls use `self_type` as the first parameter.
+ // Both inherent and trait impls use the self type for the first parameter.
reverse_description.push(MonikerDescriptor {
name: display(db, edition, module, impl_.self_ty(db)),
desc: MonikerDescriptorKind::TypeParameter,