diff options
Diffstat (limited to 'src/tools/rust-analyzer/crates/ide-completion/src/render/type_alias.rs')
-rw-r--r-- | src/tools/rust-analyzer/crates/ide-completion/src/render/type_alias.rs | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/src/tools/rust-analyzer/crates/ide-completion/src/render/type_alias.rs b/src/tools/rust-analyzer/crates/ide-completion/src/render/type_alias.rs new file mode 100644 index 000000000..f1b23c76e --- /dev/null +++ b/src/tools/rust-analyzer/crates/ide-completion/src/render/type_alias.rs @@ -0,0 +1,57 @@ +//! Renderer for type aliases. + +use hir::{AsAssocItem, HirDisplay}; +use ide_db::SymbolKind; +use syntax::SmolStr; + +use crate::{item::CompletionItem, render::RenderContext}; + +pub(crate) fn render_type_alias( + ctx: RenderContext<'_>, + type_alias: hir::TypeAlias, +) -> Option<CompletionItem> { + let _p = profile::span("render_type_alias"); + render(ctx, type_alias, false) +} + +pub(crate) fn render_type_alias_with_eq( + ctx: RenderContext<'_>, + type_alias: hir::TypeAlias, +) -> Option<CompletionItem> { + let _p = profile::span("render_type_alias_with_eq"); + render(ctx, type_alias, true) +} + +fn render( + ctx: RenderContext<'_>, + type_alias: hir::TypeAlias, + with_eq: bool, +) -> Option<CompletionItem> { + let db = ctx.db(); + + let name = type_alias.name(db); + let (name, escaped_name) = if with_eq { + ( + SmolStr::from_iter([&name.to_smol_str(), " = "]), + SmolStr::from_iter([&name.escaped().to_smol_str(), " = "]), + ) + } else { + (name.to_smol_str(), name.escaped().to_smol_str()) + }; + let detail = type_alias.display(db).to_string(); + + let mut item = CompletionItem::new(SymbolKind::TypeAlias, ctx.source_range(), name.clone()); + item.set_documentation(ctx.docs(type_alias)) + .set_deprecated(ctx.is_deprecated(type_alias) || ctx.is_deprecated_assoc_item(type_alias)) + .detail(detail) + .set_relevance(ctx.completion_relevance()); + + if let Some(actm) = type_alias.as_assoc_item(db) { + if let Some(trt) = actm.containing_trait_or_trait_impl(db) { + item.trait_name(trt.name(db).to_smol_str()); + } + } + item.insert_text(escaped_name); + + Some(item.build()) +} |