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, + pub max_size: Option, 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) -> 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, } #[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 = "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 = "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,