diff options
Diffstat (limited to 'crates/ra_ide_api/src/completion/presentation.rs')
-rw-r--r-- | crates/ra_ide_api/src/completion/presentation.rs | 160 |
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 | ||