From fc8a1cd8006b021541ff673ec7f37a0f4b7bef57 Mon Sep 17 00:00:00 2001 From: Igor Aleksanov Date: Sun, 1 Nov 2020 12:35:04 +0300 Subject: Introduce render module --- crates/completion/src/render.rs | 50 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 crates/completion/src/render.rs (limited to 'crates/completion/src/render.rs') diff --git a/crates/completion/src/render.rs b/crates/completion/src/render.rs new file mode 100644 index 000000000..66eb753b1 --- /dev/null +++ b/crates/completion/src/render.rs @@ -0,0 +1,50 @@ +//! `render` module provides utilities for rendering completion suggestions +//! into code pieces that will be presented to user. + +mod macro_; +mod function; +mod builder_ext; +mod enum_variant; + +use hir::HasAttrs; +use ide_db::RootDatabase; +use syntax::TextRange; + +use crate::{config::SnippetCap, CompletionContext}; + +pub(crate) use crate::render::{ + enum_variant::EnumVariantRender, function::FunctionRender, macro_::MacroRender, +}; + +#[derive(Debug)] +pub(crate) struct RenderContext<'a> { + completion: &'a CompletionContext<'a>, +} + +impl<'a> RenderContext<'a> { + pub fn new(completion: &'a CompletionContext<'a>) -> RenderContext<'a> { + RenderContext { completion } + } + + pub fn snippet_cap(&self) -> Option { + self.completion.config.snippet_cap.clone() + } + + pub fn db(&self) -> &'a RootDatabase { + &self.completion.db + } + + pub fn source_range(&self) -> TextRange { + self.completion.source_range() + } + + pub fn is_deprecated(&self, node: impl HasAttrs) -> bool { + node.attrs(self.db()).by_key("deprecated").exists() + } +} + +impl<'a> From<&'a CompletionContext<'a>> for RenderContext<'a> { + fn from(ctx: &'a CompletionContext<'a>) -> RenderContext<'a> { + RenderContext::new(ctx) + } +} -- cgit v1.2.3