Skip to content

Commit 675bd36

Browse files
committed
add config item for hover display
1 parent 69eadf9 commit 675bd36

File tree

10 files changed

+35
-8
lines changed

10 files changed

+35
-8
lines changed

crates/hir-ty/src/display.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ pub struct HirFormatter<'a> {
6262
fmt: &'a mut dyn HirWrite,
6363
buf: String,
6464
curr_size: usize,
65-
pub(crate) max_size: Option<usize>,
65+
pub max_size: Option<usize>,
6666
omit_verbose_types: bool,
6767
closure_style: ClosureStyle,
6868
display_target: DisplayTarget,

crates/hir/src/display.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -593,12 +593,14 @@ impl HirDisplay for Trait {
593593
write_generic_params(def_id, f)?;
594594
write_where_clause(def_id, f)?;
595595

596+
let mut display_size = 0;
597+
let max_display_size = f.max_size.unwrap_or(7);
596598
let assoc_items = self.items(f.db);
597599
if assoc_items.is_empty() {
598600
f.write_str(" {}")?;
599601
} else {
600602
f.write_str(" {\n")?;
601-
for item in assoc_items {
603+
for (index, item) in assoc_items.iter().enumerate() {
602604
f.write_str(" ")?;
603605
match item {
604606
AssocItem::Function(func) => {
@@ -612,6 +614,11 @@ impl HirDisplay for Trait {
612614
}
613615
};
614616
f.write_str(",\n")?;
617+
display_size += 1;
618+
if display_size == max_display_size && index != assoc_items.len() - 1{
619+
f.write_str(" ...\n")?;
620+
break;
621+
}
615622
}
616623
f.write_str("}")?;
617624
}

crates/ide-db/src/defs.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ impl Definition {
213213
})
214214
}
215215

216-
pub fn label(&self, db: &RootDatabase) -> Option<String> {
216+
pub fn label(&self, db: &RootDatabase, max_size: Option<usize>) -> Option<String> {
217217
let label = match *self {
218218
Definition::Macro(it) => it.display(db).to_string(),
219219
Definition::Field(it) => it.display(db).to_string(),
@@ -224,7 +224,7 @@ impl Definition {
224224
Definition::Variant(it) => it.display(db).to_string(),
225225
Definition::Const(it) => it.display(db).to_string(),
226226
Definition::Static(it) => it.display(db).to_string(),
227-
Definition::Trait(it) => it.display(db).to_string(),
227+
Definition::Trait(it) => it.display_truncated(db, max_size).to_string(),
228228
Definition::TraitAlias(it) => it.display(db).to_string(),
229229
Definition::TypeAlias(it) => it.display(db).to_string(),
230230
Definition::BuiltinType(it) => it.name().display(db).to_string(),
@@ -241,7 +241,7 @@ impl Definition {
241241
}
242242
}
243243
Definition::SelfType(impl_def) => {
244-
impl_def.self_ty(db).as_adt().and_then(|adt| Definition::Adt(adt).label(db))?
244+
impl_def.self_ty(db).as_adt().and_then(|adt| Definition::Adt(adt).label(db, max_size))?
245245
}
246246
Definition::GenericParam(it) => it.display(db).to_string(),
247247
Definition::Label(it) => it.name(db).display(db).to_string(),

crates/ide/src/hover.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ pub struct HoverConfig {
3232
pub documentation: bool,
3333
pub keywords: bool,
3434
pub format: HoverDocFormat,
35+
pub trait_item_display_on_hover: Option<usize>,
3536
}
3637

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

crates/ide/src/hover/render.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,7 @@ pub(super) fn definition(
398398
config: &HoverConfig,
399399
) -> Option<Markup> {
400400
let mod_path = definition_mod_path(db, &def);
401-
let label = def.label(db)?;
401+
let label = def.label(db, config.trait_item_display_on_hover)?;
402402
let docs = def.docs(db, famous_defs);
403403
let value = match def {
404404
Definition::Variant(it) => {

crates/ide/src/hover/tests.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ const HOVER_BASE_CONFIG: HoverConfig = HoverConfig {
1717
documentation: true,
1818
format: HoverDocFormat::Markdown,
1919
keywords: true,
20+
trait_item_display_on_hover: Some(7),
2021
};
2122

2223
fn check_hover_no_result(ra_fixture: &str) {

crates/ide/src/static_index.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ impl StaticIndex<'_> {
166166
documentation: true,
167167
keywords: true,
168168
format: crate::HoverDocFormat::Markdown,
169+
trait_item_display_on_hover: Some(7)
169170
};
170171
let tokens = tokens.filter(|token| {
171172
matches!(
@@ -196,7 +197,7 @@ impl StaticIndex<'_> {
196197
enclosing_moniker: current_crate
197198
.zip(def.enclosing_definition(self.db))
198199
.and_then(|(cc, enclosing_def)| def_to_moniker(self.db, enclosing_def, cc)),
199-
signature: def.label(self.db),
200+
signature: def.label(self.db, hover_config.trait_item_display_on_hover),
200201
kind: def_to_kind(self.db, def),
201202
});
202203
self.def_map.insert(def, it);

crates/rust-analyzer/src/config.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -511,7 +511,6 @@ config_data! {
511511
/// Exclude tests from find-all-references.
512512
references_excludeTests: bool = "false",
513513

514-
515514
/// Command to be executed instead of 'cargo' for runnables.
516515
runnables_command: Option<String> = "null",
517516
/// Additional arguments to be passed to cargo for runnables such as
@@ -591,6 +590,9 @@ config_data! {
591590
/// Show documentation.
592591
signatureInfo_documentation_enable: bool = "true",
593592

593+
/// How many trait item display on hover.
594+
trait_item_display_on_hover: Option<usize> = "7",
595+
594596
/// Whether to insert closing angle brackets when typing an opening angle bracket of a generic argument list.
595597
typing_autoClosingAngleBrackets_enable: bool = "false",
596598

@@ -1683,6 +1685,7 @@ impl Config {
16831685
}
16841686
},
16851687
keywords: self.data.hover_documentation_keywords_enable,
1688+
trait_item_display_on_hover: self.data.trait_item_display_on_hover,
16861689
}
16871690
}
16881691

docs/user/generated_config.adoc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -927,6 +927,11 @@ Show full signature of the callable. Only shows parameters if disabled.
927927
--
928928
Show documentation.
929929
--
930+
[[rust-analyzer.trait.item.display.on.hover]]rust-analyzer.trait.item.display.on.hover (default: `7`)::
931+
+
932+
--
933+
How many trait item display on hover.
934+
--
930935
[[rust-analyzer.typing.autoClosingAngleBrackets.enable]]rust-analyzer.typing.autoClosingAngleBrackets.enable (default: `false`)::
931936
+
932937
--

editors/code/package.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1648,6 +1648,15 @@
16481648
"default": true,
16491649
"type": "boolean"
16501650
},
1651+
"rust-analyzer.trait.item.display.on.hover": {
1652+
"markdownDescription": "How many trait item display on hover.",
1653+
"default": 7,
1654+
"type": [
1655+
"null",
1656+
"integer"
1657+
],
1658+
"minimum": 0
1659+
},
16511660
"rust-analyzer.typing.autoClosingAngleBrackets.enable": {
16521661
"markdownDescription": "Whether to insert closing angle brackets when typing an opening angle bracket of a generic argument list.",
16531662
"default": false,

0 commit comments

Comments
 (0)