diff options
Diffstat (limited to 'crates/completion/src/render.rs')
-rw-r--r-- | crates/completion/src/render.rs | 50 |
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 | |||
4 | mod macro_; | ||
5 | mod function; | ||
6 | mod builder_ext; | ||
7 | mod enum_variant; | ||
8 | |||
9 | use hir::HasAttrs; | ||
10 | use ide_db::RootDatabase; | ||
11 | use syntax::TextRange; | ||
12 | |||
13 | use crate::{config::SnippetCap, CompletionContext}; | ||
14 | |||
15 | pub(crate) use crate::render::{ | ||
16 | enum_variant::EnumVariantRender, function::FunctionRender, macro_::MacroRender, | ||
17 | }; | ||
18 | |||
19 | #[derive(Debug)] | ||
20 | pub(crate) struct RenderContext<'a> { | ||
21 | completion: &'a CompletionContext<'a>, | ||
22 | } | ||
23 | |||
24 | impl<'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 | |||
46 | impl<'a> From<&'a CompletionContext<'a>> for RenderContext<'a> { | ||
47 | fn from(ctx: &'a CompletionContext<'a>) -> RenderContext<'a> { | ||
48 | RenderContext::new(ctx) | ||
49 | } | ||
50 | } | ||