aboutsummaryrefslogtreecommitdiff
path: root/crates/completion/src/render.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/completion/src/render.rs')
-rw-r--r--crates/completion/src/render.rs50
1 files changed, 50 insertions, 0 deletions
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 @@
1//! `render` module provides utilities for rendering completion suggestions
2//! into code pieces that will be presented to user.
3
4mod macro_;
5mod function;
6mod builder_ext;
7mod enum_variant;
8
9use hir::HasAttrs;
10use ide_db::RootDatabase;
11use syntax::TextRange;
12
13use crate::{config::SnippetCap, CompletionContext};
14
15pub(crate) use crate::render::{
16 enum_variant::EnumVariantRender, function::FunctionRender, macro_::MacroRender,
17};
18
19#[derive(Debug)]
20pub(crate) struct RenderContext<'a> {
21 completion: &'a CompletionContext<'a>,
22}
23
24impl<'a> RenderContext<'a> {
25 pub fn new(completion: &'a CompletionContext<'a>) -> RenderContext<'a> {
26 RenderContext { completion }
27 }
28
29 pub fn snippet_cap(&self) -> Option<SnippetCap> {
30 self.completion.config.snippet_cap.clone()
31 }
32
33 pub fn db(&self) -> &'a RootDatabase {
34 &self.completion.db
35 }
36
37 pub fn source_range(&self) -> TextRange {
38 self.completion.source_range()
39 }
40
41 pub fn is_deprecated(&self, node: impl HasAttrs) -> bool {
42 node.attrs(self.db()).by_key("deprecated").exists()
43 }
44}
45
46impl<'a> From<&'a CompletionContext<'a>> for RenderContext<'a> {
47 fn from(ctx: &'a CompletionContext<'a>) -> RenderContext<'a> {
48 RenderContext::new(ctx)
49 }
50}