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

Commit 2e87f31

Browse files
committed
add HoverDisplayConfig
1 parent 35ec595 commit 2e87f31

File tree

9 files changed

+29
-18
lines changed

9 files changed

+29
-18
lines changed

crates/hir/src/display.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ use hir_ty::{
1717
};
1818

1919
use crate::{
20-
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
20+
Adt, AsAssocItem, AssocItem, AssocItemContainer, Const, ConstParam, Enum, ExternCrateDecl,
21+
Field, Function, GenericParam, HasCrate, HasVisibility, LifetimeParam, Macro, Module,
22+
SelfParam, Static, Struct, Trait, TraitAlias, TupleField, TyBuilder, Type, TypeAlias,
23+
TypeOrConstParam, TypeParam, Union, Variant,
2124
};
2225

2326
impl HirDisplay for Function {
@@ -593,9 +596,9 @@ impl HirDisplay for Trait {
593596
write_generic_params(def_id, f)?;
594597
write_where_clause(def_id, f)?;
595598

596-
let mut display_size = 0;
597-
let max_display_size = f.max_size.unwrap_or(7);
598599
let assoc_items = self.items(f.db);
600+
let assoc_items_size = assoc_items.len();
601+
let max_display_size = f.max_size.unwrap_or(assoc_items_size);
599602
if assoc_items.is_empty() {
600603
f.write_str(" {}")?;
601604
} else {
@@ -614,8 +617,7 @@ impl HirDisplay for Trait {
614617
}
615618
};
616619
f.write_str(",\n")?;
617-
display_size += 1;
618-
if display_size == max_display_size && index != assoc_items.len() - 1{
620+
if index + 1 == max_display_size && index + 1 != assoc_items_size {
619621
f.write_str(" ...\n")?;
620622
break;
621623
}

crates/ide-db/src/defs.rs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@ use crate::documentation::{Documentation, HasDocs};
2424
use crate::famous_defs::FamousDefs;
2525
use crate::RootDatabase;
2626

27+
#[derive(Default)]
28+
pub struct HoverDisplayConfig {
29+
pub trait_item_display_num: Option<usize>,
30+
// todo: add config for struct & enum
31+
}
32+
2733
// FIXME: a more precise name would probably be `Symbol`?
2834
#[derive(Debug, PartialEq, Eq, Copy, Clone, Hash)]
2935
pub enum Definition {
@@ -213,7 +219,7 @@ impl Definition {
213219
})
214220
}
215221

216-
pub fn label(&self, db: &RootDatabase, max_size: Option<usize>) -> String {
222+
pub fn label(&self, db: &RootDatabase, hover_display_config: HoverDisplayConfig) -> String {
217223
match *self {
218224
Definition::Macro(it) => it.display(db).to_string(),
219225
Definition::Field(it) => it.display(db).to_string(),
@@ -224,7 +230,9 @@ impl Definition {
224230
Definition::Variant(it) => it.display(db).to_string(),
225231
Definition::Const(it) => it.display(db).to_string(),
226232
Definition::Static(it) => it.display(db).to_string(),
227-
Definition::Trait(it) => it.display_truncated(db, max_size).to_string(),
233+
Definition::Trait(it) => {
234+
it.display_truncated(db, hover_display_config.trait_item_display_num).to_string()
235+
}
228236
Definition::TraitAlias(it) => it.display(db).to_string(),
229237
Definition::TypeAlias(it) => it.display(db).to_string(),
230238
Definition::BuiltinType(it) => it.name().display(db).to_string(),

crates/ide/src/hover.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +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>,
35+
pub trait_item_display_num: Option<usize>,
3636
}
3737

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

crates/ide/src/hover/render.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use hir::{
88
};
99
use ide_db::{
1010
base_db::SourceDatabase,
11-
defs::Definition,
11+
defs::{Definition, HoverDisplayConfig},
1212
documentation::HasDocs,
1313
famous_defs::FamousDefs,
1414
generated::lints::{CLIPPY_LINTS, DEFAULT_LINTS, FEATURES},
@@ -406,7 +406,8 @@ pub(super) fn definition(
406406
config: &HoverConfig,
407407
) -> Markup {
408408
let mod_path = definition_mod_path(db, &def);
409-
let label = def.label(db, config.trait_item_display_on_hover);
409+
let hover_config = HoverDisplayConfig { trait_item_display_num: config.trait_item_display_num };
410+
let label = def.label(db, hover_config);
410411
let docs = def.docs(db, famous_defs);
411412
let value = (|| match def {
412413
Definition::Variant(it) => {

crates/ide/src/hover/tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +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),
20+
trait_item_display_num: Some(7),
2121
};
2222

2323
fn check_hover_no_result(ra_fixture: &str) {

crates/ide/src/static_index.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
use hir::{db::HirDatabase, Crate, HirFileIdExt, Module, Semantics};
55
use ide_db::{
66
base_db::{FileId, FileRange, SourceDatabaseExt},
7-
defs::Definition,
7+
defs::{Definition, HoverDisplayConfig},
88
documentation::Documentation,
99
famous_defs::FamousDefs,
1010
helpers::get_definition,
@@ -166,7 +166,7 @@ impl StaticIndex<'_> {
166166
documentation: true,
167167
keywords: true,
168168
format: crate::HoverDocFormat::Markdown,
169-
trait_item_display_on_hover: Some(7)
169+
trait_item_display_num: None,
170170
};
171171
let tokens = tokens.filter(|token| {
172172
matches!(
@@ -197,7 +197,7 @@ impl StaticIndex<'_> {
197197
enclosing_moniker: current_crate
198198
.zip(def.enclosing_definition(self.db))
199199
.and_then(|(cc, enclosing_def)| def_to_moniker(self.db, enclosing_def, cc)),
200-
signature: Some(def.label(self.db, hover_config.trait_item_display_on_hover)),
200+
signature: Some(def.label(self.db, HoverDisplayConfig::default())),
201201
kind: def_to_kind(self.db, def),
202202
});
203203
self.def_map.insert(def, it);

crates/rust-analyzer/src/config.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -591,7 +591,7 @@ config_data! {
591591
signatureInfo_documentation_enable: bool = "true",
592592

593593
/// How many trait item display on hover.
594-
trait_item_display_on_hover: Option<usize> = "7",
594+
traitItemDisplayNum: Option<usize> = "7",
595595

596596
/// Whether to insert closing angle brackets when typing an opening angle bracket of a generic argument list.
597597
typing_autoClosingAngleBrackets_enable: bool = "false",
@@ -1685,7 +1685,7 @@ impl Config {
16851685
}
16861686
},
16871687
keywords: self.data.hover_documentation_keywords_enable,
1688-
trait_item_display_on_hover: self.data.trait_item_display_on_hover,
1688+
trait_item_display_num: self.data.traitItemDisplayNum,
16891689
}
16901690
}
16911691

docs/user/generated_config.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -927,7 +927,7 @@ 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`)::
930+
[[rust-analyzer.traitItemDisplayNum]]rust-analyzer.traitItemDisplayNum (default: `7`)::
931931
+
932932
--
933933
How many trait item display on hover.

editors/code/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1648,7 +1648,7 @@
16481648
"default": true,
16491649
"type": "boolean"
16501650
},
1651-
"rust-analyzer.trait.item.display.on.hover": {
1651+
"rust-analyzer.traitItemDisplayNum": {
16521652
"markdownDescription": "How many trait item display on hover.",
16531653
"default": 7,
16541654
"type": [

0 commit comments

Comments
 (0)