Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-completion/src/render/const_.rs')
| -rw-r--r-- | crates/ide-completion/src/render/const_.rs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/crates/ide-completion/src/render/const_.rs b/crates/ide-completion/src/render/const_.rs new file mode 100644 index 0000000000..89e6c82dde --- /dev/null +++ b/crates/ide-completion/src/render/const_.rs @@ -0,0 +1,32 @@ +//! Renderer for `const` fields. + +use hir::{AsAssocItem, HirDisplay}; +use ide_db::SymbolKind; + +use crate::{item::CompletionItem, render::RenderContext}; + +pub(crate) fn render_const(ctx: RenderContext<'_>, const_: hir::Const) -> Option<CompletionItem> { + let _p = profile::span("render_const"); + render(ctx, const_) +} + +fn render(ctx: RenderContext<'_>, const_: hir::Const) -> Option<CompletionItem> { + let db = ctx.db(); + let name = const_.name(db)?.to_smol_str(); + let detail = const_.display(db).to_string(); + + let mut item = CompletionItem::new(SymbolKind::Const, ctx.source_range(), name.clone()); + item.set_documentation(ctx.docs(const_)) + .set_deprecated(ctx.is_deprecated(const_) || ctx.is_deprecated_assoc_item(const_)) + .detail(detail) + .set_relevance(ctx.completion_relevance()); + + if let Some(actm) = const_.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(name); + } + } + + Some(item.build()) +} |