Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir/src/display.rs')
-rw-r--r--crates/hir/src/display.rs37
1 files changed, 33 insertions, 4 deletions
diff --git a/crates/hir/src/display.rs b/crates/hir/src/display.rs
index 30f402a79f..cdc0db8653 100644
--- a/crates/hir/src/display.rs
+++ b/crates/hir/src/display.rs
@@ -17,10 +17,10 @@ use hir_ty::{
};
use crate::{
- Adt, AsAssocItem, AssocItemContainer, Const, ConstParam, Enum, ExternCrateDecl, Field,
- Function, GenericParam, HasCrate, HasVisibility, LifetimeParam, Macro, Module, SelfParam,
- Static, Struct, Trait, TraitAlias, TupleField, TyBuilder, Type, TypeAlias, TypeOrConstParam,
- TypeParam, Union, Variant,
+ Adt, AsAssocItem, AssocItem, AssocItemContainer, Const, ConstParam, Enum, ExternCrateDecl,
+ Field, Function, GenericParam, HasCrate, HasVisibility, LifetimeParam, Macro, Module,
+ SelfParam, Static, Struct, Trait, TraitAlias, TupleField, TyBuilder, Type, TypeAlias,
+ TypeOrConstParam, TypeParam, Union, Variant,
};
impl HirDisplay for Function {
@@ -595,6 +595,35 @@ impl HirDisplay for Trait {
let def_id = GenericDefId::TraitId(self.id);
write_generic_params(def_id, f)?;
write_where_clause(def_id, f)?;
+
+ if let Some(limit) = f.entity_limit {
+ let assoc_items = self.items(f.db);
+ let count = assoc_items.len().min(limit);
+ if count == 0 {
+ if assoc_items.is_empty() {
+ f.write_str(" {}")?;
+ } else {
+ f.write_str(" { /* … */ }")?;
+ }
+ } else {
+ f.write_str(" {\n")?;
+ for item in &assoc_items[..count] {
+ f.write_str(" ")?;
+ match item {
+ AssocItem::Function(func) => func.hir_fmt(f),
+ AssocItem::Const(cst) => cst.hir_fmt(f),
+ AssocItem::TypeAlias(type_alias) => type_alias.hir_fmt(f),
+ }?;
+ f.write_str(";\n")?;
+ }
+
+ if assoc_items.len() > count {
+ f.write_str(" /* … */\n")?;
+ }
+ f.write_str("}")?;
+ }
+ }
+
Ok(())
}
}