diff options
Diffstat (limited to 'crates/completion/src/render.rs')
-rw-r--r-- | crates/completion/src/render.rs | 118 |
1 files changed, 78 insertions, 40 deletions
diff --git a/crates/completion/src/render.rs b/crates/completion/src/render.rs index 4f622d28a..e11b881ca 100644 --- a/crates/completion/src/render.rs +++ b/crates/completion/src/render.rs | |||
@@ -13,7 +13,7 @@ mod builder_ext; | |||
13 | use hir::{ | 13 | use hir::{ |
14 | AsAssocItem, Documentation, HasAttrs, HirDisplay, ModuleDef, Mutability, ScopeDef, Type, | 14 | AsAssocItem, Documentation, HasAttrs, HirDisplay, ModuleDef, Mutability, ScopeDef, Type, |
15 | }; | 15 | }; |
16 | use ide_db::{helpers::SnippetCap, RootDatabase}; | 16 | use ide_db::{helpers::SnippetCap, RootDatabase, SymbolKind}; |
17 | use syntax::TextRange; | 17 | use syntax::TextRange; |
18 | use test_utils::mark; | 18 | use test_utils::mark; |
19 | 19 | ||
@@ -146,7 +146,7 @@ impl<'a> Render<'a> { | |||
146 | self.ctx.source_range(), | 146 | self.ctx.source_range(), |
147 | name.to_string(), | 147 | name.to_string(), |
148 | ) | 148 | ) |
149 | .kind(CompletionItemKind::Field) | 149 | .kind(SymbolKind::Field) |
150 | .detail(ty.display(self.ctx.db()).to_string()) | 150 | .detail(ty.display(self.ctx.db()).to_string()) |
151 | .set_documentation(field.docs(self.ctx.db())) | 151 | .set_documentation(field.docs(self.ctx.db())) |
152 | .set_deprecated(is_deprecated); | 152 | .set_deprecated(is_deprecated); |
@@ -160,7 +160,7 @@ impl<'a> Render<'a> { | |||
160 | 160 | ||
161 | fn add_tuple_field(&mut self, field: usize, ty: &Type) -> CompletionItem { | 161 | fn add_tuple_field(&mut self, field: usize, ty: &Type) -> CompletionItem { |
162 | CompletionItem::new(CompletionKind::Reference, self.ctx.source_range(), field.to_string()) | 162 | CompletionItem::new(CompletionKind::Reference, self.ctx.source_range(), field.to_string()) |
163 | .kind(CompletionItemKind::Field) | 163 | .kind(SymbolKind::Field) |
164 | .detail(ty.display(self.ctx.db()).to_string()) | 164 | .detail(ty.display(self.ctx.db()).to_string()) |
165 | .build() | 165 | .build() |
166 | } | 166 | } |
@@ -187,7 +187,7 @@ impl<'a> Render<'a> { | |||
187 | if self.ctx.completion.is_pat_binding_or_const | 187 | if self.ctx.completion.is_pat_binding_or_const |
188 | | self.ctx.completion.is_irrefutable_pat_binding => | 188 | | self.ctx.completion.is_irrefutable_pat_binding => |
189 | { | 189 | { |
190 | CompletionItemKind::EnumVariant | 190 | CompletionItemKind::SymbolKind(SymbolKind::Variant) |
191 | } | 191 | } |
192 | ScopeDef::ModuleDef(Variant(var)) => { | 192 | ScopeDef::ModuleDef(Variant(var)) => { |
193 | let item = render_variant(self.ctx, import_to_add, Some(local_name), *var, None); | 193 | let item = render_variant(self.ctx, import_to_add, Some(local_name), *var, None); |
@@ -198,20 +198,28 @@ impl<'a> Render<'a> { | |||
198 | return item; | 198 | return item; |
199 | } | 199 | } |
200 | 200 | ||
201 | ScopeDef::ModuleDef(Module(..)) => CompletionItemKind::Module, | 201 | ScopeDef::ModuleDef(Module(..)) => CompletionItemKind::SymbolKind(SymbolKind::Module), |
202 | ScopeDef::ModuleDef(Adt(hir::Adt::Struct(_))) => CompletionItemKind::Struct, | 202 | ScopeDef::ModuleDef(Adt(adt)) => CompletionItemKind::SymbolKind(match adt { |
203 | // FIXME: add CompletionItemKind::Union | 203 | hir::Adt::Struct(_) => SymbolKind::Struct, |
204 | ScopeDef::ModuleDef(Adt(hir::Adt::Union(_))) => CompletionItemKind::Struct, | 204 | hir::Adt::Union(_) => SymbolKind::Union, |
205 | ScopeDef::ModuleDef(Adt(hir::Adt::Enum(_))) => CompletionItemKind::Enum, | 205 | hir::Adt::Enum(_) => SymbolKind::Enum, |
206 | ScopeDef::ModuleDef(Const(..)) => CompletionItemKind::Const, | 206 | }), |
207 | ScopeDef::ModuleDef(Static(..)) => CompletionItemKind::Static, | 207 | ScopeDef::ModuleDef(Const(..)) => CompletionItemKind::SymbolKind(SymbolKind::Const), |
208 | ScopeDef::ModuleDef(Trait(..)) => CompletionItemKind::Trait, | 208 | ScopeDef::ModuleDef(Static(..)) => CompletionItemKind::SymbolKind(SymbolKind::Static), |
209 | ScopeDef::ModuleDef(TypeAlias(..)) => CompletionItemKind::TypeAlias, | 209 | ScopeDef::ModuleDef(Trait(..)) => CompletionItemKind::SymbolKind(SymbolKind::Trait), |
210 | ScopeDef::ModuleDef(TypeAlias(..)) => { | ||
211 | CompletionItemKind::SymbolKind(SymbolKind::TypeAlias) | ||
212 | } | ||
210 | ScopeDef::ModuleDef(BuiltinType(..)) => CompletionItemKind::BuiltinType, | 213 | ScopeDef::ModuleDef(BuiltinType(..)) => CompletionItemKind::BuiltinType, |
211 | ScopeDef::GenericParam(..) => CompletionItemKind::TypeParam, | 214 | ScopeDef::GenericParam(param) => CompletionItemKind::SymbolKind(match param { |
212 | ScopeDef::Local(..) => CompletionItemKind::Binding, | 215 | hir::GenericParam::TypeParam(_) => SymbolKind::TypeParam, |
213 | // (does this need its own kind?) | 216 | hir::GenericParam::LifetimeParam(_) => SymbolKind::LifetimeParam, |
214 | ScopeDef::AdtSelfType(..) | ScopeDef::ImplSelfType(..) => CompletionItemKind::TypeParam, | 217 | hir::GenericParam::ConstParam(_) => SymbolKind::ConstParam, |
218 | }), | ||
219 | ScopeDef::Local(..) => CompletionItemKind::SymbolKind(SymbolKind::Local), | ||
220 | ScopeDef::AdtSelfType(..) | ScopeDef::ImplSelfType(..) => { | ||
221 | CompletionItemKind::SymbolKind(SymbolKind::SelfParam) | ||
222 | } | ||
215 | ScopeDef::Unknown => { | 223 | ScopeDef::Unknown => { |
216 | let item = CompletionItem::new( | 224 | let item = CompletionItem::new( |
217 | CompletionKind::Reference, | 225 | CompletionKind::Reference, |
@@ -400,7 +408,9 @@ fn main() { Foo::Fo$0 } | |||
400 | source_range: 54..56, | 408 | source_range: 54..56, |
401 | delete: 54..56, | 409 | delete: 54..56, |
402 | insert: "Foo", | 410 | insert: "Foo", |
403 | kind: EnumVariant, | 411 | kind: SymbolKind( |
412 | Variant, | ||
413 | ), | ||
404 | detail: "{ x: i32, y: i32 }", | 414 | detail: "{ x: i32, y: i32 }", |
405 | }, | 415 | }, |
406 | ] | 416 | ] |
@@ -423,7 +433,9 @@ fn main() { Foo::Fo$0 } | |||
423 | source_range: 46..48, | 433 | source_range: 46..48, |
424 | delete: 46..48, | 434 | delete: 46..48, |
425 | insert: "Foo($0)", | 435 | insert: "Foo($0)", |
426 | kind: EnumVariant, | 436 | kind: SymbolKind( |
437 | Variant, | ||
438 | ), | ||
427 | lookup: "Foo", | 439 | lookup: "Foo", |
428 | detail: "(i32, i32)", | 440 | detail: "(i32, i32)", |
429 | trigger_call_info: true, | 441 | trigger_call_info: true, |
@@ -448,7 +460,9 @@ fn main() { Foo::Fo$0 } | |||
448 | source_range: 35..37, | 460 | source_range: 35..37, |
449 | delete: 35..37, | 461 | delete: 35..37, |
450 | insert: "Foo", | 462 | insert: "Foo", |
451 | kind: EnumVariant, | 463 | kind: SymbolKind( |
464 | Variant, | ||
465 | ), | ||
452 | detail: "()", | 466 | detail: "()", |
453 | }, | 467 | }, |
454 | ] | 468 | ] |
@@ -472,7 +486,9 @@ fn main() { let _: m::Spam = S$0 } | |||
472 | source_range: 75..76, | 486 | source_range: 75..76, |
473 | delete: 75..76, | 487 | delete: 75..76, |
474 | insert: "Spam::Bar($0)", | 488 | insert: "Spam::Bar($0)", |
475 | kind: EnumVariant, | 489 | kind: SymbolKind( |
490 | Variant, | ||
491 | ), | ||
476 | lookup: "Spam::Bar", | 492 | lookup: "Spam::Bar", |
477 | detail: "(i32)", | 493 | detail: "(i32)", |
478 | trigger_call_info: true, | 494 | trigger_call_info: true, |
@@ -482,14 +498,18 @@ fn main() { let _: m::Spam = S$0 } | |||
482 | source_range: 75..76, | 498 | source_range: 75..76, |
483 | delete: 75..76, | 499 | delete: 75..76, |
484 | insert: "m", | 500 | insert: "m", |
485 | kind: Module, | 501 | kind: SymbolKind( |
502 | Module, | ||
503 | ), | ||
486 | }, | 504 | }, |
487 | CompletionItem { | 505 | CompletionItem { |
488 | label: "m::Spam::Foo", | 506 | label: "m::Spam::Foo", |
489 | source_range: 75..76, | 507 | source_range: 75..76, |
490 | delete: 75..76, | 508 | delete: 75..76, |
491 | insert: "m::Spam::Foo", | 509 | insert: "m::Spam::Foo", |
492 | kind: EnumVariant, | 510 | kind: SymbolKind( |
511 | Variant, | ||
512 | ), | ||
493 | lookup: "Spam::Foo", | 513 | lookup: "Spam::Foo", |
494 | detail: "()", | 514 | detail: "()", |
495 | }, | 515 | }, |
@@ -498,9 +518,11 @@ fn main() { let _: m::Spam = S$0 } | |||
498 | source_range: 75..76, | 518 | source_range: 75..76, |
499 | delete: 75..76, | 519 | delete: 75..76, |
500 | insert: "main()$0", | 520 | insert: "main()$0", |
501 | kind: Function, | 521 | kind: SymbolKind( |
522 | Function, | ||
523 | ), | ||
502 | lookup: "main", | 524 | lookup: "main", |
503 | detail: "fn main()", | 525 | detail: "-> ()", |
504 | }, | 526 | }, |
505 | ] | 527 | ] |
506 | "#]], | 528 | "#]], |
@@ -525,18 +547,22 @@ fn main() { som$0 } | |||
525 | source_range: 127..130, | 547 | source_range: 127..130, |
526 | delete: 127..130, | 548 | delete: 127..130, |
527 | insert: "main()$0", | 549 | insert: "main()$0", |
528 | kind: Function, | 550 | kind: SymbolKind( |
551 | Function, | ||
552 | ), | ||
529 | lookup: "main", | 553 | lookup: "main", |
530 | detail: "fn main()", | 554 | detail: "-> ()", |
531 | }, | 555 | }, |
532 | CompletionItem { | 556 | CompletionItem { |
533 | label: "something_deprecated()", | 557 | label: "something_deprecated()", |
534 | source_range: 127..130, | 558 | source_range: 127..130, |
535 | delete: 127..130, | 559 | delete: 127..130, |
536 | insert: "something_deprecated()$0", | 560 | insert: "something_deprecated()$0", |
537 | kind: Function, | 561 | kind: SymbolKind( |
562 | Function, | ||
563 | ), | ||
538 | lookup: "something_deprecated", | 564 | lookup: "something_deprecated", |
539 | detail: "fn something_deprecated()", | 565 | detail: "-> ()", |
540 | deprecated: true, | 566 | deprecated: true, |
541 | }, | 567 | }, |
542 | CompletionItem { | 568 | CompletionItem { |
@@ -544,9 +570,11 @@ fn main() { som$0 } | |||
544 | source_range: 127..130, | 570 | source_range: 127..130, |
545 | delete: 127..130, | 571 | delete: 127..130, |
546 | insert: "something_else_deprecated()$0", | 572 | insert: "something_else_deprecated()$0", |
547 | kind: Function, | 573 | kind: SymbolKind( |
574 | Function, | ||
575 | ), | ||
548 | lookup: "something_else_deprecated", | 576 | lookup: "something_else_deprecated", |
549 | detail: "fn something_else_deprecated()", | 577 | detail: "-> ()", |
550 | deprecated: true, | 578 | deprecated: true, |
551 | }, | 579 | }, |
552 | ] | 580 | ] |
@@ -565,7 +593,9 @@ fn foo() { A { the$0 } } | |||
565 | source_range: 57..60, | 593 | source_range: 57..60, |
566 | delete: 57..60, | 594 | delete: 57..60, |
567 | insert: "the_field", | 595 | insert: "the_field", |
568 | kind: Field, | 596 | kind: SymbolKind( |
597 | Field, | ||
598 | ), | ||
569 | detail: "u32", | 599 | detail: "u32", |
570 | deprecated: true, | 600 | deprecated: true, |
571 | }, | 601 | }, |
@@ -595,7 +625,7 @@ impl S { | |||
595 | insert: "bar()$0", | 625 | insert: "bar()$0", |
596 | kind: Method, | 626 | kind: Method, |
597 | lookup: "bar", | 627 | lookup: "bar", |
598 | detail: "fn bar(self)", | 628 | detail: "-> ()", |
599 | documentation: Documentation( | 629 | documentation: Documentation( |
600 | "Method docs", | 630 | "Method docs", |
601 | ), | 631 | ), |
@@ -605,7 +635,9 @@ impl S { | |||
605 | source_range: 94..94, | 635 | source_range: 94..94, |
606 | delete: 94..94, | 636 | delete: 94..94, |
607 | insert: "foo", | 637 | insert: "foo", |
608 | kind: Field, | 638 | kind: SymbolKind( |
639 | Field, | ||
640 | ), | ||
609 | detail: "{unknown}", | 641 | detail: "{unknown}", |
610 | documentation: Documentation( | 642 | documentation: Documentation( |
611 | "Field docs", | 643 | "Field docs", |
@@ -636,7 +668,9 @@ use self::E::*; | |||
636 | source_range: 10..12, | 668 | source_range: 10..12, |
637 | delete: 10..12, | 669 | delete: 10..12, |
638 | insert: "E", | 670 | insert: "E", |
639 | kind: Enum, | 671 | kind: SymbolKind( |
672 | Enum, | ||
673 | ), | ||
640 | documentation: Documentation( | 674 | documentation: Documentation( |
641 | "enum docs", | 675 | "enum docs", |
642 | ), | 676 | ), |
@@ -646,7 +680,9 @@ use self::E::*; | |||
646 | source_range: 10..12, | 680 | source_range: 10..12, |
647 | delete: 10..12, | 681 | delete: 10..12, |
648 | insert: "V", | 682 | insert: "V", |
649 | kind: EnumVariant, | 683 | kind: SymbolKind( |
684 | Variant, | ||
685 | ), | ||
650 | detail: "()", | 686 | detail: "()", |
651 | documentation: Documentation( | 687 | documentation: Documentation( |
652 | "variant docs", | 688 | "variant docs", |
@@ -657,7 +693,9 @@ use self::E::*; | |||
657 | source_range: 10..12, | 693 | source_range: 10..12, |
658 | delete: 10..12, | 694 | delete: 10..12, |
659 | insert: "my", | 695 | insert: "my", |
660 | kind: Module, | 696 | kind: SymbolKind( |
697 | Module, | ||
698 | ), | ||
661 | documentation: Documentation( | 699 | documentation: Documentation( |
662 | "mod docs", | 700 | "mod docs", |
663 | ), | 701 | ), |
@@ -687,7 +725,7 @@ fn foo(s: S) { s.$0 } | |||
687 | insert: "the_method()$0", | 725 | insert: "the_method()$0", |
688 | kind: Method, | 726 | kind: Method, |
689 | lookup: "the_method", | 727 | lookup: "the_method", |
690 | detail: "fn the_method(&self)", | 728 | detail: "-> ()", |
691 | }, | 729 | }, |
692 | ] | 730 | ] |
693 | "#]], | 731 | "#]], |
@@ -883,7 +921,7 @@ struct WorldSnapshot { _f: () }; | |||
883 | fn go(world: &WorldSnapshot) { go(w$0) } | 921 | fn go(world: &WorldSnapshot) { go(w$0) } |
884 | "#, | 922 | "#, |
885 | expect![[r#" | 923 | expect![[r#" |
886 | bn world [type+name] | 924 | lc world [type+name] |
887 | st WorldSnapshot [] | 925 | st WorldSnapshot [] |
888 | fn go(…) [] | 926 | fn go(…) [] |
889 | "#]], | 927 | "#]], |
@@ -900,7 +938,7 @@ fn f(foo: &Foo) { f(foo, w$0) } | |||
900 | expect![[r#" | 938 | expect![[r#" |
901 | st Foo [] | 939 | st Foo [] |
902 | fn f(…) [] | 940 | fn f(…) [] |
903 | bn foo [] | 941 | lc foo [] |
904 | "#]], | 942 | "#]], |
905 | ); | 943 | ); |
906 | } | 944 | } |