aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide/src/completion/complete_qualified_path.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_ide/src/completion/complete_qualified_path.rs')
-rw-r--r--crates/ra_ide/src/completion/complete_qualified_path.rs196
1 files changed, 114 insertions, 82 deletions
diff --git a/crates/ra_ide/src/completion/complete_qualified_path.rs b/crates/ra_ide/src/completion/complete_qualified_path.rs
index 9f795e441..dd10f74e6 100644
--- a/crates/ra_ide/src/completion/complete_qualified_path.rs
+++ b/crates/ra_ide/src/completion/complete_qualified_path.rs
@@ -57,9 +57,7 @@ pub(super) fn complete_qualified_path(acc: &mut Completions, ctx: &CompletionCon
57 } 57 }
58 match item { 58 match item {
59 hir::AssocItem::Function(func) => { 59 hir::AssocItem::Function(func) => {
60 if !func.has_self_param(ctx.db) { 60 acc.add_function(ctx, func, None);
61 acc.add_function(ctx, func, None);
62 }
63 } 61 }
64 hir::AssocItem::Const(ct) => acc.add_const(ctx, ct), 62 hir::AssocItem::Const(ct) => acc.add_const(ctx, ct),
65 hir::AssocItem::TypeAlias(ty) => acc.add_type_alias(ctx, ty), 63 hir::AssocItem::TypeAlias(ty) => acc.add_type_alias(ctx, ty),
@@ -86,9 +84,7 @@ pub(super) fn complete_qualified_path(acc: &mut Completions, ctx: &CompletionCon
86 } 84 }
87 match item { 85 match item {
88 hir::AssocItem::Function(func) => { 86 hir::AssocItem::Function(func) => {
89 if !func.has_self_param(ctx.db) { 87 acc.add_function(ctx, func, None);
90 acc.add_function(ctx, func, None);
91 }
92 } 88 }
93 hir::AssocItem::Const(ct) => acc.add_const(ctx, ct), 89 hir::AssocItem::Const(ct) => acc.add_const(ctx, ct),
94 hir::AssocItem::TypeAlias(ty) => acc.add_type_alias(ctx, ty), 90 hir::AssocItem::TypeAlias(ty) => acc.add_type_alias(ctx, ty),
@@ -166,8 +162,8 @@ mod tests {
166 [ 162 [
167 CompletionItem { 163 CompletionItem {
168 label: "my", 164 label: "my",
169 source_range: [27; 29), 165 source_range: 27..29,
170 delete: [27; 29), 166 delete: 27..29,
171 insert: "my", 167 insert: "my",
172 kind: Module, 168 kind: Module,
173 documentation: Documentation( 169 documentation: Documentation(
@@ -197,15 +193,15 @@ mod tests {
197 [ 193 [
198 CompletionItem { 194 CompletionItem {
199 label: "Foo", 195 label: "Foo",
200 source_range: [31; 31), 196 source_range: 31..31,
201 delete: [31; 31), 197 delete: 31..31,
202 insert: "Foo", 198 insert: "Foo",
203 kind: Struct, 199 kind: Struct,
204 }, 200 },
205 CompletionItem { 201 CompletionItem {
206 label: "PublicBar", 202 label: "PublicBar",
207 source_range: [31; 31), 203 source_range: 31..31,
208 delete: [31; 31), 204 delete: 31..31,
209 insert: "PublicBar", 205 insert: "PublicBar",
210 kind: Struct, 206 kind: Struct,
211 }, 207 },
@@ -230,8 +226,8 @@ mod tests {
230 [ 226 [
231 CompletionItem { 227 CompletionItem {
232 label: "Bar", 228 label: "Bar",
233 source_range: [30; 30), 229 source_range: 30..30,
234 delete: [30; 30), 230 delete: 30..30,
235 insert: "Bar", 231 insert: "Bar",
236 kind: Struct, 232 kind: Struct,
237 }, 233 },
@@ -256,15 +252,15 @@ mod tests {
256 [ 252 [
257 CompletionItem { 253 CompletionItem {
258 label: "Spam", 254 label: "Spam",
259 source_range: [11; 13), 255 source_range: 11..13,
260 delete: [11; 13), 256 delete: 11..13,
261 insert: "Spam", 257 insert: "Spam",
262 kind: Struct, 258 kind: Struct,
263 }, 259 },
264 CompletionItem { 260 CompletionItem {
265 label: "foo", 261 label: "foo",
266 source_range: [11; 13), 262 source_range: 11..13,
267 delete: [11; 13), 263 delete: 11..13,
268 insert: "foo", 264 insert: "foo",
269 kind: Module, 265 kind: Module,
270 }, 266 },
@@ -289,15 +285,15 @@ mod tests {
289 [ 285 [
290 CompletionItem { 286 CompletionItem {
291 label: "Spam", 287 label: "Spam",
292 source_range: [12; 14), 288 source_range: 12..14,
293 delete: [12; 14), 289 delete: 12..14,
294 insert: "Spam", 290 insert: "Spam",
295 kind: Struct, 291 kind: Struct,
296 }, 292 },
297 CompletionItem { 293 CompletionItem {
298 label: "foo", 294 label: "foo",
299 source_range: [12; 14), 295 source_range: 12..14,
300 delete: [12; 14), 296 delete: 12..14,
301 insert: "foo", 297 insert: "foo",
302 kind: Module, 298 kind: Module,
303 }, 299 },
@@ -326,8 +322,8 @@ mod tests {
326 [ 322 [
327 CompletionItem { 323 CompletionItem {
328 label: "Spam", 324 label: "Spam",
329 source_range: [23; 25), 325 source_range: 23..25,
330 delete: [23; 25), 326 delete: 23..25,
331 insert: "Spam", 327 insert: "Spam",
332 kind: Struct, 328 kind: Struct,
333 }, 329 },
@@ -356,8 +352,8 @@ mod tests {
356 [ 352 [
357 CompletionItem { 353 CompletionItem {
358 label: "Bar(…)", 354 label: "Bar(…)",
359 source_range: [116; 116), 355 source_range: 116..116,
360 delete: [116; 116), 356 delete: 116..116,
361 insert: "Bar($0)", 357 insert: "Bar($0)",
362 kind: EnumVariant, 358 kind: EnumVariant,
363 lookup: "Bar", 359 lookup: "Bar",
@@ -369,8 +365,8 @@ mod tests {
369 }, 365 },
370 CompletionItem { 366 CompletionItem {
371 label: "Foo", 367 label: "Foo",
372 source_range: [116; 116), 368 source_range: 116..116,
373 delete: [116; 116), 369 delete: 116..116,
374 insert: "Foo", 370 insert: "Foo",
375 kind: EnumVariant, 371 kind: EnumVariant,
376 detail: "()", 372 detail: "()",
@@ -406,8 +402,8 @@ mod tests {
406 [ 402 [
407 CompletionItem { 403 CompletionItem {
408 label: "Bar(…)", 404 label: "Bar(…)",
409 source_range: [180; 180), 405 source_range: 180..180,
410 delete: [180; 180), 406 delete: 180..180,
411 insert: "Bar($0)", 407 insert: "Bar($0)",
412 kind: EnumVariant, 408 kind: EnumVariant,
413 lookup: "Bar", 409 lookup: "Bar",
@@ -419,8 +415,8 @@ mod tests {
419 }, 415 },
420 CompletionItem { 416 CompletionItem {
421 label: "Foo", 417 label: "Foo",
422 source_range: [180; 180), 418 source_range: 180..180,
423 delete: [180; 180), 419 delete: 180..180,
424 insert: "Foo", 420 insert: "Foo",
425 kind: EnumVariant, 421 kind: EnumVariant,
426 detail: "()", 422 detail: "()",
@@ -430,8 +426,8 @@ mod tests {
430 }, 426 },
431 CompletionItem { 427 CompletionItem {
432 label: "S(…)", 428 label: "S(…)",
433 source_range: [180; 180), 429 source_range: 180..180,
434 delete: [180; 180), 430 delete: 180..180,
435 insert: "S($0)", 431 insert: "S($0)",
436 kind: EnumVariant, 432 kind: EnumVariant,
437 lookup: "S", 433 lookup: "S",
@@ -467,8 +463,8 @@ mod tests {
467 [ 463 [
468 CompletionItem { 464 CompletionItem {
469 label: "m()", 465 label: "m()",
470 source_range: [100; 100), 466 source_range: 100..100,
471 delete: [100; 100), 467 delete: 100..100,
472 insert: "m()$0", 468 insert: "m()$0",
473 kind: Function, 469 kind: Function,
474 lookup: "m", 470 lookup: "m",
@@ -483,6 +479,42 @@ mod tests {
483 } 479 }
484 480
485 #[test] 481 #[test]
482 fn completes_struct_associated_method_with_self() {
483 assert_debug_snapshot!(
484 do_reference_completion(
485 "
486 //- /lib.rs
487 /// A Struct
488 struct S;
489
490 impl S {
491 /// An associated method
492 fn m(&self) { }
493 }
494
495 fn foo() { let _ = S::<|> }
496 "
497 ),
498 @r###"
499 [
500 CompletionItem {
501 label: "m()",
502 source_range: 105..105,
503 delete: 105..105,
504 insert: "m()$0",
505 kind: Method,
506 lookup: "m",
507 detail: "fn m(&self)",
508 documentation: Documentation(
509 "An associated method",
510 ),
511 },
512 ]
513 "###
514 );
515 }
516
517 #[test]
486 fn completes_struct_associated_const() { 518 fn completes_struct_associated_const() {
487 assert_debug_snapshot!( 519 assert_debug_snapshot!(
488 do_reference_completion( 520 do_reference_completion(
@@ -503,8 +535,8 @@ mod tests {
503 [ 535 [
504 CompletionItem { 536 CompletionItem {
505 label: "C", 537 label: "C",
506 source_range: [107; 107), 538 source_range: 107..107,
507 delete: [107; 107), 539 delete: 107..107,
508 insert: "C", 540 insert: "C",
509 kind: Const, 541 kind: Const,
510 detail: "const C: i32 = 42;", 542 detail: "const C: i32 = 42;",
@@ -538,8 +570,8 @@ mod tests {
538 [ 570 [
539 CompletionItem { 571 CompletionItem {
540 label: "T", 572 label: "T",
541 source_range: [101; 101), 573 source_range: 101..101,
542 delete: [101; 101), 574 delete: 101..101,
543 insert: "T", 575 insert: "T",
544 kind: TypeAlias, 576 kind: TypeAlias,
545 detail: "type T = i32;", 577 detail: "type T = i32;",
@@ -578,24 +610,24 @@ mod tests {
578 [ 610 [
579 CompletionItem { 611 CompletionItem {
580 label: "PUBLIC_CONST", 612 label: "PUBLIC_CONST",
581 source_range: [302; 302), 613 source_range: 302..302,
582 delete: [302; 302), 614 delete: 302..302,
583 insert: "PUBLIC_CONST", 615 insert: "PUBLIC_CONST",
584 kind: Const, 616 kind: Const,
585 detail: "pub(super) const PUBLIC_CONST: u32 = 1;", 617 detail: "pub(super) const PUBLIC_CONST: u32 = 1;",
586 }, 618 },
587 CompletionItem { 619 CompletionItem {
588 label: "PublicType", 620 label: "PublicType",
589 source_range: [302; 302), 621 source_range: 302..302,
590 delete: [302; 302), 622 delete: 302..302,
591 insert: "PublicType", 623 insert: "PublicType",
592 kind: TypeAlias, 624 kind: TypeAlias,
593 detail: "pub(super) type PublicType = u32;", 625 detail: "pub(super) type PublicType = u32;",
594 }, 626 },
595 CompletionItem { 627 CompletionItem {
596 label: "public_method()", 628 label: "public_method()",
597 source_range: [302; 302), 629 source_range: 302..302,
598 delete: [302; 302), 630 delete: 302..302,
599 insert: "public_method()$0", 631 insert: "public_method()$0",
600 kind: Function, 632 kind: Function,
601 lookup: "public_method", 633 lookup: "public_method",
@@ -627,8 +659,8 @@ mod tests {
627 [ 659 [
628 CompletionItem { 660 CompletionItem {
629 label: "m()", 661 label: "m()",
630 source_range: [100; 100), 662 source_range: 100..100,
631 delete: [100; 100), 663 delete: 100..100,
632 insert: "m()$0", 664 insert: "m()$0",
633 kind: Function, 665 kind: Function,
634 lookup: "m", 666 lookup: "m",
@@ -663,8 +695,8 @@ mod tests {
663 [ 695 [
664 CompletionItem { 696 CompletionItem {
665 label: "m()", 697 label: "m()",
666 source_range: [101; 101), 698 source_range: 101..101,
667 delete: [101; 101), 699 delete: 101..101,
668 insert: "m()$0", 700 insert: "m()$0",
669 kind: Function, 701 kind: Function,
670 lookup: "m", 702 lookup: "m",
@@ -696,8 +728,8 @@ mod tests {
696 [ 728 [
697 CompletionItem { 729 CompletionItem {
698 label: "bar", 730 label: "bar",
699 source_range: [9; 9), 731 source_range: 9..9,
700 delete: [9; 9), 732 delete: 9..9,
701 insert: "bar", 733 insert: "bar",
702 kind: Module, 734 kind: Module,
703 }, 735 },
@@ -724,8 +756,8 @@ mod tests {
724 [ 756 [
725 CompletionItem { 757 CompletionItem {
726 label: "m()", 758 label: "m()",
727 source_range: [73; 73), 759 source_range: 73..73,
728 delete: [73; 73), 760 delete: 73..73,
729 insert: "m()$0", 761 insert: "m()$0",
730 kind: Function, 762 kind: Function,
731 lookup: "m", 763 lookup: "m",
@@ -760,8 +792,8 @@ mod tests {
760 [ 792 [
761 CompletionItem { 793 CompletionItem {
762 label: "m()", 794 label: "m()",
763 source_range: [99; 99), 795 source_range: 99..99,
764 delete: [99; 99), 796 delete: 99..99,
765 insert: "m()$0", 797 insert: "m()$0",
766 kind: Function, 798 kind: Function,
767 lookup: "m", 799 lookup: "m",
@@ -796,8 +828,8 @@ mod tests {
796 [ 828 [
797 CompletionItem { 829 CompletionItem {
798 label: "m()", 830 label: "m()",
799 source_range: [110; 110), 831 source_range: 110..110,
800 delete: [110; 110), 832 delete: 110..110,
801 insert: "m()$0", 833 insert: "m()$0",
802 kind: Function, 834 kind: Function,
803 lookup: "m", 835 lookup: "m",
@@ -830,8 +862,8 @@ mod tests {
830 [ 862 [
831 CompletionItem { 863 CompletionItem {
832 label: "bar()", 864 label: "bar()",
833 source_range: [185; 185), 865 source_range: 185..185,
834 delete: [185; 185), 866 delete: 185..185,
835 insert: "bar()$0", 867 insert: "bar()$0",
836 kind: Function, 868 kind: Function,
837 lookup: "bar", 869 lookup: "bar",
@@ -839,8 +871,8 @@ mod tests {
839 }, 871 },
840 CompletionItem { 872 CompletionItem {
841 label: "foo()", 873 label: "foo()",
842 source_range: [185; 185), 874 source_range: 185..185,
843 delete: [185; 185), 875 delete: 185..185,
844 insert: "foo()$0", 876 insert: "foo()$0",
845 kind: Function, 877 kind: Function,
846 lookup: "foo", 878 lookup: "foo",
@@ -870,16 +902,16 @@ mod tests {
870 [ 902 [
871 CompletionItem { 903 CompletionItem {
872 label: "foo!(…)", 904 label: "foo!(…)",
873 source_range: [179; 179), 905 source_range: 179..179,
874 delete: [179; 179), 906 delete: 179..179,
875 insert: "foo!($0)", 907 insert: "foo!($0)",
876 kind: Macro, 908 kind: Macro,
877 detail: "#[macro_export]\nmacro_rules! foo", 909 detail: "#[macro_export]\nmacro_rules! foo",
878 }, 910 },
879 CompletionItem { 911 CompletionItem {
880 label: "main()", 912 label: "main()",
881 source_range: [179; 179), 913 source_range: 179..179,
882 delete: [179; 179), 914 delete: 179..179,
883 insert: "main()$0", 915 insert: "main()$0",
884 kind: Function, 916 kind: Function,
885 lookup: "main", 917 lookup: "main",
@@ -915,22 +947,22 @@ mod tests {
915 [ 947 [
916 CompletionItem { 948 CompletionItem {
917 label: "RIGHT_CONST", 949 label: "RIGHT_CONST",
918 source_range: [57; 57), 950 source_range: 57..57,
919 delete: [57; 57), 951 delete: 57..57,
920 insert: "RIGHT_CONST", 952 insert: "RIGHT_CONST",
921 kind: Const, 953 kind: Const,
922 }, 954 },
923 CompletionItem { 955 CompletionItem {
924 label: "RightType", 956 label: "RightType",
925 source_range: [57; 57), 957 source_range: 57..57,
926 delete: [57; 57), 958 delete: 57..57,
927 insert: "RightType", 959 insert: "RightType",
928 kind: Struct, 960 kind: Struct,
929 }, 961 },
930 CompletionItem { 962 CompletionItem {
931 label: "right_fn()", 963 label: "right_fn()",
932 source_range: [57; 57), 964 source_range: 57..57,
933 delete: [57; 57), 965 delete: 57..57,
934 insert: "right_fn()$0", 966 insert: "right_fn()$0",
935 kind: Function, 967 kind: Function,
936 lookup: "right_fn", 968 lookup: "right_fn",
@@ -954,8 +986,8 @@ mod tests {
954 [ 986 [
955 CompletionItem { 987 CompletionItem {
956 label: "foo()", 988 label: "foo()",
957 source_range: [93; 94), 989 source_range: 93..94,
958 delete: [93; 94), 990 delete: 93..94,
959 insert: "foo()$0", 991 insert: "foo()$0",
960 kind: Function, 992 kind: Function,
961 lookup: "foo", 993 lookup: "foo",
@@ -963,8 +995,8 @@ mod tests {
963 }, 995 },
964 CompletionItem { 996 CompletionItem {
965 label: "main()", 997 label: "main()",
966 source_range: [93; 94), 998 source_range: 93..94,
967 delete: [93; 94), 999 delete: 93..94,
968 insert: "main()$0", 1000 insert: "main()$0",
969 kind: Function, 1001 kind: Function,
970 lookup: "main", 1002 lookup: "main",
@@ -993,15 +1025,15 @@ mod tests {
993 [ 1025 [
994 CompletionItem { 1026 CompletionItem {
995 label: "z", 1027 label: "z",
996 source_range: [57; 57), 1028 source_range: 57..57,
997 delete: [57; 57), 1029 delete: 57..57,
998 insert: "z", 1030 insert: "z",
999 kind: Module, 1031 kind: Module,
1000 }, 1032 },
1001 CompletionItem { 1033 CompletionItem {
1002 label: "z()", 1034 label: "z()",
1003 source_range: [57; 57), 1035 source_range: 57..57,
1004 delete: [57; 57), 1036 delete: 57..57,
1005 insert: "z()$0", 1037 insert: "z()$0",
1006 kind: Function, 1038 kind: Function,
1007 lookup: "z", 1039 lookup: "z",
@@ -1032,8 +1064,8 @@ mod tests {
1032 [ 1064 [
1033 CompletionItem { 1065 CompletionItem {
1034 label: "new()", 1066 label: "new()",
1035 source_range: [292; 292), 1067 source_range: 292..292,
1036 delete: [292; 292), 1068 delete: 292..292,
1037 insert: "new()$0", 1069 insert: "new()$0",
1038 kind: Function, 1070 kind: Function,
1039 lookup: "new", 1071 lookup: "new",