Skip to content

Commit 03cb63c

Browse files
committed
Make impl HirDisplay for TraitRef provide just the trait type
1 parent 34dc94b commit 03cb63c

File tree

4 files changed

+24
-68
lines changed

4 files changed

+24
-68
lines changed

crates/hir-ty/src/display.rs

Lines changed: 17 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -474,7 +474,9 @@ impl HirDisplay for ProjectionTy {
474474

475475
let trait_ref = self.trait_ref(f.db);
476476
write!(f, "<")?;
477-
fmt_trait_ref(f, &trait_ref, TraitRefFormat::SelfAsTrait)?;
477+
trait_ref.self_type_parameter(Interner).hir_fmt(f)?;
478+
write!(f, " as ")?;
479+
trait_ref.hir_fmt(f)?;
478480
write!(
479481
f,
480482
">::{}",
@@ -1775,50 +1777,14 @@ fn write_bounds_like_dyn_trait(
17751777
Ok(())
17761778
}
17771779

1778-
#[derive(Clone, Copy)]
1779-
pub enum TraitRefFormat {
1780-
SelfAsTrait,
1781-
SelfImplementsTrait,
1782-
OnlyTrait,
1783-
}
1784-
1785-
fn fmt_trait_ref(
1786-
f: &mut HirFormatter<'_>,
1787-
tr: &TraitRef,
1788-
format: TraitRefFormat,
1789-
) -> Result<(), HirDisplayError> {
1790-
if f.should_truncate() {
1791-
return write!(f, "{TYPE_HINT_TRUNCATION}");
1792-
}
1793-
1794-
match format {
1795-
TraitRefFormat::SelfAsTrait => {
1796-
tr.self_type_parameter(Interner).hir_fmt(f)?;
1797-
write!(f, " as ")?;
1798-
}
1799-
TraitRefFormat::SelfImplementsTrait => {
1800-
tr.self_type_parameter(Interner).hir_fmt(f)?;
1801-
write!(f, ": ")?;
1802-
}
1803-
TraitRefFormat::OnlyTrait => {}
1804-
}
1805-
1806-
let trait_ = tr.hir_trait_id();
1807-
f.start_location_link(trait_.into());
1808-
write!(f, "{}", f.db.trait_data(trait_).name.display(f.db.upcast(), f.edition()))?;
1809-
f.end_location_link();
1810-
let substs = tr.substitution.as_slice(Interner);
1811-
hir_fmt_generics(f, &substs[1..], None, substs[0].ty(Interner))
1812-
}
1813-
1814-
pub struct TraitRefDisplayWrapper {
1815-
pub trait_ref: TraitRef,
1816-
pub format: TraitRefFormat,
1817-
}
1818-
1819-
impl HirDisplay for TraitRefDisplayWrapper {
1780+
impl HirDisplay for TraitRef {
18201781
fn hir_fmt(&self, f: &mut HirFormatter<'_>) -> Result<(), HirDisplayError> {
1821-
fmt_trait_ref(f, &self.trait_ref, self.format)
1782+
let trait_ = self.hir_trait_id();
1783+
f.start_location_link(trait_.into());
1784+
write!(f, "{}", f.db.trait_data(trait_).name.display(f.db.upcast(), f.edition()))?;
1785+
f.end_location_link();
1786+
let substs = self.substitution.as_slice(Interner);
1787+
hir_fmt_generics(f, &substs[1..], None, substs[0].ty(Interner))
18221788
}
18231789
}
18241790

@@ -1830,11 +1796,16 @@ impl HirDisplay for WhereClause {
18301796

18311797
match self {
18321798
WhereClause::Implemented(trait_ref) => {
1833-
fmt_trait_ref(f, trait_ref, TraitRefFormat::SelfImplementsTrait)?;
1799+
trait_ref.self_type_parameter(Interner).hir_fmt(f)?;
1800+
write!(f, ": ")?;
1801+
trait_ref.hir_fmt(f)?;
18341802
}
18351803
WhereClause::AliasEq(AliasEq { alias: AliasTy::Projection(projection_ty), ty }) => {
18361804
write!(f, "<")?;
1837-
fmt_trait_ref(f, &projection_ty.trait_ref(f.db), TraitRefFormat::SelfAsTrait)?;
1805+
let trait_ref = &projection_ty.trait_ref(f.db);
1806+
trait_ref.self_type_parameter(Interner).hir_fmt(f)?;
1807+
write!(f, " as ")?;
1808+
trait_ref.hir_fmt(f)?;
18381809
write!(f, ">::",)?;
18391810
let type_alias = from_assoc_type_id(projection_ty.associated_ty_id);
18401811
f.start_location_link(type_alias.into());

crates/hir/src/display.rs

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -743,18 +743,9 @@ impl HirDisplay for Static {
743743
}
744744
}
745745

746-
pub struct TraitRefDisplayWrapper {
747-
pub trait_ref: TraitRef,
748-
pub format: hir_ty::display::TraitRefFormat,
749-
}
750-
751-
impl HirDisplay for TraitRefDisplayWrapper {
746+
impl HirDisplay for TraitRef {
752747
fn hir_fmt(&self, f: &mut HirFormatter<'_>) -> Result<(), HirDisplayError> {
753-
hir_ty::display::TraitRefDisplayWrapper {
754-
format: self.format,
755-
trait_ref: self.trait_ref.trait_ref.clone(),
756-
}
757-
.hir_fmt(f)
748+
self.trait_ref.hir_fmt(f)
758749
}
759750
}
760751

crates/hir/src/lib.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,6 @@ use crate::db::{DefDatabase, HirDatabase};
9696
pub use crate::{
9797
attrs::{resolve_doc_path_on, HasAttrs},
9898
diagnostics::*,
99-
display::TraitRefDisplayWrapper,
10099
has_source::HasSource,
101100
semantics::{
102101
PathResolution, Semantics, SemanticsImpl, SemanticsScope, TypeInfo, VisibleTraits,
@@ -149,7 +148,7 @@ pub use {
149148
hir_ty::{
150149
consteval::ConstEvalError,
151150
diagnostics::UnsafetyReason,
152-
display::{ClosureStyle, HirDisplay, HirDisplayError, HirWrite, TraitRefFormat},
151+
display::{ClosureStyle, HirDisplay, HirDisplayError, HirWrite},
153152
dyn_compatibility::{DynCompatibilityViolation, MethodViolationCode},
154153
layout::LayoutError,
155154
mir::{MirEvalError, MirLowerError},

crates/ide/src/moniker.rs

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,7 @@
33
44
use core::fmt;
55

6-
use hir::{
7-
Adt, AsAssocItem, Crate, HirDisplay, MacroKind, Semantics, TraitRefDisplayWrapper,
8-
TraitRefFormat,
9-
};
6+
use hir::{Adt, AsAssocItem, Crate, HirDisplay, MacroKind, Semantics};
107
use ide_db::{
118
base_db::{CrateOrigin, LangCrateOrigin},
129
defs::{Definition, IdentClass},
@@ -312,15 +309,13 @@ fn def_to_non_local_moniker(
312309
match def {
313310
Definition::SelfType(impl_) => {
314311
if let Some(trait_ref) = impl_.trait_ref(db) {
315-
// Trait impls use `trait_type` constraint syntax for the 2nd parameter.
316-
let trait_ref_for_display =
317-
TraitRefDisplayWrapper { trait_ref, format: TraitRefFormat::OnlyTrait };
312+
// Trait impls use the trait type for the 2nd parameter.
318313
reverse_description.push(MonikerDescriptor {
319-
name: display(db, edition, module, trait_ref_for_display),
314+
name: display(db, edition, module, trait_ref),
320315
desc: MonikerDescriptorKind::TypeParameter,
321316
});
322317
}
323-
// Both inherent and trait impls use `self_type` as the first parameter.
318+
// Both inherent and trait impls use the self type for the first parameter.
324319
reverse_description.push(MonikerDescriptor {
325320
name: display(db, edition, module, impl_.self_ty(db)),
326321
desc: MonikerDescriptorKind::TypeParameter,

0 commit comments

Comments
 (0)