aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide_api/src/completion/presentation.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_ide_api/src/completion/presentation.rs')
-rw-r--r--crates/ra_ide_api/src/completion/presentation.rs160
1 files changed, 82 insertions, 78 deletions
diff --git a/crates/ra_ide_api/src/completion/presentation.rs b/crates/ra_ide_api/src/completion/presentation.rs
index d861303b7..501b7da4e 100644
--- a/crates/ra_ide_api/src/completion/presentation.rs
+++ b/crates/ra_ide_api/src/completion/presentation.rs
@@ -68,7 +68,7 @@ impl Completions {
68 ScopeDef::ModuleDef(TypeAlias(..)) => CompletionItemKind::TypeAlias, 68 ScopeDef::ModuleDef(TypeAlias(..)) => CompletionItemKind::TypeAlias,
69 ScopeDef::ModuleDef(BuiltinType(..)) => CompletionItemKind::BuiltinType, 69 ScopeDef::ModuleDef(BuiltinType(..)) => CompletionItemKind::BuiltinType,
70 ScopeDef::GenericParam(..) => CompletionItemKind::TypeParam, 70 ScopeDef::GenericParam(..) => CompletionItemKind::TypeParam,
71 ScopeDef::LocalBinding(..) => CompletionItemKind::Binding, 71 ScopeDef::Local(..) => CompletionItemKind::Binding,
72 // (does this need its own kind?) 72 // (does this need its own kind?)
73 ScopeDef::AdtSelfType(..) | ScopeDef::ImplSelfType(..) => CompletionItemKind::TypeParam, 73 ScopeDef::AdtSelfType(..) | ScopeDef::ImplSelfType(..) => CompletionItemKind::TypeParam,
74 ScopeDef::MacroDef(mac) => { 74 ScopeDef::MacroDef(mac) => {
@@ -96,13 +96,11 @@ impl Completions {
96 96
97 let mut completion_item = 97 let mut completion_item =
98 CompletionItem::new(completion_kind, ctx.source_range(), local_name.clone()); 98 CompletionItem::new(completion_kind, ctx.source_range(), local_name.clone());
99 if let ScopeDef::LocalBinding(pat_id) = resolution { 99 if let ScopeDef::Local(local) = resolution {
100 let ty = ctx 100 let ty = local.ty(ctx.db);
101 .analyzer 101 if ty != Ty::Unknown {
102 .type_of_pat_by_id(ctx.db, pat_id.clone()) 102 completion_item = completion_item.detail(ty.display(ctx.db).to_string());
103 .filter(|t| t != &Ty::Unknown) 103 }
104 .map(|t| t.display(ctx.db).to_string());
105 completion_item = completion_item.set_detail(ty);
106 }; 104 };
107 105
108 // If not an import, add parenthesis automatically. 106 // If not an import, add parenthesis automatically.
@@ -325,38 +323,38 @@ mod tests {
325 "#, 323 "#,
326 ), 324 ),
327 @r###" 325 @r###"
328 [ 326 [
329 CompletionItem { 327 CompletionItem {
330 label: "main()", 328 label: "main()",
331 source_range: [203; 206), 329 source_range: [203; 206),
332 delete: [203; 206), 330 delete: [203; 206),
333 insert: "main()$0", 331 insert: "main()$0",
334 kind: Function, 332 kind: Function,
335 lookup: "main", 333 lookup: "main",
336 detail: "fn main()", 334 detail: "fn main()",
337 }, 335 },
338 CompletionItem { 336 CompletionItem {
339 label: "something_deprecated()", 337 label: "something_deprecated()",
340 source_range: [203; 206), 338 source_range: [203; 206),
341 delete: [203; 206), 339 delete: [203; 206),
342 insert: "something_deprecated()$0", 340 insert: "something_deprecated()$0",
343 kind: Function, 341 kind: Function,
344 lookup: "something_deprecated", 342 lookup: "something_deprecated",
345 detail: "fn something_deprecated()", 343 detail: "fn something_deprecated()",
346 deprecated: true, 344 deprecated: true,
347 }, 345 },
348 CompletionItem { 346 CompletionItem {
349 label: "something_else_deprecated()", 347 label: "something_else_deprecated()",
350 source_range: [203; 206), 348 source_range: [203; 206),
351 delete: [203; 206), 349 delete: [203; 206),
352 insert: "something_else_deprecated()$0", 350 insert: "something_else_deprecated()$0",
353 kind: Function, 351 kind: Function,
354 lookup: "something_else_deprecated", 352 lookup: "something_else_deprecated",
355 detail: "fn something_else_deprecated()", 353 detail: "fn something_else_deprecated()",
356 deprecated: true, 354 deprecated: true,
357 }, 355 },
358 ] 356 ]
359 "### 357 "###
360 ); 358 );
361 } 359 }
362 360
@@ -461,16 +459,18 @@ mod tests {
461 use crate::m::f<|>; 459 use crate::m::f<|>;
462 " 460 "
463 ), 461 ),
464 @r#"[ 462 @r###"
465 CompletionItem { 463 [
466 label: "foo", 464 CompletionItem {
467 source_range: [40; 41), 465 label: "foo",
468 delete: [40; 41), 466 source_range: [40; 41),
469 insert: "foo", 467 delete: [40; 41),
470 kind: Function, 468 insert: "foo",
471 detail: "pub fn foo()", 469 kind: Function,
472 }, 470 detail: "pub fn foo()",
473]"# 471 },
472 ]
473 "###
474 ); 474 );
475 } 475 }
476 476
@@ -486,24 +486,26 @@ mod tests {
486 } 486 }
487 " 487 "
488 ), 488 ),
489 @r#"[ 489 @r###"
490 CompletionItem { 490 [
491 label: "frobnicate", 491 CompletionItem {
492 source_range: [35; 39), 492 label: "frobnicate",
493 delete: [35; 39), 493 source_range: [35; 39),
494 insert: "frobnicate", 494 delete: [35; 39),
495 kind: Function, 495 insert: "frobnicate",
496 detail: "fn frobnicate()", 496 kind: Function,
497 }, 497 detail: "fn frobnicate()",
498 CompletionItem { 498 },
499 label: "main", 499 CompletionItem {
500 source_range: [35; 39), 500 label: "main",
501 delete: [35; 39), 501 source_range: [35; 39),
502 insert: "main", 502 delete: [35; 39),
503 kind: Function, 503 insert: "main",
504 detail: "fn main()", 504 kind: Function,
505 }, 505 detail: "fn main()",
506]"# 506 },
507 ]
508 "###
507 ); 509 );
508 assert_debug_snapshot!( 510 assert_debug_snapshot!(
509 do_reference_completion( 511 do_reference_completion(
@@ -516,16 +518,18 @@ mod tests {
516 } 518 }
517 " 519 "
518 ), 520 ),
519 @r#"[ 521 @r###"
520 CompletionItem { 522 [
521 label: "new", 523 CompletionItem {
522 source_range: [67; 69), 524 label: "new",
523 delete: [67; 69), 525 source_range: [67; 69),
524 insert: "new", 526 delete: [67; 69),
525 kind: Function, 527 insert: "new",
526 detail: "fn new() -> Foo", 528 kind: Function,
527 }, 529 detail: "fn new() -> Foo",
528]"# 530 },
531 ]
532 "###
529 ); 533 );
530 } 534 }
531 535