aboutsummaryrefslogtreecommitdiff
path: root/crates/completion/src/render
diff options
context:
space:
mode:
authorIgor Aleksanov <[email protected]>2020-11-01 10:10:02 +0000
committerIgor Aleksanov <[email protected]>2020-11-03 07:16:35 +0000
commit15b16917fcd55068d9aba3d4b5d87763ec5deb69 (patch)
treebef2eebbcdfcd660d5eacb14a99c2ff0704c35ea /crates/completion/src/render
parent944ccf60758305a1b15224defe622cfca6939aaa (diff)
Add TypeAliasRender
Diffstat (limited to 'crates/completion/src/render')
-rw-r--r--crates/completion/src/render/const_.rs3
-rw-r--r--crates/completion/src/render/type_alias.rs46
2 files changed, 47 insertions, 2 deletions
diff --git a/crates/completion/src/render/const_.rs b/crates/completion/src/render/const_.rs
index d88bfa07f..829eb574d 100644
--- a/crates/completion/src/render/const_.rs
+++ b/crates/completion/src/render/const_.rs
@@ -37,8 +37,7 @@ impl<'a> ConstRender<'a> {
37 } 37 }
38 38
39 fn name(&self) -> Option<String> { 39 fn name(&self) -> Option<String> {
40 let ast_node = self.const_.source(self.ctx.db()).value; 40 self.ast_node.name().map(|name| name.text().to_string())
41 ast_node.name().map(|name| name.text().to_string())
42 } 41 }
43 42
44 fn detail(&self) -> String { 43 fn detail(&self) -> String {
diff --git a/crates/completion/src/render/type_alias.rs b/crates/completion/src/render/type_alias.rs
new file mode 100644
index 000000000..378aa8c67
--- /dev/null
+++ b/crates/completion/src/render/type_alias.rs
@@ -0,0 +1,46 @@
1use hir::HasSource;
2use syntax::{
3 ast::{NameOwner, TypeAlias},
4 display::type_label,
5};
6
7use crate::{
8 item::{CompletionItem, CompletionItemKind, CompletionKind},
9 render::RenderContext,
10};
11
12#[derive(Debug)]
13pub(crate) struct TypeAliasRender<'a> {
14 ctx: RenderContext<'a>,
15 type_alias: hir::TypeAlias,
16 ast_node: TypeAlias,
17}
18
19impl<'a> TypeAliasRender<'a> {
20 pub(crate) fn new(ctx: RenderContext<'a>, type_alias: hir::TypeAlias) -> TypeAliasRender<'a> {
21 let ast_node = type_alias.source(ctx.db()).value;
22 TypeAliasRender { ctx, type_alias, ast_node }
23 }
24
25 pub(crate) fn render(self) -> Option<CompletionItem> {
26 let name = self.name()?;
27 let detail = self.detail();
28
29 let item = CompletionItem::new(CompletionKind::Reference, self.ctx.source_range(), name)
30 .kind(CompletionItemKind::TypeAlias)
31 .set_documentation(self.ctx.docs(self.type_alias))
32 .set_deprecated(self.ctx.is_deprecated(self.type_alias))
33 .detail(detail)
34 .build();
35
36 Some(item)
37 }
38
39 fn name(&self) -> Option<String> {
40 self.ast_node.name().map(|name| name.text().to_string())
41 }
42
43 fn detail(&self) -> String {
44 type_label(&self.ast_node)
45 }
46}