diff options
author | Igor Aleksanov <[email protected]> | 2020-11-01 10:10:02 +0000 |
---|---|---|
committer | Igor Aleksanov <[email protected]> | 2020-11-03 07:16:35 +0000 |
commit | 15b16917fcd55068d9aba3d4b5d87763ec5deb69 (patch) | |
tree | bef2eebbcdfcd660d5eacb14a99c2ff0704c35ea /crates/completion/src/render | |
parent | 944ccf60758305a1b15224defe622cfca6939aaa (diff) |
Add TypeAliasRender
Diffstat (limited to 'crates/completion/src/render')
-rw-r--r-- | crates/completion/src/render/const_.rs | 3 | ||||
-rw-r--r-- | crates/completion/src/render/type_alias.rs | 46 |
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 @@ | |||
1 | use hir::HasSource; | ||
2 | use syntax::{ | ||
3 | ast::{NameOwner, TypeAlias}, | ||
4 | display::type_label, | ||
5 | }; | ||
6 | |||
7 | use crate::{ | ||
8 | item::{CompletionItem, CompletionItemKind, CompletionKind}, | ||
9 | render::RenderContext, | ||
10 | }; | ||
11 | |||
12 | #[derive(Debug)] | ||
13 | pub(crate) struct TypeAliasRender<'a> { | ||
14 | ctx: RenderContext<'a>, | ||
15 | type_alias: hir::TypeAlias, | ||
16 | ast_node: TypeAlias, | ||
17 | } | ||
18 | |||
19 | impl<'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 | } | ||