aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide_api/src/completion/completion_item.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_ide_api/src/completion/completion_item.rs')
-rw-r--r--crates/ra_ide_api/src/completion/completion_item.rs34
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;
8use crate::completion::{ 8use 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
272impl<'a> Into<CompletionItem> for Builder { 296impl<'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
332fn const_item_label(ctx: &CompletionContext, ct: hir::Const) -> String {
333 let node = ct.source(ctx.db).1;
334 const_label(&node)
335}
336
337fn 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)]
309pub(crate) fn do_completion(code: &str, kind: CompletionKind) -> Vec<CompletionItem> { 343pub(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};