diff options
Diffstat (limited to 'crates/completion/src/render.rs')
-rw-r--r-- | crates/completion/src/render.rs | 107 |
1 files changed, 73 insertions, 34 deletions
diff --git a/crates/completion/src/render.rs b/crates/completion/src/render.rs index 4f622d28a..fa594b5e5 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,29 @@ 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 | // FIXME: add CompletionItemKind::Union |
205 | ScopeDef::ModuleDef(Adt(hir::Adt::Enum(_))) => CompletionItemKind::Enum, | 205 | hir::Adt::Union(_) => SymbolKind::Struct, |
206 | ScopeDef::ModuleDef(Const(..)) => CompletionItemKind::Const, | 206 | hir::Adt::Enum(_) => SymbolKind::Enum, |
207 | ScopeDef::ModuleDef(Static(..)) => CompletionItemKind::Static, | 207 | }), |
208 | ScopeDef::ModuleDef(Trait(..)) => CompletionItemKind::Trait, | 208 | ScopeDef::ModuleDef(Const(..)) => CompletionItemKind::SymbolKind(SymbolKind::Const), |
209 | ScopeDef::ModuleDef(TypeAlias(..)) => CompletionItemKind::TypeAlias, | 209 | ScopeDef::ModuleDef(Static(..)) => CompletionItemKind::SymbolKind(SymbolKind::Static), |
210 | ScopeDef::ModuleDef(Trait(..)) => CompletionItemKind::SymbolKind(SymbolKind::Trait), | ||
211 | ScopeDef::ModuleDef(TypeAlias(..)) => { | ||
212 | CompletionItemKind::SymbolKind(SymbolKind::TypeAlias) | ||
213 | } | ||
210 | ScopeDef::ModuleDef(BuiltinType(..)) => CompletionItemKind::BuiltinType, | 214 | ScopeDef::ModuleDef(BuiltinType(..)) => CompletionItemKind::BuiltinType, |
211 | ScopeDef::GenericParam(..) => CompletionItemKind::TypeParam, | 215 | ScopeDef::GenericParam(param) => CompletionItemKind::SymbolKind(match param { |
212 | ScopeDef::Local(..) => CompletionItemKind::Binding, | 216 | hir::GenericParam::TypeParam(_) => SymbolKind::TypeParam, |
213 | // (does this need its own kind?) | 217 | hir::GenericParam::LifetimeParam(_) => SymbolKind::LifetimeParam, |
214 | ScopeDef::AdtSelfType(..) | ScopeDef::ImplSelfType(..) => CompletionItemKind::TypeParam, | 218 | hir::GenericParam::ConstParam(_) => SymbolKind::ConstParam, |
219 | }), | ||
220 | ScopeDef::Local(..) => CompletionItemKind::SymbolKind(SymbolKind::Local), | ||
221 | ScopeDef::AdtSelfType(..) | ScopeDef::ImplSelfType(..) => { | ||
222 | CompletionItemKind::SymbolKind(SymbolKind::SelfParam) | ||
223 | } | ||
215 | ScopeDef::Unknown => { | 224 | ScopeDef::Unknown => { |
216 | let item = CompletionItem::new( | 225 | let item = CompletionItem::new( |
217 | CompletionKind::Reference, | 226 | CompletionKind::Reference, |
@@ -400,7 +409,9 @@ fn main() { Foo::Fo$0 } | |||
400 | source_range: 54..56, | 409 | source_range: 54..56, |
401 | delete: 54..56, | 410 | delete: 54..56, |
402 | insert: "Foo", | 411 | insert: "Foo", |
403 | kind: EnumVariant, | 412 | kind: SymbolKind( |
413 | Variant, | ||
414 | ), | ||
404 | detail: "{ x: i32, y: i32 }", | 415 | detail: "{ x: i32, y: i32 }", |
405 | }, | 416 | }, |
406 | ] | 417 | ] |
@@ -423,7 +434,9 @@ fn main() { Foo::Fo$0 } | |||
423 | source_range: 46..48, | 434 | source_range: 46..48, |
424 | delete: 46..48, | 435 | delete: 46..48, |
425 | insert: "Foo($0)", | 436 | insert: "Foo($0)", |
426 | kind: EnumVariant, | 437 | kind: SymbolKind( |
438 | Variant, | ||
439 | ), | ||
427 | lookup: "Foo", | 440 | lookup: "Foo", |
428 | detail: "(i32, i32)", | 441 | detail: "(i32, i32)", |
429 | trigger_call_info: true, | 442 | trigger_call_info: true, |
@@ -448,7 +461,9 @@ fn main() { Foo::Fo$0 } | |||
448 | source_range: 35..37, | 461 | source_range: 35..37, |
449 | delete: 35..37, | 462 | delete: 35..37, |
450 | insert: "Foo", | 463 | insert: "Foo", |
451 | kind: EnumVariant, | 464 | kind: SymbolKind( |
465 | Variant, | ||
466 | ), | ||
452 | detail: "()", | 467 | detail: "()", |
453 | }, | 468 | }, |
454 | ] | 469 | ] |
@@ -472,7 +487,9 @@ fn main() { let _: m::Spam = S$0 } | |||
472 | source_range: 75..76, | 487 | source_range: 75..76, |
473 | delete: 75..76, | 488 | delete: 75..76, |
474 | insert: "Spam::Bar($0)", | 489 | insert: "Spam::Bar($0)", |
475 | kind: EnumVariant, | 490 | kind: SymbolKind( |
491 | Variant, | ||
492 | ), | ||
476 | lookup: "Spam::Bar", | 493 | lookup: "Spam::Bar", |
477 | detail: "(i32)", | 494 | detail: "(i32)", |
478 | trigger_call_info: true, | 495 | trigger_call_info: true, |
@@ -482,14 +499,18 @@ fn main() { let _: m::Spam = S$0 } | |||
482 | source_range: 75..76, | 499 | source_range: 75..76, |
483 | delete: 75..76, | 500 | delete: 75..76, |
484 | insert: "m", | 501 | insert: "m", |
485 | kind: Module, | 502 | kind: SymbolKind( |
503 | Module, | ||
504 | ), | ||
486 | }, | 505 | }, |
487 | CompletionItem { | 506 | CompletionItem { |
488 | label: "m::Spam::Foo", | 507 | label: "m::Spam::Foo", |
489 | source_range: 75..76, | 508 | source_range: 75..76, |
490 | delete: 75..76, | 509 | delete: 75..76, |
491 | insert: "m::Spam::Foo", | 510 | insert: "m::Spam::Foo", |
492 | kind: EnumVariant, | 511 | kind: SymbolKind( |
512 | Variant, | ||
513 | ), | ||
493 | lookup: "Spam::Foo", | 514 | lookup: "Spam::Foo", |
494 | detail: "()", | 515 | detail: "()", |
495 | }, | 516 | }, |
@@ -498,7 +519,9 @@ fn main() { let _: m::Spam = S$0 } | |||
498 | source_range: 75..76, | 519 | source_range: 75..76, |
499 | delete: 75..76, | 520 | delete: 75..76, |
500 | insert: "main()$0", | 521 | insert: "main()$0", |
501 | kind: Function, | 522 | kind: SymbolKind( |
523 | Function, | ||
524 | ), | ||
502 | lookup: "main", | 525 | lookup: "main", |
503 | detail: "fn main()", | 526 | detail: "fn main()", |
504 | }, | 527 | }, |
@@ -525,7 +548,9 @@ fn main() { som$0 } | |||
525 | source_range: 127..130, | 548 | source_range: 127..130, |
526 | delete: 127..130, | 549 | delete: 127..130, |
527 | insert: "main()$0", | 550 | insert: "main()$0", |
528 | kind: Function, | 551 | kind: SymbolKind( |
552 | Function, | ||
553 | ), | ||
529 | lookup: "main", | 554 | lookup: "main", |
530 | detail: "fn main()", | 555 | detail: "fn main()", |
531 | }, | 556 | }, |
@@ -534,7 +559,9 @@ fn main() { som$0 } | |||
534 | source_range: 127..130, | 559 | source_range: 127..130, |
535 | delete: 127..130, | 560 | delete: 127..130, |
536 | insert: "something_deprecated()$0", | 561 | insert: "something_deprecated()$0", |
537 | kind: Function, | 562 | kind: SymbolKind( |
563 | Function, | ||
564 | ), | ||
538 | lookup: "something_deprecated", | 565 | lookup: "something_deprecated", |
539 | detail: "fn something_deprecated()", | 566 | detail: "fn something_deprecated()", |
540 | deprecated: true, | 567 | deprecated: true, |
@@ -544,7 +571,9 @@ fn main() { som$0 } | |||
544 | source_range: 127..130, | 571 | source_range: 127..130, |
545 | delete: 127..130, | 572 | delete: 127..130, |
546 | insert: "something_else_deprecated()$0", | 573 | insert: "something_else_deprecated()$0", |
547 | kind: Function, | 574 | kind: SymbolKind( |
575 | Function, | ||
576 | ), | ||
548 | lookup: "something_else_deprecated", | 577 | lookup: "something_else_deprecated", |
549 | detail: "fn something_else_deprecated()", | 578 | detail: "fn something_else_deprecated()", |
550 | deprecated: true, | 579 | deprecated: true, |
@@ -565,7 +594,9 @@ fn foo() { A { the$0 } } | |||
565 | source_range: 57..60, | 594 | source_range: 57..60, |
566 | delete: 57..60, | 595 | delete: 57..60, |
567 | insert: "the_field", | 596 | insert: "the_field", |
568 | kind: Field, | 597 | kind: SymbolKind( |
598 | Field, | ||
599 | ), | ||
569 | detail: "u32", | 600 | detail: "u32", |
570 | deprecated: true, | 601 | deprecated: true, |
571 | }, | 602 | }, |
@@ -605,7 +636,9 @@ impl S { | |||
605 | source_range: 94..94, | 636 | source_range: 94..94, |
606 | delete: 94..94, | 637 | delete: 94..94, |
607 | insert: "foo", | 638 | insert: "foo", |
608 | kind: Field, | 639 | kind: SymbolKind( |
640 | Field, | ||
641 | ), | ||
609 | detail: "{unknown}", | 642 | detail: "{unknown}", |
610 | documentation: Documentation( | 643 | documentation: Documentation( |
611 | "Field docs", | 644 | "Field docs", |
@@ -636,7 +669,9 @@ use self::E::*; | |||
636 | source_range: 10..12, | 669 | source_range: 10..12, |
637 | delete: 10..12, | 670 | delete: 10..12, |
638 | insert: "E", | 671 | insert: "E", |
639 | kind: Enum, | 672 | kind: SymbolKind( |
673 | Enum, | ||
674 | ), | ||
640 | documentation: Documentation( | 675 | documentation: Documentation( |
641 | "enum docs", | 676 | "enum docs", |
642 | ), | 677 | ), |
@@ -646,7 +681,9 @@ use self::E::*; | |||
646 | source_range: 10..12, | 681 | source_range: 10..12, |
647 | delete: 10..12, | 682 | delete: 10..12, |
648 | insert: "V", | 683 | insert: "V", |
649 | kind: EnumVariant, | 684 | kind: SymbolKind( |
685 | Variant, | ||
686 | ), | ||
650 | detail: "()", | 687 | detail: "()", |
651 | documentation: Documentation( | 688 | documentation: Documentation( |
652 | "variant docs", | 689 | "variant docs", |
@@ -657,7 +694,9 @@ use self::E::*; | |||
657 | source_range: 10..12, | 694 | source_range: 10..12, |
658 | delete: 10..12, | 695 | delete: 10..12, |
659 | insert: "my", | 696 | insert: "my", |
660 | kind: Module, | 697 | kind: SymbolKind( |
698 | Module, | ||
699 | ), | ||
661 | documentation: Documentation( | 700 | documentation: Documentation( |
662 | "mod docs", | 701 | "mod docs", |
663 | ), | 702 | ), |
@@ -883,7 +922,7 @@ struct WorldSnapshot { _f: () }; | |||
883 | fn go(world: &WorldSnapshot) { go(w$0) } | 922 | fn go(world: &WorldSnapshot) { go(w$0) } |
884 | "#, | 923 | "#, |
885 | expect![[r#" | 924 | expect![[r#" |
886 | bn world [type+name] | 925 | lc world [type+name] |
887 | st WorldSnapshot [] | 926 | st WorldSnapshot [] |
888 | fn go(…) [] | 927 | fn go(…) [] |
889 | "#]], | 928 | "#]], |
@@ -900,7 +939,7 @@ fn f(foo: &Foo) { f(foo, w$0) } | |||
900 | expect![[r#" | 939 | expect![[r#" |
901 | st Foo [] | 940 | st Foo [] |
902 | fn f(…) [] | 941 | fn f(…) [] |
903 | bn foo [] | 942 | lc foo [] |
904 | "#]], | 943 | "#]], |
905 | ); | 944 | ); |
906 | } | 945 | } |