Skip to content
This repository was archived by the owner on May 28, 2025. It is now read-only.

Commit 1c85234

Browse files
committed
limit struct field hover display nums
1 parent d81148a commit 1c85234

File tree

4 files changed

+28
-12
lines changed

4 files changed

+28
-12
lines changed

crates/hir/src/display.rs

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -185,19 +185,30 @@ impl HirDisplay for Struct {
185185
write_where_clause(def_id, f)?;
186186
}
187187
StructKind::Record => {
188-
let has_where_clause = write_where_clause(def_id, f)?;
189-
let fields = self.fields(f.db);
190-
f.write_char(if !has_where_clause { ' ' } else { '\n' })?;
191-
if fields.is_empty() {
192-
f.write_str("{}")?;
193-
} else {
194-
f.write_str("{\n")?;
195-
for field in self.fields(f.db) {
196-
f.write_str(" ")?;
197-
field.hir_fmt(f)?;
198-
f.write_str(",\n")?;
188+
if let Some(limit) = f.entity_limit {
189+
let has_where_clause = write_where_clause(def_id, f)?;
190+
let fields = self.fields(f.db);
191+
let count = fields.len().min(limit);
192+
f.write_char(if !has_where_clause { ' ' } else { '\n' })?;
193+
if count == 0 {
194+
if fields.is_empty() {
195+
f.write_str("{}")?;
196+
} else {
197+
f.write_str("{ /* … */ }")?;
198+
}
199+
} else {
200+
f.write_str(" {\n")?;
201+
for field in &fields[..count] {
202+
f.write_str(" ")?;
203+
field.hir_fmt(f)?;
204+
f.write_str(",\n")?;
205+
}
206+
207+
if fields.len() > count {
208+
f.write_str(" /* … */\n")?;
209+
}
210+
f.write_str("}")?;
199211
}
200-
f.write_str("}")?;
201212
}
202213
}
203214
StructKind::Unit => _ = write_where_clause(def_id, f)?,

crates/ide/src/hover.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ pub struct HoverConfig {
3333
pub keywords: bool,
3434
pub format: HoverDocFormat,
3535
pub max_trait_assoc_items_count: Option<usize>,
36+
pub max_struct_field_count: Option<usize>,
3637
}
3738

3839
#[derive(Copy, Clone, Debug, PartialEq, Eq)]

crates/ide/src/hover/render.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,9 @@ pub(super) fn definition(
410410
Definition::Trait(trait_) => {
411411
trait_.display_limited(db, config.max_trait_assoc_items_count).to_string()
412412
}
413+
Definition::Adt(Adt::Struct(struct_)) => {
414+
struct_.display_limited(db, config.max_struct_field_count).to_string()
415+
}
413416
_ => def.label(db),
414417
};
415418
let docs = def.docs(db, famous_defs);

crates/ide/src/static_index.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ impl StaticIndex<'_> {
167167
keywords: true,
168168
format: crate::HoverDocFormat::Markdown,
169169
max_trait_assoc_items_count: None,
170+
max_struct_field_count: None,
170171
};
171172
let tokens = tokens.filter(|token| {
172173
matches!(

0 commit comments

Comments
 (0)