1 //! Renderer for `const` fields.
4 use ide_db::SymbolKind;
6 ast::{Const, NameOwner},
11 item::{CompletionItem, CompletionKind},
12 render::RenderContext,
15 pub(crate) fn render_const<'a>(
16 ctx: RenderContext<'a>,
18 ) -> Option<CompletionItem> {
19 ConstRender::new(ctx, const_)?.render()
23 struct ConstRender<'a> {
24 ctx: RenderContext<'a>,
29 impl<'a> ConstRender<'a> {
30 fn new(ctx: RenderContext<'a>, const_: hir::Const) -> Option<ConstRender<'a>> {
31 let ast_node = const_.source(ctx.db())?.value;
32 Some(ConstRender { ctx, const_, ast_node })
35 fn render(self) -> Option<CompletionItem> {
36 let name = self.name()?;
37 let detail = self.detail();
40 CompletionItem::new(CompletionKind::Reference, self.ctx.source_range(), name);
41 item.kind(SymbolKind::Const)
42 .set_documentation(self.ctx.docs(self.const_))
44 self.ctx.is_deprecated(self.const_)
45 || self.ctx.is_deprecated_assoc_item(self.const_),
52 fn name(&self) -> Option<String> {
53 self.ast_node.name().map(|name| name.text().to_string())
56 fn detail(&self) -> String {
57 const_label(&self.ast_node)