aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide/src/completion/complete_unqualified_path.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_ide/src/completion/complete_unqualified_path.rs')
-rw-r--r--crates/ra_ide/src/completion/complete_unqualified_path.rs361
1 files changed, 206 insertions, 155 deletions
diff --git a/crates/ra_ide/src/completion/complete_unqualified_path.rs b/crates/ra_ide/src/completion/complete_unqualified_path.rs
index 638f86eda..56cd086c6 100644
--- a/crates/ra_ide/src/completion/complete_unqualified_path.rs
+++ b/crates/ra_ide/src/completion/complete_unqualified_path.rs
@@ -38,7 +38,15 @@ fn complete_enum_variants(acc: &mut Completions, ctx: &CompletionContext) {
38 if let Some(ty) = ctx.expected_type_of(&ctx.token.parent()) { 38 if let Some(ty) = ctx.expected_type_of(&ctx.token.parent()) {
39 if let Some(Adt::Enum(enum_data)) = ty.as_adt() { 39 if let Some(Adt::Enum(enum_data)) = ty.as_adt() {
40 let variants = enum_data.variants(ctx.db); 40 let variants = enum_data.variants(ctx.db);
41 let module = enum_data.module(ctx.db); 41
42 let module = if let Some(module) = ctx.scope().module() {
43 // Compute path from the completion site if available.
44 module
45 } else {
46 // Otherwise fall back to the enum's definition site.
47 enum_data.module(ctx.db)
48 };
49
42 for variant in variants { 50 for variant in variants {
43 if let Some(path) = module.find_use_path(ctx.db, ModuleDef::from(variant)) { 51 if let Some(path) = module.find_use_path(ctx.db, ModuleDef::from(variant)) {
44 // Variants with trivial paths are already added by the existing completion logic, 52 // Variants with trivial paths are already added by the existing completion logic,
@@ -77,8 +85,8 @@ mod tests {
77 [ 85 [
78 CompletionItem { 86 CompletionItem {
79 label: "collections", 87 label: "collections",
80 source_range: [21; 24), 88 source_range: 21..24,
81 delete: [21; 24), 89 delete: 21..24,
82 insert: "collections", 90 insert: "collections",
83 }, 91 },
84 ] 92 ]
@@ -149,8 +157,8 @@ mod tests {
149 [ 157 [
150 CompletionItem { 158 CompletionItem {
151 label: "Enum", 159 label: "Enum",
152 source_range: [231; 233), 160 source_range: 231..233,
153 delete: [231; 233), 161 delete: 231..233,
154 insert: "Enum", 162 insert: "Enum",
155 kind: Enum, 163 kind: Enum,
156 }, 164 },
@@ -175,8 +183,8 @@ mod tests {
175 [ 183 [
176 CompletionItem { 184 CompletionItem {
177 label: "quux(…)", 185 label: "quux(…)",
178 source_range: [91; 91), 186 source_range: 91..91,
179 delete: [91; 91), 187 delete: 91..91,
180 insert: "quux(${1:x})$0", 188 insert: "quux(${1:x})$0",
181 kind: Function, 189 kind: Function,
182 lookup: "quux", 190 lookup: "quux",
@@ -185,16 +193,16 @@ mod tests {
185 }, 193 },
186 CompletionItem { 194 CompletionItem {
187 label: "x", 195 label: "x",
188 source_range: [91; 91), 196 source_range: 91..91,
189 delete: [91; 91), 197 delete: 91..91,
190 insert: "x", 198 insert: "x",
191 kind: Binding, 199 kind: Binding,
192 detail: "i32", 200 detail: "i32",
193 }, 201 },
194 CompletionItem { 202 CompletionItem {
195 label: "y", 203 label: "y",
196 source_range: [91; 91), 204 source_range: 91..91,
197 delete: [91; 91), 205 delete: 91..91,
198 insert: "y", 206 insert: "y",
199 kind: Binding, 207 kind: Binding,
200 detail: "i32", 208 detail: "i32",
@@ -224,23 +232,23 @@ mod tests {
224 [ 232 [
225 CompletionItem { 233 CompletionItem {
226 label: "a", 234 label: "a",
227 source_range: [242; 242), 235 source_range: 242..242,
228 delete: [242; 242), 236 delete: 242..242,
229 insert: "a", 237 insert: "a",
230 kind: Binding, 238 kind: Binding,
231 }, 239 },
232 CompletionItem { 240 CompletionItem {
233 label: "b", 241 label: "b",
234 source_range: [242; 242), 242 source_range: 242..242,
235 delete: [242; 242), 243 delete: 242..242,
236 insert: "b", 244 insert: "b",
237 kind: Binding, 245 kind: Binding,
238 detail: "i32", 246 detail: "i32",
239 }, 247 },
240 CompletionItem { 248 CompletionItem {
241 label: "quux()", 249 label: "quux()",
242 source_range: [242; 242), 250 source_range: 242..242,
243 delete: [242; 242), 251 delete: 242..242,
244 insert: "quux()$0", 252 insert: "quux()$0",
245 kind: Function, 253 kind: Function,
246 lookup: "quux", 254 lookup: "quux",
@@ -267,8 +275,8 @@ mod tests {
267 [ 275 [
268 CompletionItem { 276 CompletionItem {
269 label: "quux()", 277 label: "quux()",
270 source_range: [95; 95), 278 source_range: 95..95,
271 delete: [95; 95), 279 delete: 95..95,
272 insert: "quux()$0", 280 insert: "quux()$0",
273 kind: Function, 281 kind: Function,
274 lookup: "quux", 282 lookup: "quux",
@@ -276,8 +284,8 @@ mod tests {
276 }, 284 },
277 CompletionItem { 285 CompletionItem {
278 label: "x", 286 label: "x",
279 source_range: [95; 95), 287 source_range: 95..95,
280 delete: [95; 95), 288 delete: 95..95,
281 insert: "x", 289 insert: "x",
282 kind: Binding, 290 kind: Binding,
283 }, 291 },
@@ -300,15 +308,15 @@ mod tests {
300 [ 308 [
301 CompletionItem { 309 CompletionItem {
302 label: "T", 310 label: "T",
303 source_range: [52; 52), 311 source_range: 52..52,
304 delete: [52; 52), 312 delete: 52..52,
305 insert: "T", 313 insert: "T",
306 kind: TypeParam, 314 kind: TypeParam,
307 }, 315 },
308 CompletionItem { 316 CompletionItem {
309 label: "quux()", 317 label: "quux()",
310 source_range: [52; 52), 318 source_range: 52..52,
311 delete: [52; 52), 319 delete: 52..52,
312 insert: "quux()$0", 320 insert: "quux()$0",
313 kind: Function, 321 kind: Function,
314 lookup: "quux", 322 lookup: "quux",
@@ -333,22 +341,22 @@ mod tests {
333 [ 341 [
334 CompletionItem { 342 CompletionItem {
335 label: "Self", 343 label: "Self",
336 source_range: [54; 54), 344 source_range: 54..54,
337 delete: [54; 54), 345 delete: 54..54,
338 insert: "Self", 346 insert: "Self",
339 kind: TypeParam, 347 kind: TypeParam,
340 }, 348 },
341 CompletionItem { 349 CompletionItem {
342 label: "T", 350 label: "T",
343 source_range: [54; 54), 351 source_range: 54..54,
344 delete: [54; 54), 352 delete: 54..54,
345 insert: "T", 353 insert: "T",
346 kind: TypeParam, 354 kind: TypeParam,
347 }, 355 },
348 CompletionItem { 356 CompletionItem {
349 label: "X<…>", 357 label: "X<…>",
350 source_range: [54; 54), 358 source_range: 54..54,
351 delete: [54; 54), 359 delete: 54..54,
352 insert: "X<$0>", 360 insert: "X<$0>",
353 kind: Struct, 361 kind: Struct,
354 lookup: "X", 362 lookup: "X",
@@ -372,15 +380,15 @@ mod tests {
372 [ 380 [
373 CompletionItem { 381 CompletionItem {
374 label: "Self", 382 label: "Self",
375 source_range: [48; 48), 383 source_range: 48..48,
376 delete: [48; 48), 384 delete: 48..48,
377 insert: "Self", 385 insert: "Self",
378 kind: TypeParam, 386 kind: TypeParam,
379 }, 387 },
380 CompletionItem { 388 CompletionItem {
381 label: "X", 389 label: "X",
382 source_range: [48; 48), 390 source_range: 48..48,
383 delete: [48; 48), 391 delete: 48..48,
384 insert: "X", 392 insert: "X",
385 kind: Enum, 393 kind: Enum,
386 }, 394 },
@@ -405,22 +413,22 @@ mod tests {
405 [ 413 [
406 CompletionItem { 414 CompletionItem {
407 label: "Baz", 415 label: "Baz",
408 source_range: [105; 105), 416 source_range: 105..105,
409 delete: [105; 105), 417 delete: 105..105,
410 insert: "Baz", 418 insert: "Baz",
411 kind: Enum, 419 kind: Enum,
412 }, 420 },
413 CompletionItem { 421 CompletionItem {
414 label: "Foo", 422 label: "Foo",
415 source_range: [105; 105), 423 source_range: 105..105,
416 delete: [105; 105), 424 delete: 105..105,
417 insert: "Foo", 425 insert: "Foo",
418 kind: Struct, 426 kind: Struct,
419 }, 427 },
420 CompletionItem { 428 CompletionItem {
421 label: "quux()", 429 label: "quux()",
422 source_range: [105; 105), 430 source_range: 105..105,
423 delete: [105; 105), 431 delete: 105..105,
424 insert: "quux()$0", 432 insert: "quux()$0",
425 kind: Function, 433 kind: Function,
426 lookup: "quux", 434 lookup: "quux",
@@ -447,8 +455,8 @@ mod tests {
447 [ 455 [
448 CompletionItem { 456 CompletionItem {
449 label: "other_crate", 457 label: "other_crate",
450 source_range: [4; 4), 458 source_range: 4..4,
451 delete: [4; 4), 459 delete: 4..4,
452 insert: "other_crate", 460 insert: "other_crate",
453 kind: Module, 461 kind: Module,
454 }, 462 },
@@ -473,15 +481,15 @@ mod tests {
473 [ 481 [
474 CompletionItem { 482 CompletionItem {
475 label: "Bar", 483 label: "Bar",
476 source_range: [117; 117), 484 source_range: 117..117,
477 delete: [117; 117), 485 delete: 117..117,
478 insert: "Bar", 486 insert: "Bar",
479 kind: Struct, 487 kind: Struct,
480 }, 488 },
481 CompletionItem { 489 CompletionItem {
482 label: "quux()", 490 label: "quux()",
483 source_range: [117; 117), 491 source_range: 117..117,
484 delete: [117; 117), 492 delete: 117..117,
485 insert: "quux()$0", 493 insert: "quux()$0",
486 kind: Function, 494 kind: Function,
487 lookup: "quux", 495 lookup: "quux",
@@ -505,15 +513,15 @@ mod tests {
505 [ 513 [
506 CompletionItem { 514 CompletionItem {
507 label: "Foo", 515 label: "Foo",
508 source_range: [55; 55), 516 source_range: 55..55,
509 delete: [55; 55), 517 delete: 55..55,
510 insert: "Foo", 518 insert: "Foo",
511 kind: Struct, 519 kind: Struct,
512 }, 520 },
513 CompletionItem { 521 CompletionItem {
514 label: "x()", 522 label: "x()",
515 source_range: [55; 55), 523 source_range: 55..55,
516 delete: [55; 55), 524 delete: 55..55,
517 insert: "x()$0", 525 insert: "x()$0",
518 kind: Function, 526 kind: Function,
519 lookup: "x", 527 lookup: "x",
@@ -542,16 +550,16 @@ mod tests {
542 [ 550 [
543 CompletionItem { 551 CompletionItem {
544 label: "bar", 552 label: "bar",
545 source_range: [146; 146), 553 source_range: 146..146,
546 delete: [146; 146), 554 delete: 146..146,
547 insert: "bar", 555 insert: "bar",
548 kind: Binding, 556 kind: Binding,
549 detail: "i32", 557 detail: "i32",
550 }, 558 },
551 CompletionItem { 559 CompletionItem {
552 label: "foo()", 560 label: "foo()",
553 source_range: [146; 146), 561 source_range: 146..146,
554 delete: [146; 146), 562 delete: 146..146,
555 insert: "foo()$0", 563 insert: "foo()$0",
556 kind: Function, 564 kind: Function,
557 lookup: "foo", 565 lookup: "foo",
@@ -570,15 +578,15 @@ mod tests {
570 [ 578 [
571 CompletionItem { 579 CompletionItem {
572 label: "Self", 580 label: "Self",
573 source_range: [25; 25), 581 source_range: 25..25,
574 delete: [25; 25), 582 delete: 25..25,
575 insert: "Self", 583 insert: "Self",
576 kind: TypeParam, 584 kind: TypeParam,
577 }, 585 },
578 CompletionItem { 586 CompletionItem {
579 label: "self", 587 label: "self",
580 source_range: [25; 25), 588 source_range: 25..25,
581 delete: [25; 25), 589 delete: 25..25,
582 insert: "self", 590 insert: "self",
583 kind: Binding, 591 kind: Binding,
584 detail: "&{unknown}", 592 detail: "&{unknown}",
@@ -609,15 +617,15 @@ mod tests {
609 [ 617 [
610 CompletionItem { 618 CompletionItem {
611 label: "Option", 619 label: "Option",
612 source_range: [18; 18), 620 source_range: 18..18,
613 delete: [18; 18), 621 delete: 18..18,
614 insert: "Option", 622 insert: "Option",
615 kind: Struct, 623 kind: Struct,
616 }, 624 },
617 CompletionItem { 625 CompletionItem {
618 label: "foo()", 626 label: "foo()",
619 source_range: [18; 18), 627 source_range: 18..18,
620 delete: [18; 18), 628 delete: 18..18,
621 insert: "foo()$0", 629 insert: "foo()$0",
622 kind: Function, 630 kind: Function,
623 lookup: "foo", 631 lookup: "foo",
@@ -625,8 +633,8 @@ mod tests {
625 }, 633 },
626 CompletionItem { 634 CompletionItem {
627 label: "std", 635 label: "std",
628 source_range: [18; 18), 636 source_range: 18..18,
629 delete: [18; 18), 637 delete: 18..18,
630 insert: "std", 638 insert: "std",
631 kind: Module, 639 kind: Module,
632 }, 640 },
@@ -664,22 +672,22 @@ mod tests {
664 [ 672 [
665 CompletionItem { 673 CompletionItem {
666 label: "String", 674 label: "String",
667 source_range: [18; 18), 675 source_range: 18..18,
668 delete: [18; 18), 676 delete: 18..18,
669 insert: "String", 677 insert: "String",
670 kind: Struct, 678 kind: Struct,
671 }, 679 },
672 CompletionItem { 680 CompletionItem {
673 label: "core", 681 label: "core",
674 source_range: [18; 18), 682 source_range: 18..18,
675 delete: [18; 18), 683 delete: 18..18,
676 insert: "core", 684 insert: "core",
677 kind: Module, 685 kind: Module,
678 }, 686 },
679 CompletionItem { 687 CompletionItem {
680 label: "foo()", 688 label: "foo()",
681 source_range: [18; 18), 689 source_range: 18..18,
682 delete: [18; 18), 690 delete: 18..18,
683 insert: "foo()$0", 691 insert: "foo()$0",
684 kind: Function, 692 kind: Function,
685 lookup: "foo", 693 lookup: "foo",
@@ -687,8 +695,8 @@ mod tests {
687 }, 695 },
688 CompletionItem { 696 CompletionItem {
689 label: "std", 697 label: "std",
690 source_range: [18; 18), 698 source_range: 18..18,
691 delete: [18; 18), 699 delete: 18..18,
692 insert: "std", 700 insert: "std",
693 kind: Module, 701 kind: Module,
694 }, 702 },
@@ -734,46 +742,46 @@ mod tests {
734 [ 742 [
735 CompletionItem { 743 CompletionItem {
736 label: "bar!(…)", 744 label: "bar!(…)",
737 source_range: [252; 252), 745 source_range: 252..252,
738 delete: [252; 252), 746 delete: 252..252,
739 insert: "bar!($0)", 747 insert: "bar!($0)",
740 kind: Macro, 748 kind: Macro,
741 detail: "macro_rules! bar", 749 detail: "macro_rules! bar",
742 }, 750 },
743 CompletionItem { 751 CompletionItem {
744 label: "baz!(…)", 752 label: "baz!(…)",
745 source_range: [252; 252), 753 source_range: 252..252,
746 delete: [252; 252), 754 delete: 252..252,
747 insert: "baz!($0)", 755 insert: "baz!($0)",
748 kind: Macro, 756 kind: Macro,
749 detail: "#[macro_export]\nmacro_rules! baz", 757 detail: "#[macro_export]\nmacro_rules! baz",
750 }, 758 },
751 CompletionItem { 759 CompletionItem {
752 label: "foo!(…)", 760 label: "foo!(…)",
753 source_range: [252; 252), 761 source_range: 252..252,
754 delete: [252; 252), 762 delete: 252..252,
755 insert: "foo!($0)", 763 insert: "foo!($0)",
756 kind: Macro, 764 kind: Macro,
757 detail: "macro_rules! foo", 765 detail: "macro_rules! foo",
758 }, 766 },
759 CompletionItem { 767 CompletionItem {
760 label: "m1", 768 label: "m1",
761 source_range: [252; 252), 769 source_range: 252..252,
762 delete: [252; 252), 770 delete: 252..252,
763 insert: "m1", 771 insert: "m1",
764 kind: Module, 772 kind: Module,
765 }, 773 },
766 CompletionItem { 774 CompletionItem {
767 label: "m2", 775 label: "m2",
768 source_range: [252; 252), 776 source_range: 252..252,
769 delete: [252; 252), 777 delete: 252..252,
770 insert: "m2", 778 insert: "m2",
771 kind: Module, 779 kind: Module,
772 }, 780 },
773 CompletionItem { 781 CompletionItem {
774 label: "main()", 782 label: "main()",
775 source_range: [252; 252), 783 source_range: 252..252,
776 delete: [252; 252), 784 delete: 252..252,
777 insert: "main()$0", 785 insert: "main()$0",
778 kind: Function, 786 kind: Function,
779 lookup: "main", 787 lookup: "main",
@@ -803,16 +811,16 @@ mod tests {
803 [ 811 [
804 CompletionItem { 812 CompletionItem {
805 label: "foo!(…)", 813 label: "foo!(…)",
806 source_range: [49; 49), 814 source_range: 49..49,
807 delete: [49; 49), 815 delete: 49..49,
808 insert: "foo!($0)", 816 insert: "foo!($0)",
809 kind: Macro, 817 kind: Macro,
810 detail: "macro_rules! foo", 818 detail: "macro_rules! foo",
811 }, 819 },
812 CompletionItem { 820 CompletionItem {
813 label: "foo()", 821 label: "foo()",
814 source_range: [49; 49), 822 source_range: 49..49,
815 delete: [49; 49), 823 delete: 49..49,
816 insert: "foo()$0", 824 insert: "foo()$0",
817 kind: Function, 825 kind: Function,
818 lookup: "foo", 826 lookup: "foo",
@@ -842,16 +850,16 @@ mod tests {
842 [ 850 [
843 CompletionItem { 851 CompletionItem {
844 label: "foo!(…)", 852 label: "foo!(…)",
845 source_range: [57; 57), 853 source_range: 57..57,
846 delete: [57; 57), 854 delete: 57..57,
847 insert: "foo!($0)", 855 insert: "foo!($0)",
848 kind: Macro, 856 kind: Macro,
849 detail: "macro_rules! foo", 857 detail: "macro_rules! foo",
850 }, 858 },
851 CompletionItem { 859 CompletionItem {
852 label: "main()", 860 label: "main()",
853 source_range: [57; 57), 861 source_range: 57..57,
854 delete: [57; 57), 862 delete: 57..57,
855 insert: "main()$0", 863 insert: "main()$0",
856 kind: Function, 864 kind: Function,
857 lookup: "main", 865 lookup: "main",
@@ -881,16 +889,16 @@ mod tests {
881 [ 889 [
882 CompletionItem { 890 CompletionItem {
883 label: "foo!(…)", 891 label: "foo!(…)",
884 source_range: [50; 50), 892 source_range: 50..50,
885 delete: [50; 50), 893 delete: 50..50,
886 insert: "foo!($0)", 894 insert: "foo!($0)",
887 kind: Macro, 895 kind: Macro,
888 detail: "macro_rules! foo", 896 detail: "macro_rules! foo",
889 }, 897 },
890 CompletionItem { 898 CompletionItem {
891 label: "main()", 899 label: "main()",
892 source_range: [50; 50), 900 source_range: 50..50,
893 delete: [50; 50), 901 delete: 50..50,
894 insert: "main()$0", 902 insert: "main()$0",
895 kind: Function, 903 kind: Function,
896 lookup: "main", 904 lookup: "main",
@@ -917,8 +925,8 @@ mod tests {
917 [ 925 [
918 CompletionItem { 926 CompletionItem {
919 label: "frobnicate()", 927 label: "frobnicate()",
920 source_range: [23; 24), 928 source_range: 23..24,
921 delete: [23; 24), 929 delete: 23..24,
922 insert: "frobnicate()$0", 930 insert: "frobnicate()$0",
923 kind: Function, 931 kind: Function,
924 lookup: "frobnicate", 932 lookup: "frobnicate",
@@ -926,8 +934,8 @@ mod tests {
926 }, 934 },
927 CompletionItem { 935 CompletionItem {
928 label: "main()", 936 label: "main()",
929 source_range: [23; 24), 937 source_range: 23..24,
930 delete: [23; 24), 938 delete: 23..24,
931 insert: "main()$0", 939 insert: "main()$0",
932 kind: Function, 940 kind: Function,
933 lookup: "main", 941 lookup: "main",
@@ -954,16 +962,16 @@ mod tests {
954 [ 962 [
955 CompletionItem { 963 CompletionItem {
956 label: "m!(…)", 964 label: "m!(…)",
957 source_range: [145; 145), 965 source_range: 145..145,
958 delete: [145; 145), 966 delete: 145..145,
959 insert: "m!($0)", 967 insert: "m!($0)",
960 kind: Macro, 968 kind: Macro,
961 detail: "macro_rules! m", 969 detail: "macro_rules! m",
962 }, 970 },
963 CompletionItem { 971 CompletionItem {
964 label: "quux(…)", 972 label: "quux(…)",
965 source_range: [145; 145), 973 source_range: 145..145,
966 delete: [145; 145), 974 delete: 145..145,
967 insert: "quux(${1:x})$0", 975 insert: "quux(${1:x})$0",
968 kind: Function, 976 kind: Function,
969 lookup: "quux", 977 lookup: "quux",
@@ -972,16 +980,16 @@ mod tests {
972 }, 980 },
973 CompletionItem { 981 CompletionItem {
974 label: "x", 982 label: "x",
975 source_range: [145; 145), 983 source_range: 145..145,
976 delete: [145; 145), 984 delete: 145..145,
977 insert: "x", 985 insert: "x",
978 kind: Binding, 986 kind: Binding,
979 detail: "i32", 987 detail: "i32",
980 }, 988 },
981 CompletionItem { 989 CompletionItem {
982 label: "y", 990 label: "y",
983 source_range: [145; 145), 991 source_range: 145..145,
984 delete: [145; 145), 992 delete: 145..145,
985 insert: "y", 993 insert: "y",
986 kind: Binding, 994 kind: Binding,
987 detail: "i32", 995 detail: "i32",
@@ -1007,16 +1015,16 @@ mod tests {
1007 [ 1015 [
1008 CompletionItem { 1016 CompletionItem {
1009 label: "m!(…)", 1017 label: "m!(…)",
1010 source_range: [145; 146), 1018 source_range: 145..146,
1011 delete: [145; 146), 1019 delete: 145..146,
1012 insert: "m!($0)", 1020 insert: "m!($0)",
1013 kind: Macro, 1021 kind: Macro,
1014 detail: "macro_rules! m", 1022 detail: "macro_rules! m",
1015 }, 1023 },
1016 CompletionItem { 1024 CompletionItem {
1017 label: "quux(…)", 1025 label: "quux(…)",
1018 source_range: [145; 146), 1026 source_range: 145..146,
1019 delete: [145; 146), 1027 delete: 145..146,
1020 insert: "quux(${1:x})$0", 1028 insert: "quux(${1:x})$0",
1021 kind: Function, 1029 kind: Function,
1022 lookup: "quux", 1030 lookup: "quux",
@@ -1025,16 +1033,16 @@ mod tests {
1025 }, 1033 },
1026 CompletionItem { 1034 CompletionItem {
1027 label: "x", 1035 label: "x",
1028 source_range: [145; 146), 1036 source_range: 145..146,
1029 delete: [145; 146), 1037 delete: 145..146,
1030 insert: "x", 1038 insert: "x",
1031 kind: Binding, 1039 kind: Binding,
1032 detail: "i32", 1040 detail: "i32",
1033 }, 1041 },
1034 CompletionItem { 1042 CompletionItem {
1035 label: "y", 1043 label: "y",
1036 source_range: [145; 146), 1044 source_range: 145..146,
1037 delete: [145; 146), 1045 delete: 145..146,
1038 insert: "y", 1046 insert: "y",
1039 kind: Binding, 1047 kind: Binding,
1040 detail: "i32", 1048 detail: "i32",
@@ -1060,16 +1068,16 @@ mod tests {
1060 [ 1068 [
1061 CompletionItem { 1069 CompletionItem {
1062 label: "m!(…)", 1070 label: "m!(…)",
1063 source_range: [145; 146), 1071 source_range: 145..146,
1064 delete: [145; 146), 1072 delete: 145..146,
1065 insert: "m!($0)", 1073 insert: "m!($0)",
1066 kind: Macro, 1074 kind: Macro,
1067 detail: "macro_rules! m", 1075 detail: "macro_rules! m",
1068 }, 1076 },
1069 CompletionItem { 1077 CompletionItem {
1070 label: "quux(…)", 1078 label: "quux(…)",
1071 source_range: [145; 146), 1079 source_range: 145..146,
1072 delete: [145; 146), 1080 delete: 145..146,
1073 insert: "quux(${1:x})$0", 1081 insert: "quux(${1:x})$0",
1074 kind: Function, 1082 kind: Function,
1075 lookup: "quux", 1083 lookup: "quux",
@@ -1078,16 +1086,16 @@ mod tests {
1078 }, 1086 },
1079 CompletionItem { 1087 CompletionItem {
1080 label: "x", 1088 label: "x",
1081 source_range: [145; 146), 1089 source_range: 145..146,
1082 delete: [145; 146), 1090 delete: 145..146,
1083 insert: "x", 1091 insert: "x",
1084 kind: Binding, 1092 kind: Binding,
1085 detail: "i32", 1093 detail: "i32",
1086 }, 1094 },
1087 CompletionItem { 1095 CompletionItem {
1088 label: "y", 1096 label: "y",
1089 source_range: [145; 146), 1097 source_range: 145..146,
1090 delete: [145; 146), 1098 delete: 145..146,
1091 insert: "y", 1099 insert: "y",
1092 kind: Binding, 1100 kind: Binding,
1093 detail: "i32", 1101 detail: "i32",
@@ -1113,14 +1121,14 @@ mod tests {
1113 [ 1121 [
1114 CompletionItem { 1122 CompletionItem {
1115 label: "Quux", 1123 label: "Quux",
1116 source_range: [82; 82), 1124 source_range: 82..82,
1117 delete: [82; 82), 1125 delete: 82..82,
1118 insert: "Quux", 1126 insert: "Quux",
1119 }, 1127 },
1120 CompletionItem { 1128 CompletionItem {
1121 label: "main()", 1129 label: "main()",
1122 source_range: [82; 82), 1130 source_range: 82..82,
1123 delete: [82; 82), 1131 delete: 82..82,
1124 insert: "main()$0", 1132 insert: "main()$0",
1125 kind: Function, 1133 kind: Function,
1126 lookup: "main", 1134 lookup: "main",
@@ -1154,31 +1162,31 @@ mod tests {
1154 [ 1162 [
1155 CompletionItem { 1163 CompletionItem {
1156 label: "Foo", 1164 label: "Foo",
1157 source_range: [248; 250), 1165 source_range: 248..250,
1158 delete: [248; 250), 1166 delete: 248..250,
1159 insert: "Foo", 1167 insert: "Foo",
1160 kind: Enum, 1168 kind: Enum,
1161 }, 1169 },
1162 CompletionItem { 1170 CompletionItem {
1163 label: "Foo::Bar", 1171 label: "Foo::Bar",
1164 source_range: [248; 250), 1172 source_range: 248..250,
1165 delete: [248; 250), 1173 delete: 248..250,
1166 insert: "Foo::Bar", 1174 insert: "Foo::Bar",
1167 kind: EnumVariant, 1175 kind: EnumVariant,
1168 detail: "()", 1176 detail: "()",
1169 }, 1177 },
1170 CompletionItem { 1178 CompletionItem {
1171 label: "Foo::Baz", 1179 label: "Foo::Baz",
1172 source_range: [248; 250), 1180 source_range: 248..250,
1173 delete: [248; 250), 1181 delete: 248..250,
1174 insert: "Foo::Baz", 1182 insert: "Foo::Baz",
1175 kind: EnumVariant, 1183 kind: EnumVariant,
1176 detail: "()", 1184 detail: "()",
1177 }, 1185 },
1178 CompletionItem { 1186 CompletionItem {
1179 label: "Foo::Quux", 1187 label: "Foo::Quux",
1180 source_range: [248; 250), 1188 source_range: 248..250,
1181 delete: [248; 250), 1189 delete: 248..250,
1182 insert: "Foo::Quux", 1190 insert: "Foo::Quux",
1183 kind: EnumVariant, 1191 kind: EnumVariant,
1184 detail: "()", 1192 detail: "()",
@@ -1212,31 +1220,31 @@ mod tests {
1212 [ 1220 [
1213 CompletionItem { 1221 CompletionItem {
1214 label: "Foo", 1222 label: "Foo",
1215 source_range: [219; 221), 1223 source_range: 219..221,
1216 delete: [219; 221), 1224 delete: 219..221,
1217 insert: "Foo", 1225 insert: "Foo",
1218 kind: Enum, 1226 kind: Enum,
1219 }, 1227 },
1220 CompletionItem { 1228 CompletionItem {
1221 label: "Foo::Bar", 1229 label: "Foo::Bar",
1222 source_range: [219; 221), 1230 source_range: 219..221,
1223 delete: [219; 221), 1231 delete: 219..221,
1224 insert: "Foo::Bar", 1232 insert: "Foo::Bar",
1225 kind: EnumVariant, 1233 kind: EnumVariant,
1226 detail: "()", 1234 detail: "()",
1227 }, 1235 },
1228 CompletionItem { 1236 CompletionItem {
1229 label: "Foo::Baz", 1237 label: "Foo::Baz",
1230 source_range: [219; 221), 1238 source_range: 219..221,
1231 delete: [219; 221), 1239 delete: 219..221,
1232 insert: "Foo::Baz", 1240 insert: "Foo::Baz",
1233 kind: EnumVariant, 1241 kind: EnumVariant,
1234 detail: "()", 1242 detail: "()",
1235 }, 1243 },
1236 CompletionItem { 1244 CompletionItem {
1237 label: "Foo::Quux", 1245 label: "Foo::Quux",
1238 source_range: [219; 221), 1246 source_range: 219..221,
1239 delete: [219; 221), 1247 delete: 219..221,
1240 insert: "Foo::Quux", 1248 insert: "Foo::Quux",
1241 kind: EnumVariant, 1249 kind: EnumVariant,
1242 detail: "()", 1250 detail: "()",
@@ -1266,39 +1274,39 @@ mod tests {
1266 [ 1274 [
1267 CompletionItem { 1275 CompletionItem {
1268 label: "Foo", 1276 label: "Foo",
1269 source_range: [185; 186), 1277 source_range: 185..186,
1270 delete: [185; 186), 1278 delete: 185..186,
1271 insert: "Foo", 1279 insert: "Foo",
1272 kind: Enum, 1280 kind: Enum,
1273 }, 1281 },
1274 CompletionItem { 1282 CompletionItem {
1275 label: "Foo::Bar", 1283 label: "Foo::Bar",
1276 source_range: [185; 186), 1284 source_range: 185..186,
1277 delete: [185; 186), 1285 delete: 185..186,
1278 insert: "Foo::Bar", 1286 insert: "Foo::Bar",
1279 kind: EnumVariant, 1287 kind: EnumVariant,
1280 detail: "()", 1288 detail: "()",
1281 }, 1289 },
1282 CompletionItem { 1290 CompletionItem {
1283 label: "Foo::Baz", 1291 label: "Foo::Baz",
1284 source_range: [185; 186), 1292 source_range: 185..186,
1285 delete: [185; 186), 1293 delete: 185..186,
1286 insert: "Foo::Baz", 1294 insert: "Foo::Baz",
1287 kind: EnumVariant, 1295 kind: EnumVariant,
1288 detail: "()", 1296 detail: "()",
1289 }, 1297 },
1290 CompletionItem { 1298 CompletionItem {
1291 label: "Foo::Quux", 1299 label: "Foo::Quux",
1292 source_range: [185; 186), 1300 source_range: 185..186,
1293 delete: [185; 186), 1301 delete: 185..186,
1294 insert: "Foo::Quux", 1302 insert: "Foo::Quux",
1295 kind: EnumVariant, 1303 kind: EnumVariant,
1296 detail: "()", 1304 detail: "()",
1297 }, 1305 },
1298 CompletionItem { 1306 CompletionItem {
1299 label: "main()", 1307 label: "main()",
1300 source_range: [185; 186), 1308 source_range: 185..186,
1301 delete: [185; 186), 1309 delete: 185..186,
1302 insert: "main()$0", 1310 insert: "main()$0",
1303 kind: Function, 1311 kind: Function,
1304 lookup: "main", 1312 lookup: "main",
@@ -1308,4 +1316,47 @@ mod tests {
1308 "### 1316 "###
1309 ) 1317 )
1310 } 1318 }
1319
1320 #[test]
1321 fn completes_enum_variant_from_module() {
1322 assert_debug_snapshot!(
1323 do_reference_completion(
1324 r"
1325 mod m { pub enum E { V } }
1326
1327 fn f() -> m::E {
1328 V<|>
1329 }
1330 "
1331 ),
1332 @r###"
1333 [
1334 CompletionItem {
1335 label: "f()",
1336 source_range: 98..99,
1337 delete: 98..99,
1338 insert: "f()$0",
1339 kind: Function,
1340 lookup: "f",
1341 detail: "fn f() -> m::E",
1342 },
1343 CompletionItem {
1344 label: "m",
1345 source_range: 98..99,
1346 delete: 98..99,
1347 insert: "m",
1348 kind: Module,
1349 },
1350 CompletionItem {
1351 label: "m::E::V",
1352 source_range: 98..99,
1353 delete: 98..99,
1354 insert: "m::E::V",
1355 kind: EnumVariant,
1356 detail: "()",
1357 },
1358 ]
1359 "###
1360 )
1361 }
1311} 1362}