ide_completion/render/
const_.rs1use hir::{AsAssocItem, HirDisplay};
4use ide_db::SymbolKind;
5use syntax::ToSmolStr;
6
7use crate::{item::CompletionItem, render::RenderContext};
8
9pub(crate) fn render_const(ctx: RenderContext<'_>, const_: hir::Const) -> Option<CompletionItem> {
10 let _p = tracing::info_span!("render_const").entered();
11 render(ctx, const_)
12}
13
14fn render(ctx: RenderContext<'_>, const_: hir::Const) -> Option<CompletionItem> {
15 let db = ctx.db();
16 let name = const_.name(db)?;
17 let (name, escaped_name) =
18 (name.as_str().to_smolstr(), name.display(db, ctx.completion.edition).to_smolstr());
19 let detail = const_.display(db, ctx.completion.display_target).to_string();
20
21 let mut item =
22 CompletionItem::new(SymbolKind::Const, ctx.source_range(), name, ctx.completion.edition);
23 item.set_documentation(ctx.docs(const_))
24 .set_deprecated(ctx.is_deprecated(const_) || ctx.is_deprecated_assoc_item(const_))
25 .detail(detail)
26 .set_relevance(ctx.completion_relevance());
27
28 if let Some(actm) = const_.as_assoc_item(db)
29 && let Some(trt) = actm.container_or_implemented_trait(db)
30 {
31 item.trait_name(trt.name(db).display_no_db(ctx.completion.edition).to_smolstr());
32 }
33 item.insert_text(escaped_name);
34
35 Some(item.build(ctx.db()))
36}