diff options
Diffstat (limited to 'crates/ra_ide/src/completion/complete_qualified_path.rs')
-rw-r--r-- | crates/ra_ide/src/completion/complete_qualified_path.rs | 196 |
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", |