aboutsummaryrefslogtreecommitdiff
path: root/crates/completion/src/render.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/completion/src/render.rs')
-rw-r--r--crates/completion/src/render.rs118
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;
13use hir::{ 13use hir::{
14 AsAssocItem, Documentation, HasAttrs, HirDisplay, ModuleDef, Mutability, ScopeDef, Type, 14 AsAssocItem, Documentation, HasAttrs, HirDisplay, ModuleDef, Mutability, ScopeDef, Type,
15}; 15};
16use ide_db::{helpers::SnippetCap, RootDatabase}; 16use ide_db::{helpers::SnippetCap, RootDatabase, SymbolKind};
17use syntax::TextRange; 17use syntax::TextRange;
18use test_utils::mark; 18use 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: () };
883fn go(world: &WorldSnapshot) { go(w$0) } 921fn 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 }