diff options
author | Laurențiu Nicola <[email protected]> | 2019-02-12 08:33:23 +0000 |
---|---|---|
committer | Laurențiu Nicola <[email protected]> | 2019-02-12 10:51:01 +0000 |
commit | 7e8527f74831b37c5757ea6b25e40bcbb61bb6d4 (patch) | |
tree | e7bddef556f430d31903a54fced0df760673a0e8 /crates/ra_ide_api/src/completion/completion_item.rs | |
parent | 37148000dcd43e5ccba4737a3e379f1ae6861893 (diff) |
Implement completion for associated items
Diffstat (limited to 'crates/ra_ide_api/src/completion/completion_item.rs')
-rw-r--r-- | crates/ra_ide_api/src/completion/completion_item.rs | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/crates/ra_ide_api/src/completion/completion_item.rs b/crates/ra_ide_api/src/completion/completion_item.rs index 22ff08a23..6003e1d89 100644 --- a/crates/ra_ide_api/src/completion/completion_item.rs +++ b/crates/ra_ide_api/src/completion/completion_item.rs | |||
@@ -8,6 +8,8 @@ use test_utils::tested_by; | |||
8 | use crate::completion::{ | 8 | use crate::completion::{ |
9 | completion_context::CompletionContext, | 9 | completion_context::CompletionContext, |
10 | function_label, | 10 | function_label, |
11 | const_label, | ||
12 | type_label | ||
11 | }; | 13 | }; |
12 | 14 | ||
13 | /// `CompletionItem` describes a single completion variant in the editor pop-up. | 15 | /// `CompletionItem` describes a single completion variant in the editor pop-up. |
@@ -267,6 +269,28 @@ impl Builder { | |||
267 | self.kind = Some(CompletionItemKind::Function); | 269 | self.kind = Some(CompletionItemKind::Function); |
268 | self | 270 | self |
269 | } | 271 | } |
272 | |||
273 | pub(super) fn from_const(mut self, ctx: &CompletionContext, ct: hir::Const) -> Builder { | ||
274 | if let Some(docs) = ct.docs(ctx.db) { | ||
275 | self.documentation = Some(docs); | ||
276 | } | ||
277 | |||
278 | self.detail = Some(const_item_label(ctx, ct)); | ||
279 | self.kind = Some(CompletionItemKind::Const); | ||
280 | |||
281 | self | ||
282 | } | ||
283 | |||
284 | pub(super) fn from_type(mut self, ctx: &CompletionContext, ty: hir::Type) -> Builder { | ||
285 | if let Some(docs) = ty.docs(ctx.db) { | ||
286 | self.documentation = Some(docs); | ||
287 | } | ||
288 | |||
289 | self.detail = Some(type_item_label(ctx, ty)); | ||
290 | self.kind = Some(CompletionItemKind::TypeAlias); | ||
291 | |||
292 | self | ||
293 | } | ||
270 | } | 294 | } |
271 | 295 | ||
272 | impl<'a> Into<CompletionItem> for Builder { | 296 | impl<'a> Into<CompletionItem> for Builder { |
@@ -305,6 +329,16 @@ fn function_item_label(ctx: &CompletionContext, function: hir::Function) -> Opti | |||
305 | function_label(&node) | 329 | function_label(&node) |
306 | } | 330 | } |
307 | 331 | ||
332 | fn const_item_label(ctx: &CompletionContext, ct: hir::Const) -> String { | ||
333 | let node = ct.source(ctx.db).1; | ||
334 | const_label(&node) | ||
335 | } | ||
336 | |||
337 | fn type_item_label(ctx: &CompletionContext, ty: hir::Type) -> String { | ||
338 | let node = ty.source(ctx.db).1; | ||
339 | type_label(&node) | ||
340 | } | ||
341 | |||
308 | #[cfg(test)] | 342 | #[cfg(test)] |
309 | pub(crate) fn do_completion(code: &str, kind: CompletionKind) -> Vec<CompletionItem> { | 343 | pub(crate) fn do_completion(code: &str, kind: CompletionKind) -> Vec<CompletionItem> { |
310 | use crate::mock_analysis::{single_file_with_position, analysis_and_position}; | 344 | use crate::mock_analysis::{single_file_with_position, analysis_and_position}; |