aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide_api/src/completion/complete_scope.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_ide_api/src/completion/complete_scope.rs')
-rw-r--r--crates/ra_ide_api/src/completion/complete_scope.rs679
1 files changed, 376 insertions, 303 deletions
diff --git a/crates/ra_ide_api/src/completion/complete_scope.rs b/crates/ra_ide_api/src/completion/complete_scope.rs
index 515a6285c..4e56de3f5 100644
--- a/crates/ra_ide_api/src/completion/complete_scope.rs
+++ b/crates/ra_ide_api/src/completion/complete_scope.rs
@@ -145,32 +145,35 @@ mod tests {
145 } 145 }
146 " 146 "
147 ), 147 ),
148 @r###"[ 148 @r###"
149 CompletionItem { 149 [
150 label: "quux", 150 CompletionItem {
151 source_range: [91; 91), 151 label: "quux(…)",
152 delete: [91; 91), 152 source_range: [91; 91),
153 insert: "quux($0)", 153 delete: [91; 91),
154 kind: Function, 154 insert: "quux($0)",
155 detail: "fn quux(x: i32)", 155 kind: Function,
156 }, 156 lookup: "quux",
157 CompletionItem { 157 detail: "fn quux(x: i32)",
158 label: "x", 158 },
159 source_range: [91; 91), 159 CompletionItem {
160 delete: [91; 91), 160 label: "x",
161 insert: "x", 161 source_range: [91; 91),
162 kind: Binding, 162 delete: [91; 91),
163 detail: "i32", 163 insert: "x",
164 }, 164 kind: Binding,
165 CompletionItem { 165 detail: "i32",
166 label: "y", 166 },
167 source_range: [91; 91), 167 CompletionItem {
168 delete: [91; 91), 168 label: "y",
169 insert: "y", 169 source_range: [91; 91),
170 kind: Binding, 170 delete: [91; 91),
171 detail: "i32", 171 insert: "y",
172 }, 172 kind: Binding,
173]"### 173 detail: "i32",
174 },
175 ]
176 "###
174 ); 177 );
175 } 178 }
176 179
@@ -190,31 +193,34 @@ mod tests {
190 } 193 }
191 " 194 "
192 ), 195 ),
193 @r###"[ 196 @r###"
194 CompletionItem { 197 [
195 label: "a", 198 CompletionItem {
196 source_range: [242; 242), 199 label: "a",
197 delete: [242; 242), 200 source_range: [242; 242),
198 insert: "a", 201 delete: [242; 242),
199 kind: Binding, 202 insert: "a",
200 }, 203 kind: Binding,
201 CompletionItem { 204 },
202 label: "b", 205 CompletionItem {
203 source_range: [242; 242), 206 label: "b",
204 delete: [242; 242), 207 source_range: [242; 242),
205 insert: "b", 208 delete: [242; 242),
206 kind: Binding, 209 insert: "b",
207 detail: "i32", 210 kind: Binding,
208 }, 211 detail: "i32",
209 CompletionItem { 212 },
210 label: "quux", 213 CompletionItem {
211 source_range: [242; 242), 214 label: "quux()",
212 delete: [242; 242), 215 source_range: [242; 242),
213 insert: "quux()$0", 216 delete: [242; 242),
214 kind: Function, 217 insert: "quux()$0",
215 detail: "fn quux()", 218 kind: Function,
216 }, 219 lookup: "quux",
217]"### 220 detail: "fn quux()",
221 },
222 ]
223 "###
218 ); 224 );
219 } 225 }
220 226
@@ -230,23 +236,26 @@ mod tests {
230 } 236 }
231 " 237 "
232 ), 238 ),
233 @r###"[ 239 @r###"
234 CompletionItem { 240 [
235 label: "quux", 241 CompletionItem {
236 source_range: [95; 95), 242 label: "quux()",
237 delete: [95; 95), 243 source_range: [95; 95),
238 insert: "quux()$0", 244 delete: [95; 95),
239 kind: Function, 245 insert: "quux()$0",
240 detail: "fn quux()", 246 kind: Function,
241 }, 247 lookup: "quux",
242 CompletionItem { 248 detail: "fn quux()",
243 label: "x", 249 },
244 source_range: [95; 95), 250 CompletionItem {
245 delete: [95; 95), 251 label: "x",
246 insert: "x", 252 source_range: [95; 95),
247 kind: Binding, 253 delete: [95; 95),
248 }, 254 insert: "x",
249]"### 255 kind: Binding,
256 },
257 ]
258 "###
250 ); 259 );
251 } 260 }
252 261
@@ -260,23 +269,26 @@ mod tests {
260 } 269 }
261 " 270 "
262 ), 271 ),
263 @r###"[ 272 @r###"
264 CompletionItem { 273 [
265 label: "T", 274 CompletionItem {
266 source_range: [52; 52), 275 label: "T",
267 delete: [52; 52), 276 source_range: [52; 52),
268 insert: "T", 277 delete: [52; 52),
269 kind: TypeParam, 278 insert: "T",
270 }, 279 kind: TypeParam,
271 CompletionItem { 280 },
272 label: "quux", 281 CompletionItem {
273 source_range: [52; 52), 282 label: "quux()",
274 delete: [52; 52), 283 source_range: [52; 52),
275 insert: "quux()$0", 284 delete: [52; 52),
276 kind: Function, 285 insert: "quux()$0",
277 detail: "fn quux<T>()", 286 kind: Function,
278 }, 287 lookup: "quux",
279]"### 288 detail: "fn quux<T>()",
289 },
290 ]
291 "###
280 ); 292 );
281 } 293 }
282 294
@@ -290,22 +302,56 @@ mod tests {
290 } 302 }
291 " 303 "
292 ), 304 ),
293 @r###"[ 305 @r###"
294 CompletionItem { 306 [
295 label: "T", 307 CompletionItem {
296 source_range: [54; 54), 308 label: "T",
297 delete: [54; 54), 309 source_range: [54; 54),
298 insert: "T", 310 delete: [54; 54),
299 kind: TypeParam, 311 insert: "T",
300 }, 312 kind: TypeParam,
301 CompletionItem { 313 },
302 label: "X", 314 CompletionItem {
303 source_range: [54; 54), 315 label: "X<…>",
304 delete: [54; 54), 316 source_range: [54; 54),
305 insert: "X", 317 delete: [54; 54),
306 kind: Struct, 318 insert: "X<$0>",
307 }, 319 kind: Struct,
308]"### 320 lookup: "X",
321 },
322 ]
323 "###
324 );
325 }
326
327 #[test]
328 fn completes_self_in_enum() {
329 assert_debug_snapshot!(
330 do_reference_completion(
331 r"
332 enum X {
333 Y(<|>)
334 }
335 "
336 ),
337 @r###"
338 [
339 CompletionItem {
340 label: "Self",
341 source_range: [48; 48),
342 delete: [48; 48),
343 insert: "Self",
344 kind: TypeParam,
345 },
346 CompletionItem {
347 label: "X",
348 source_range: [48; 48),
349 delete: [48; 48),
350 insert: "X",
351 kind: Enum,
352 },
353 ]
354 "###
309 ); 355 );
310 } 356 }
311 357
@@ -321,30 +367,33 @@ mod tests {
321 } 367 }
322 " 368 "
323 ), 369 ),
324 @r###"[ 370 @r###"
325 CompletionItem { 371 [
326 label: "Baz", 372 CompletionItem {
327 source_range: [105; 105), 373 label: "Baz",
328 delete: [105; 105), 374 source_range: [105; 105),
329 insert: "Baz", 375 delete: [105; 105),
330 kind: Enum, 376 insert: "Baz",
331 }, 377 kind: Enum,
332 CompletionItem { 378 },
333 label: "Foo", 379 CompletionItem {
334 source_range: [105; 105), 380 label: "Foo",
335 delete: [105; 105), 381 source_range: [105; 105),
336 insert: "Foo", 382 delete: [105; 105),
337 kind: Struct, 383 insert: "Foo",
338 }, 384 kind: Struct,
339 CompletionItem { 385 },
340 label: "quux", 386 CompletionItem {
341 source_range: [105; 105), 387 label: "quux()",
342 delete: [105; 105), 388 source_range: [105; 105),
343 insert: "quux()$0", 389 delete: [105; 105),
344 kind: Function, 390 insert: "quux()$0",
345 detail: "fn quux()", 391 kind: Function,
346 }, 392 lookup: "quux",
347]"### 393 detail: "fn quux()",
394 },
395 ]
396 "###
348 ); 397 );
349 } 398 }
350 399
@@ -384,23 +433,26 @@ mod tests {
384 } 433 }
385 " 434 "
386 ), 435 ),
387 @r###"[ 436 @r###"
388 CompletionItem { 437 [
389 label: "Bar", 438 CompletionItem {
390 source_range: [117; 117), 439 label: "Bar",
391 delete: [117; 117), 440 source_range: [117; 117),
392 insert: "Bar", 441 delete: [117; 117),
393 kind: Struct, 442 insert: "Bar",
394 }, 443 kind: Struct,
395 CompletionItem { 444 },
396 label: "quux", 445 CompletionItem {
397 source_range: [117; 117), 446 label: "quux()",
398 delete: [117; 117), 447 source_range: [117; 117),
399 insert: "quux()$0", 448 delete: [117; 117),
400 kind: Function, 449 insert: "quux()$0",
401 detail: "fn quux()", 450 kind: Function,
402 }, 451 lookup: "quux",
403]"### 452 detail: "fn quux()",
453 },
454 ]
455 "###
404 ); 456 );
405 } 457 }
406 458
@@ -413,23 +465,26 @@ mod tests {
413 fn x() -> <|> 465 fn x() -> <|>
414 " 466 "
415 ), 467 ),
416 @r###"[ 468 @r###"
417 CompletionItem { 469 [
418 label: "Foo", 470 CompletionItem {
419 source_range: [55; 55), 471 label: "Foo",
420 delete: [55; 55), 472 source_range: [55; 55),
421 insert: "Foo", 473 delete: [55; 55),
422 kind: Struct, 474 insert: "Foo",
423 }, 475 kind: Struct,
424 CompletionItem { 476 },
425 label: "x", 477 CompletionItem {
426 source_range: [55; 55), 478 label: "x()",
427 delete: [55; 55), 479 source_range: [55; 55),
428 insert: "x()$0", 480 delete: [55; 55),
429 kind: Function, 481 insert: "x()$0",
430 detail: "fn x()", 482 kind: Function,
431 }, 483 lookup: "x",
432]"### 484 detail: "fn x()",
485 },
486 ]
487 "###
433 ); 488 );
434 } 489 }
435 490
@@ -447,24 +502,27 @@ mod tests {
447 } 502 }
448 " 503 "
449 ), 504 ),
450 @r###"[ 505 @r###"
451 CompletionItem { 506 [
452 label: "bar", 507 CompletionItem {
453 source_range: [146; 146), 508 label: "bar",
454 delete: [146; 146), 509 source_range: [146; 146),
455 insert: "bar", 510 delete: [146; 146),
456 kind: Binding, 511 insert: "bar",
457 detail: "i32", 512 kind: Binding,
458 }, 513 detail: "i32",
459 CompletionItem { 514 },
460 label: "foo", 515 CompletionItem {
461 source_range: [146; 146), 516 label: "foo()",
462 delete: [146; 146), 517 source_range: [146; 146),
463 insert: "foo()$0", 518 delete: [146; 146),
464 kind: Function, 519 insert: "foo()$0",
465 detail: "fn foo()", 520 kind: Function,
466 }, 521 lookup: "foo",
467]"### 522 detail: "fn foo()",
523 },
524 ]
525 "###
468 ); 526 );
469 } 527 }
470 528
@@ -509,30 +567,33 @@ mod tests {
509 } 567 }
510 " 568 "
511 ), 569 ),
512 @r#"[ 570 @r###"
513 CompletionItem { 571 [
514 label: "Option", 572 CompletionItem {
515 source_range: [18; 18), 573 label: "Option",
516 delete: [18; 18), 574 source_range: [18; 18),
517 insert: "Option", 575 delete: [18; 18),
518 kind: Struct, 576 insert: "Option",
519 }, 577 kind: Struct,
520 CompletionItem { 578 },
521 label: "foo", 579 CompletionItem {
522 source_range: [18; 18), 580 label: "foo()",
523 delete: [18; 18), 581 source_range: [18; 18),
524 insert: "foo()$0", 582 delete: [18; 18),
525 kind: Function, 583 insert: "foo()$0",
526 detail: "fn foo()", 584 kind: Function,
527 }, 585 lookup: "foo",
528 CompletionItem { 586 detail: "fn foo()",
529 label: "std", 587 },
530 source_range: [18; 18), 588 CompletionItem {
531 delete: [18; 18), 589 label: "std",
532 insert: "std", 590 source_range: [18; 18),
533 kind: Module, 591 delete: [18; 18),
534 }, 592 insert: "std",
535]"# 593 kind: Module,
594 },
595 ]
596 "###
536 ); 597 );
537 } 598 }
538 599
@@ -569,54 +630,57 @@ mod tests {
569 } 630 }
570 " 631 "
571 ), 632 ),
572 @r##"[ 633 @r###"
573 CompletionItem { 634 [
574 label: "bar!", 635 CompletionItem {
575 source_range: [252; 252), 636 label: "bar!",
576 delete: [252; 252), 637 source_range: [252; 252),
577 insert: "bar!($0)", 638 delete: [252; 252),
578 kind: Macro, 639 insert: "bar!($0)",
579 detail: "macro_rules! bar", 640 kind: Macro,
580 }, 641 detail: "macro_rules! bar",
581 CompletionItem { 642 },
582 label: "baz!", 643 CompletionItem {
583 source_range: [252; 252), 644 label: "baz!",
584 delete: [252; 252), 645 source_range: [252; 252),
585 insert: "baz!($0)", 646 delete: [252; 252),
586 kind: Macro, 647 insert: "baz!($0)",
587 detail: "#[macro_export]\nmacro_rules! baz", 648 kind: Macro,
588 }, 649 detail: "#[macro_export]\nmacro_rules! baz",
589 CompletionItem { 650 },
590 label: "foo!", 651 CompletionItem {
591 source_range: [252; 252), 652 label: "foo!",
592 delete: [252; 252), 653 source_range: [252; 252),
593 insert: "foo!($0)", 654 delete: [252; 252),
594 kind: Macro, 655 insert: "foo!($0)",
595 detail: "macro_rules! foo", 656 kind: Macro,
596 }, 657 detail: "macro_rules! foo",
597 CompletionItem { 658 },
598 label: "m1", 659 CompletionItem {
599 source_range: [252; 252), 660 label: "m1",
600 delete: [252; 252), 661 source_range: [252; 252),
601 insert: "m1", 662 delete: [252; 252),
602 kind: Module, 663 insert: "m1",
603 }, 664 kind: Module,
604 CompletionItem { 665 },
605 label: "m2", 666 CompletionItem {
606 source_range: [252; 252), 667 label: "m2",
607 delete: [252; 252), 668 source_range: [252; 252),
608 insert: "m2", 669 delete: [252; 252),
609 kind: Module, 670 insert: "m2",
610 }, 671 kind: Module,
611 CompletionItem { 672 },
612 label: "main", 673 CompletionItem {
613 source_range: [252; 252), 674 label: "main()",
614 delete: [252; 252), 675 source_range: [252; 252),
615 insert: "main()$0", 676 delete: [252; 252),
616 kind: Function, 677 insert: "main()$0",
617 detail: "fn main()", 678 kind: Function,
618 }, 679 lookup: "main",
619]"## 680 detail: "fn main()",
681 },
682 ]
683 "###
620 ); 684 );
621 } 685 }
622 686
@@ -635,24 +699,27 @@ mod tests {
635 } 699 }
636 " 700 "
637 ), 701 ),
638 @r##"[ 702 @r###"
639 CompletionItem { 703 [
640 label: "foo", 704 CompletionItem {
641 source_range: [49; 49), 705 label: "foo!",
642 delete: [49; 49), 706 source_range: [49; 49),
643 insert: "foo()$0", 707 delete: [49; 49),
644 kind: Function, 708 insert: "foo!($0)",
645 detail: "fn foo()", 709 kind: Macro,
646 }, 710 detail: "macro_rules! foo",
647 CompletionItem { 711 },
648 label: "foo!", 712 CompletionItem {
649 source_range: [49; 49), 713 label: "foo()",
650 delete: [49; 49), 714 source_range: [49; 49),
651 insert: "foo!($0)", 715 delete: [49; 49),
652 kind: Macro, 716 insert: "foo()$0",
653 detail: "macro_rules! foo", 717 kind: Function,
654 }, 718 lookup: "foo",
655]"## 719 detail: "fn foo()",
720 },
721 ]
722 "###
656 ); 723 );
657 } 724 }
658 725
@@ -671,24 +738,27 @@ mod tests {
671 } 738 }
672 " 739 "
673 ), 740 ),
674 @r##"[ 741 @r###"
675 CompletionItem { 742 [
676 label: "foo!", 743 CompletionItem {
677 source_range: [57; 57), 744 label: "foo!",
678 delete: [57; 57), 745 source_range: [57; 57),
679 insert: "foo!($0)", 746 delete: [57; 57),
680 kind: Macro, 747 insert: "foo!($0)",
681 detail: "macro_rules! foo", 748 kind: Macro,
682 }, 749 detail: "macro_rules! foo",
683 CompletionItem { 750 },
684 label: "main", 751 CompletionItem {
685 source_range: [57; 57), 752 label: "main()",
686 delete: [57; 57), 753 source_range: [57; 57),
687 insert: "main()$0", 754 delete: [57; 57),
688 kind: Function, 755 insert: "main()$0",
689 detail: "fn main()", 756 kind: Function,
690 }, 757 lookup: "main",
691]"## 758 detail: "fn main()",
759 },
760 ]
761 "###
692 ); 762 );
693 } 763 }
694 764
@@ -707,24 +777,27 @@ mod tests {
707 } 777 }
708 " 778 "
709 ), 779 ),
710 @r##"[ 780 @r###"
711 CompletionItem { 781 [
712 label: "foo!", 782 CompletionItem {
713 source_range: [50; 50), 783 label: "foo!",
714 delete: [50; 50), 784 source_range: [50; 50),
715 insert: "foo!($0)", 785 delete: [50; 50),
716 kind: Macro, 786 insert: "foo!($0)",
717 detail: "macro_rules! foo", 787 kind: Macro,
718 }, 788 detail: "macro_rules! foo",
719 CompletionItem { 789 },
720 label: "main", 790 CompletionItem {
721 source_range: [50; 50), 791 label: "main()",
722 delete: [50; 50), 792 source_range: [50; 50),
723 insert: "main()$0", 793 delete: [50; 50),
724 kind: Function, 794 insert: "main()$0",
725 detail: "fn main()", 795 kind: Function,
726 }, 796 lookup: "main",
727]"## 797 detail: "fn main()",
798 },
799 ]
800 "###
728 ); 801 );
729 } 802 }
730} 803}