Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-completion/src/item.rs')
| -rw-r--r-- | crates/ide-completion/src/item.rs | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/crates/ide-completion/src/item.rs b/crates/ide-completion/src/item.rs index c2c4a663c6..e95cae9d67 100644 --- a/crates/ide-completion/src/item.rs +++ b/crates/ide-completion/src/item.rs @@ -4,6 +4,7 @@ use std::fmt; use hir::{Documentation, Mutability}; use ide_db::{imports::import_assets::LocatedImport, SnippetCap, SymbolKind}; +use itertools::Itertools; use smallvec::SmallVec; use stdx::{impl_from, never}; use syntax::{SmolStr, TextRange, TextSize}; @@ -353,7 +354,7 @@ impl CompletionItem { relevance: CompletionRelevance::default(), ref_match: None, imports_to_add: Default::default(), - doc_aliases: None, + doc_aliases: vec![], } } @@ -386,7 +387,7 @@ pub(crate) struct Builder { source_range: TextRange, imports_to_add: SmallVec<[LocatedImport; 1]>, trait_name: Option<SmolStr>, - doc_aliases: Option<SmolStr>, + doc_aliases: Vec<SmolStr>, label: SmolStr, insert_text: Option<String>, is_snippet: bool, @@ -408,7 +409,13 @@ impl Builder { local_name: hir::Name, resolution: hir::ScopeDef, ) -> Self { - render_path_resolution(RenderContext::new(ctx), path_ctx, local_name, resolution) + let doc_aliases = ctx.doc_aliases_in_scope(resolution); + render_path_resolution( + RenderContext::new(ctx).doc_aliases(doc_aliases), + path_ctx, + local_name, + resolution, + ) } pub(crate) fn build(self) -> CompletionItem { @@ -418,7 +425,8 @@ impl Builder { let mut lookup = self.lookup.unwrap_or_else(|| label.clone()); let insert_text = self.insert_text.unwrap_or_else(|| label.to_string()); - if let Some(doc_aliases) = self.doc_aliases { + if !self.doc_aliases.is_empty() { + let doc_aliases = self.doc_aliases.into_iter().join(", "); label = SmolStr::from(format!("{label} (alias {doc_aliases})")); lookup = SmolStr::from(format!("{lookup} {doc_aliases}")); } @@ -464,8 +472,8 @@ impl Builder { self.trait_name = Some(trait_name); self } - pub(crate) fn doc_aliases(&mut self, doc_aliases: SmolStr) -> &mut Builder { - self.doc_aliases = Some(doc_aliases); + pub(crate) fn doc_aliases(&mut self, doc_aliases: Vec<SmolStr>) -> &mut Builder { + self.doc_aliases = doc_aliases; self } pub(crate) fn insert_text(&mut self, insert_text: impl Into<String>) -> &mut Builder { |