Unnamed repository; edit this file 'description' to name the repository.
add config item for hover display
Young-Flash 2024-02-21
parent 00358b1 · commit 35ec595
-rw-r--r--crates/hir-ty/src/display.rs2
-rw-r--r--crates/hir/src/display.rs9
-rw-r--r--crates/ide-db/src/defs.rs4
-rw-r--r--crates/ide/src/hover.rs1
-rw-r--r--crates/ide/src/hover/render.rs2
-rw-r--r--crates/ide/src/hover/tests.rs1
-rw-r--r--crates/ide/src/static_index.rs3
-rw-r--r--crates/rust-analyzer/src/config.rs5
-rw-r--r--docs/user/generated_config.adoc5
-rw-r--r--editors/code/package.json9
10 files changed, 34 insertions, 7 deletions
diff --git a/crates/hir-ty/src/display.rs b/crates/hir-ty/src/display.rs
index fe51ec3f82..f7e396de2d 100644
--- a/crates/hir-ty/src/display.rs
+++ b/crates/hir-ty/src/display.rs
@@ -62,7 +62,7 @@ pub struct HirFormatter<'a> {
fmt: &'a mut dyn HirWrite,
buf: String,
curr_size: usize,
- pub(crate) max_size: Option<usize>,
+ pub max_size: Option<usize>,
omit_verbose_types: bool,
closure_style: ClosureStyle,
display_target: DisplayTarget,
diff --git a/crates/hir/src/display.rs b/crates/hir/src/display.rs
index 010c353757..0e221a2149 100644
--- a/crates/hir/src/display.rs
+++ b/crates/hir/src/display.rs
@@ -593,12 +593,14 @@ impl HirDisplay for Trait {
write_generic_params(def_id, f)?;
write_where_clause(def_id, f)?;
+ let mut display_size = 0;
+ let max_display_size = f.max_size.unwrap_or(7);
let assoc_items = self.items(f.db);
if assoc_items.is_empty() {
f.write_str(" {}")?;
} else {
f.write_str(" {\n")?;
- for item in assoc_items {
+ for (index, item) in assoc_items.iter().enumerate() {
f.write_str(" ")?;
match item {
AssocItem::Function(func) => {
@@ -612,6 +614,11 @@ impl HirDisplay for Trait {
}
};
f.write_str(",\n")?;
+ display_size += 1;
+ if display_size == max_display_size && index != assoc_items.len() - 1{
+ f.write_str(" ...\n")?;
+ break;
+ }
}
f.write_str("}")?;
}
diff --git a/crates/ide-db/src/defs.rs b/crates/ide-db/src/defs.rs
index 1b6ff8bad5..8de885f499 100644
--- a/crates/ide-db/src/defs.rs
+++ b/crates/ide-db/src/defs.rs
@@ -213,7 +213,7 @@ impl Definition {
})
}
- pub fn label(&self, db: &RootDatabase) -> String {
+ pub fn label(&self, db: &RootDatabase, max_size: Option<usize>) -> String {
match *self {
Definition::Macro(it) => it.display(db).to_string(),
Definition::Field(it) => it.display(db).to_string(),
@@ -224,7 +224,7 @@ impl Definition {
Definition::Variant(it) => it.display(db).to_string(),
Definition::Const(it) => it.display(db).to_string(),
Definition::Static(it) => it.display(db).to_string(),
- Definition::Trait(it) => it.display(db).to_string(),
+ Definition::Trait(it) => it.display_truncated(db, max_size).to_string(),
Definition::TraitAlias(it) => it.display(db).to_string(),
Definition::TypeAlias(it) => it.display(db).to_string(),
Definition::BuiltinType(it) => it.name().display(db).to_string(),
diff --git a/crates/ide/src/hover.rs b/crates/ide/src/hover.rs
index 4a7350feb3..4b3fdaff0b 100644
--- a/crates/ide/src/hover.rs
+++ b/crates/ide/src/hover.rs
@@ -32,6 +32,7 @@ pub struct HoverConfig {
pub documentation: bool,
pub keywords: bool,
pub format: HoverDocFormat,
+ pub trait_item_display_on_hover: Option<usize>,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
diff --git a/crates/ide/src/hover/render.rs b/crates/ide/src/hover/render.rs
index 563e78253a..c955f46bc4 100644
--- a/crates/ide/src/hover/render.rs
+++ b/crates/ide/src/hover/render.rs
@@ -406,7 +406,7 @@ pub(super) fn definition(
config: &HoverConfig,
) -> Markup {
let mod_path = definition_mod_path(db, &def);
- let label = def.label(db);
+ let label = def.label(db, config.trait_item_display_on_hover);
let docs = def.docs(db, famous_defs);
let value = (|| match def {
Definition::Variant(it) => {
diff --git a/crates/ide/src/hover/tests.rs b/crates/ide/src/hover/tests.rs
index e845ef6689..2df4ca5810 100644
--- a/crates/ide/src/hover/tests.rs
+++ b/crates/ide/src/hover/tests.rs
@@ -17,6 +17,7 @@ const HOVER_BASE_CONFIG: HoverConfig = HoverConfig {
documentation: true,
format: HoverDocFormat::Markdown,
keywords: true,
+ trait_item_display_on_hover: Some(7),
};
fn check_hover_no_result(ra_fixture: &str) {
diff --git a/crates/ide/src/static_index.rs b/crates/ide/src/static_index.rs
index 2929a7522e..8d5f5e1bf6 100644
--- a/crates/ide/src/static_index.rs
+++ b/crates/ide/src/static_index.rs
@@ -166,6 +166,7 @@ impl StaticIndex<'_> {
documentation: true,
keywords: true,
format: crate::HoverDocFormat::Markdown,
+ trait_item_display_on_hover: Some(7)
};
let tokens = tokens.filter(|token| {
matches!(
@@ -196,7 +197,7 @@ impl StaticIndex<'_> {
enclosing_moniker: current_crate
.zip(def.enclosing_definition(self.db))
.and_then(|(cc, enclosing_def)| def_to_moniker(self.db, enclosing_def, cc)),
- signature: Some(def.label(self.db)),
+ signature: Some(def.label(self.db, hover_config.trait_item_display_on_hover)),
kind: def_to_kind(self.db, def),
});
self.def_map.insert(def, it);
diff --git a/crates/rust-analyzer/src/config.rs b/crates/rust-analyzer/src/config.rs
index 16e1a2f544..230a0385cd 100644
--- a/crates/rust-analyzer/src/config.rs
+++ b/crates/rust-analyzer/src/config.rs
@@ -511,7 +511,6 @@ config_data! {
/// Exclude tests from find-all-references.
references_excludeTests: bool = "false",
-
/// Command to be executed instead of 'cargo' for runnables.
runnables_command: Option<String> = "null",
/// Additional arguments to be passed to cargo for runnables such as
@@ -591,6 +590,9 @@ config_data! {
/// Show documentation.
signatureInfo_documentation_enable: bool = "true",
+ /// How many trait item display on hover.
+ trait_item_display_on_hover: Option<usize> = "7",
+
/// Whether to insert closing angle brackets when typing an opening angle bracket of a generic argument list.
typing_autoClosingAngleBrackets_enable: bool = "false",
@@ -1683,6 +1685,7 @@ impl Config {
}
},
keywords: self.data.hover_documentation_keywords_enable,
+ trait_item_display_on_hover: self.data.trait_item_display_on_hover,
}
}
diff --git a/docs/user/generated_config.adoc b/docs/user/generated_config.adoc
index da7654b0f6..9f3ab45132 100644
--- a/docs/user/generated_config.adoc
+++ b/docs/user/generated_config.adoc
@@ -927,6 +927,11 @@ Show full signature of the callable. Only shows parameters if disabled.
--
Show documentation.
--
+[[rust-analyzer.trait.item.display.on.hover]]rust-analyzer.trait.item.display.on.hover (default: `7`)::
++
+--
+How many trait item display on hover.
+--
[[rust-analyzer.typing.autoClosingAngleBrackets.enable]]rust-analyzer.typing.autoClosingAngleBrackets.enable (default: `false`)::
+
--
diff --git a/editors/code/package.json b/editors/code/package.json
index 3a1df5a2f9..a4f54ae4f4 100644
--- a/editors/code/package.json
+++ b/editors/code/package.json
@@ -1648,6 +1648,15 @@
"default": true,
"type": "boolean"
},
+ "rust-analyzer.trait.item.display.on.hover": {
+ "markdownDescription": "How many trait item display on hover.",
+ "default": 7,
+ "type": [
+ "null",
+ "integer"
+ ],
+ "minimum": 0
+ },
"rust-analyzer.typing.autoClosingAngleBrackets.enable": {
"markdownDescription": "Whether to insert closing angle brackets when typing an opening angle bracket of a generic argument list.",
"default": false,