diff options
Diffstat (limited to 'crates/ra_ide_api/src/completion/complete_scope.rs')
-rw-r--r-- | crates/ra_ide_api/src/completion/complete_scope.rs | 679 |
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 | } |