1 //! Renderer for type aliases.
3 use hir::{AsAssocItem, HasSource};
4 use ide_db::SymbolKind;
5 use syntax::{ast::HasName, display::type_label};
7 use crate::{item::CompletionItem, render::RenderContext};
9 pub(crate) fn render_type_alias(
10 ctx: RenderContext<'_>,
11 type_alias: hir::TypeAlias,
12 ) -> Option<CompletionItem> {
13 let _p = profile::span("render_type_alias");
14 render(ctx, type_alias, false)
17 pub(crate) fn render_type_alias_with_eq(
18 ctx: RenderContext<'_>,
19 type_alias: hir::TypeAlias,
20 ) -> Option<CompletionItem> {
21 let _p = profile::span("render_type_alias_with_eq");
22 render(ctx, type_alias, true)
26 ctx: RenderContext<'_>,
27 type_alias: hir::TypeAlias,
29 ) -> Option<CompletionItem> {
32 // FIXME: This parses the file!
33 let ast_node = type_alias.source(db)?.value;
34 let name = ast_node.name().map(|name| {
36 format!("{} = ", name.text())
38 name.text().to_string()
41 let detail = type_label(&ast_node);
43 let mut item = CompletionItem::new(SymbolKind::TypeAlias, ctx.source_range(), name.clone());
44 item.set_documentation(ctx.docs(type_alias))
45 .set_deprecated(ctx.is_deprecated(type_alias) || ctx.is_deprecated_assoc_item(type_alias))
48 if let Some(actm) = type_alias.as_assoc_item(db) {
49 if let Some(trt) = actm.containing_trait_or_trait_impl(db) {
50 item.trait_name(trt.name(db).to_smol_str());
51 item.insert_text(name);