about summary refs log tree commit diff
diff options
context:
space:
mode:
-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 fe51ec3f821..f7e396de2d6 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 010c3537574..0e221a2149a 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 1b6ff8bad53..8de885f4994 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 4a7350feb38..4b3fdaff0b3 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 563e78253a8..c955f46bc45 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 e845ef66894..2df4ca5810b 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 2929a7522e5..8d5f5e1bf67 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 16e1a2f5449..230a0385cdb 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 da7654b0f64..9f3ab451329 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 3a1df5a2f90..a4f54ae4f45 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,