• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //! Renderer for `const` fields.
2 
3 use hir::{AsAssocItem, HirDisplay};
4 use ide_db::SymbolKind;
5 
6 use crate::{item::CompletionItem, render::RenderContext};
7 
render_const(ctx: RenderContext<'_>, const_: hir::Const) -> Option<CompletionItem>8 pub(crate) fn render_const(ctx: RenderContext<'_>, const_: hir::Const) -> Option<CompletionItem> {
9     let _p = profile::span("render_const");
10     render(ctx, const_)
11 }
12 
render(ctx: RenderContext<'_>, const_: hir::Const) -> Option<CompletionItem>13 fn render(ctx: RenderContext<'_>, const_: hir::Const) -> Option<CompletionItem> {
14     let db = ctx.db();
15     let name = const_.name(db)?;
16     let (name, escaped_name) = (name.unescaped().to_smol_str(), name.to_smol_str());
17     let detail = const_.display(db).to_string();
18 
19     let mut item = CompletionItem::new(SymbolKind::Const, ctx.source_range(), name);
20     item.set_documentation(ctx.docs(const_))
21         .set_deprecated(ctx.is_deprecated(const_) || ctx.is_deprecated_assoc_item(const_))
22         .detail(detail)
23         .set_relevance(ctx.completion_relevance());
24 
25     if let Some(actm) = const_.as_assoc_item(db) {
26         if let Some(trt) = actm.containing_trait_or_trait_impl(db) {
27             item.trait_name(trt.name(db).to_smol_str());
28         }
29     }
30     item.insert_text(escaped_name);
31 
32     Some(item.build(ctx.db()))
33 }
34