aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--crates/ra_ide/src/diagnostics.rs40
-rw-r--r--crates/ra_ide/src/extend_selection.rs12
-rw-r--r--crates/ra_ide/src/inlay_hints.rs178
-rw-r--r--crates/ra_ide/src/mock_analysis.rs12
-rw-r--r--crates/ra_ide/src/syntax_highlighting/tests.rs13
-rw-r--r--crates/ra_ide/src/typing/on_enter.rs13
6 files changed, 135 insertions, 133 deletions
diff --git a/crates/ra_ide/src/diagnostics.rs b/crates/ra_ide/src/diagnostics.rs
index 8cb0700b9..8a18bc18c 100644
--- a/crates/ra_ide/src/diagnostics.rs
+++ b/crates/ra_ide/src/diagnostics.rs
@@ -348,8 +348,10 @@ mod tests {
348 ); 348 );
349 } 349 }
350 350
351 fn check_apply_diagnostic_fix(before: &str, after: &str) { 351 fn check_apply_diagnostic_fix(ra_fixture_before: &str, ra_fixture_after: &str) {
352 let (analysis, file_id) = single_file(before); 352 let ra_fixture_after = &trim_indent(ra_fixture_after);
353 let (analysis, file_id) = single_file(ra_fixture_before);
354 let before = analysis.file_text(file_id).unwrap();
353 let diagnostic = analysis.diagnostics(file_id).unwrap().pop().unwrap(); 355 let diagnostic = analysis.diagnostics(file_id).unwrap().pop().unwrap();
354 let mut fix = diagnostic.fix.unwrap(); 356 let mut fix = diagnostic.fix.unwrap();
355 let edit = fix.source_change.source_file_edits.pop().unwrap().edit; 357 let edit = fix.source_change.source_file_edits.pop().unwrap().edit;
@@ -358,7 +360,7 @@ mod tests {
358 edit.apply(&mut actual); 360 edit.apply(&mut actual);
359 actual 361 actual
360 }; 362 };
361 assert_eq_text!(after, &actual); 363 assert_eq_text!(ra_fixture_after, &actual);
362 } 364 }
363 365
364 /// Takes a multi-file input fixture with annotated cursor position and checks that no diagnostics 366 /// Takes a multi-file input fixture with annotated cursor position and checks that no diagnostics
@@ -709,7 +711,7 @@ mod tests {
709 [ 711 [
710 Diagnostic { 712 Diagnostic {
711 message: "Missing structure fields:\n- b\n", 713 message: "Missing structure fields:\n- b\n",
712 range: 224..233, 714 range: 127..136,
713 severity: Error, 715 severity: Error,
714 fix: Some( 716 fix: Some(
715 Fix { 717 Fix {
@@ -855,22 +857,22 @@ fn main() {
855 fn test_add_field_from_usage() { 857 fn test_add_field_from_usage() {
856 check_apply_diagnostic_fix( 858 check_apply_diagnostic_fix(
857 r" 859 r"
858 fn main() { 860fn main() {
859 Foo { bar: 3, baz: false}; 861 Foo { bar: 3, baz: false};
860 } 862}
861 struct Foo { 863struct Foo {
862 bar: i32 864 bar: i32
863 } 865}
864 ", 866",
865 r" 867 r"
866 fn main() { 868fn main() {
867 Foo { bar: 3, baz: false}; 869 Foo { bar: 3, baz: false};
868 } 870}
869 struct Foo { 871struct Foo {
870 bar: i32, 872 bar: i32,
871 baz: bool 873 baz: bool
872 } 874}
873 ", 875",
874 ) 876 )
875 } 877 }
876} 878}
diff --git a/crates/ra_ide/src/extend_selection.rs b/crates/ra_ide/src/extend_selection.rs
index a4bc93cdb..cb6b1a40d 100644
--- a/crates/ra_ide/src/extend_selection.rs
+++ b/crates/ra_ide/src/extend_selection.rs
@@ -315,17 +315,15 @@ fn adj_comments(comment: &ast::Comment, dir: Direction) -> ast::Comment {
315 315
316#[cfg(test)] 316#[cfg(test)]
317mod tests { 317mod tests {
318 use test_utils::extract_offset; 318 use crate::mock_analysis::single_file_with_position;
319
320 use crate::mock_analysis::single_file;
321 319
322 use super::*; 320 use super::*;
323 321
324 fn do_check(before: &str, afters: &[&str]) { 322 fn do_check(before: &str, afters: &[&str]) {
325 let (cursor, before) = extract_offset(before); 323 let (analysis, position) = single_file_with_position(&before);
326 let (analysis, file_id) = single_file(&before); 324 let before = analysis.file_text(position.file_id).unwrap();
327 let range = TextRange::empty(cursor); 325 let range = TextRange::empty(position.offset);
328 let mut frange = FileRange { file_id, range }; 326 let mut frange = FileRange { file_id: position.file_id, range };
329 327
330 for &after in afters { 328 for &after in afters {
331 frange.range = analysis.extend_selection(frange).unwrap(); 329 frange.range = analysis.extend_selection(frange).unwrap();
diff --git a/crates/ra_ide/src/inlay_hints.rs b/crates/ra_ide/src/inlay_hints.rs
index 7eb2cef73..3fd08b1e8 100644
--- a/crates/ra_ide/src/inlay_hints.rs
+++ b/crates/ra_ide/src/inlay_hints.rs
@@ -363,16 +363,17 @@ mod tests {
363 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig{ parameter_hints: true, type_hints: false, chaining_hints: false, max_length: None}).unwrap(), @r###" 363 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig{ parameter_hints: true, type_hints: false, chaining_hints: false, max_length: None}).unwrap(), @r###"
364 [ 364 [
365 InlayHint { 365 InlayHint {
366 range: 106..107, 366 range: 69..70,
367 kind: ParameterHint, 367 kind: ParameterHint,
368 label: "a", 368 label: "a",
369 }, 369 },
370 InlayHint { 370 InlayHint {
371 range: 109..110, 371 range: 72..73,
372 kind: ParameterHint, 372 kind: ParameterHint,
373 label: "b", 373 label: "b",
374 }, 374 },
375 ]"###); 375 ]
376 "###);
376 } 377 }
377 378
378 #[test] 379 #[test]
@@ -399,11 +400,12 @@ mod tests {
399 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig{ type_hints: true, parameter_hints: false, chaining_hints: false, max_length: None}).unwrap(), @r###" 400 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig{ type_hints: true, parameter_hints: false, chaining_hints: false, max_length: None}).unwrap(), @r###"
400 [ 401 [
401 InlayHint { 402 InlayHint {
402 range: 97..99, 403 range: 60..62,
403 kind: TypeHint, 404 kind: TypeHint,
404 label: "i32", 405 label: "i32",
405 }, 406 },
406 ]"###); 407 ]
408 "###);
407 } 409 }
408 #[test] 410 #[test]
409 fn default_generic_types_should_not_be_displayed() { 411 fn default_generic_types_should_not_be_displayed() {
@@ -423,12 +425,12 @@ fn main() {
423 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###" 425 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###"
424 [ 426 [
425 InlayHint { 427 InlayHint {
426 range: 69..71, 428 range: 68..70,
427 kind: TypeHint, 429 kind: TypeHint,
428 label: "Test<i32>", 430 label: "Test<i32>",
429 }, 431 },
430 InlayHint { 432 InlayHint {
431 range: 107..113, 433 range: 106..112,
432 kind: TypeHint, 434 kind: TypeHint,
433 label: "&Test<i32>", 435 label: "&Test<i32>",
434 }, 436 },
@@ -480,57 +482,57 @@ fn main() {
480 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###" 482 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###"
481 [ 483 [
482 InlayHint { 484 InlayHint {
483 range: 193..197, 485 range: 192..196,
484 kind: TypeHint, 486 kind: TypeHint,
485 label: "i32", 487 label: "i32",
486 }, 488 },
487 InlayHint { 489 InlayHint {
488 range: 236..244, 490 range: 235..243,
489 kind: TypeHint, 491 kind: TypeHint,
490 label: "i32", 492 label: "i32",
491 }, 493 },
492 InlayHint { 494 InlayHint {
493 range: 275..279, 495 range: 274..278,
494 kind: TypeHint, 496 kind: TypeHint,
495 label: "&str", 497 label: "&str",
496 }, 498 },
497 InlayHint { 499 InlayHint {
498 range: 539..543, 500 range: 538..542,
499 kind: TypeHint, 501 kind: TypeHint,
500 label: "(i32, char)", 502 label: "(i32, char)",
501 }, 503 },
502 InlayHint { 504 InlayHint {
503 range: 566..567, 505 range: 565..566,
504 kind: TypeHint, 506 kind: TypeHint,
505 label: "i32", 507 label: "i32",
506 }, 508 },
507 InlayHint { 509 InlayHint {
508 range: 570..571, 510 range: 569..570,
509 kind: TypeHint, 511 kind: TypeHint,
510 label: "i32", 512 label: "i32",
511 }, 513 },
512 InlayHint { 514 InlayHint {
513 range: 573..574, 515 range: 572..573,
514 kind: TypeHint, 516 kind: TypeHint,
515 label: "i32", 517 label: "i32",
516 }, 518 },
517 InlayHint { 519 InlayHint {
518 range: 577..578, 520 range: 576..577,
519 kind: TypeHint, 521 kind: TypeHint,
520 label: "f64", 522 label: "f64",
521 }, 523 },
522 InlayHint { 524 InlayHint {
523 range: 580..581, 525 range: 579..580,
524 kind: TypeHint, 526 kind: TypeHint,
525 label: "f64", 527 label: "f64",
526 }, 528 },
527 InlayHint { 529 InlayHint {
528 range: 584..585, 530 range: 583..584,
529 kind: TypeHint, 531 kind: TypeHint,
530 label: "i32", 532 label: "i32",
531 }, 533 },
532 InlayHint { 534 InlayHint {
533 range: 627..628, 535 range: 626..627,
534 kind: TypeHint, 536 kind: TypeHint,
535 label: "i32", 537 label: "i32",
536 }, 538 },
@@ -560,47 +562,47 @@ fn main() {
560 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###" 562 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###"
561 [ 563 [
562 InlayHint { 564 InlayHint {
563 range: 21..30, 565 range: 20..29,
564 kind: TypeHint, 566 kind: TypeHint,
565 label: "i32", 567 label: "i32",
566 }, 568 },
567 InlayHint { 569 InlayHint {
568 range: 57..66, 570 range: 56..65,
569 kind: TypeHint, 571 kind: TypeHint,
570 label: "i32", 572 label: "i32",
571 }, 573 },
572 InlayHint { 574 InlayHint {
573 range: 115..123, 575 range: 114..122,
574 kind: TypeHint, 576 kind: TypeHint,
575 label: "|…| -> i32", 577 label: "|…| -> i32",
576 }, 578 },
577 InlayHint { 579 InlayHint {
578 range: 127..128, 580 range: 126..127,
579 kind: TypeHint, 581 kind: TypeHint,
580 label: "i32", 582 label: "i32",
581 }, 583 },
582 InlayHint { 584 InlayHint {
583 range: 130..131, 585 range: 129..130,
584 kind: TypeHint, 586 kind: TypeHint,
585 label: "i32", 587 label: "i32",
586 }, 588 },
587 InlayHint { 589 InlayHint {
588 range: 133..134, 590 range: 132..133,
589 kind: TypeHint, 591 kind: TypeHint,
590 label: "i32", 592 label: "i32",
591 }, 593 },
592 InlayHint { 594 InlayHint {
593 range: 136..137, 595 range: 135..136,
594 kind: TypeHint, 596 kind: TypeHint,
595 label: "i32", 597 label: "i32",
596 }, 598 },
597 InlayHint { 599 InlayHint {
598 range: 201..213, 600 range: 200..212,
599 kind: TypeHint, 601 kind: TypeHint,
600 label: "&|…| -> i32", 602 label: "&|…| -> i32",
601 }, 603 },
602 InlayHint { 604 InlayHint {
603 range: 236..245, 605 range: 235..244,
604 kind: TypeHint, 606 kind: TypeHint,
605 label: "|| -> i32", 607 label: "|| -> i32",
606 }, 608 },
@@ -624,12 +626,12 @@ fn main() {
624 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###" 626 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###"
625 [ 627 [
626 InlayHint { 628 InlayHint {
627 range: 21..30, 629 range: 20..29,
628 kind: TypeHint, 630 kind: TypeHint,
629 label: "i32", 631 label: "i32",
630 }, 632 },
631 InlayHint { 633 InlayHint {
632 range: 44..53, 634 range: 43..52,
633 kind: TypeHint, 635 kind: TypeHint,
634 label: "i32", 636 label: "i32",
635 }, 637 },
@@ -674,57 +676,57 @@ fn main() {
674 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###" 676 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###"
675 [ 677 [
676 InlayHint { 678 InlayHint {
677 range: 188..192, 679 range: 187..191,
678 kind: TypeHint, 680 kind: TypeHint,
679 label: "CustomOption<Test>", 681 label: "CustomOption<Test>",
680 }, 682 },
681 InlayHint { 683 InlayHint {
682 range: 267..271, 684 range: 266..270,
683 kind: TypeHint, 685 kind: TypeHint,
684 label: "&CustomOption<Test>", 686 label: "&CustomOption<Test>",
685 }, 687 },
686 InlayHint { 688 InlayHint {
687 range: 300..304, 689 range: 299..303,
688 kind: TypeHint, 690 kind: TypeHint,
689 label: "&Test", 691 label: "&Test",
690 }, 692 },
691 InlayHint { 693 InlayHint {
692 range: 341..342, 694 range: 340..341,
693 kind: TypeHint, 695 kind: TypeHint,
694 label: "&CustomOption<u32>", 696 label: "&CustomOption<u32>",
695 }, 697 },
696 InlayHint { 698 InlayHint {
697 range: 344..345, 699 range: 343..344,
698 kind: TypeHint, 700 kind: TypeHint,
699 label: "&u8", 701 label: "&u8",
700 }, 702 },
701 InlayHint { 703 InlayHint {
702 range: 387..388, 704 range: 386..387,
703 kind: TypeHint, 705 kind: TypeHint,
704 label: "&CustomOption<u32>", 706 label: "&CustomOption<u32>",
705 }, 707 },
706 InlayHint { 708 InlayHint {
707 range: 393..394, 709 range: 392..393,
708 kind: TypeHint, 710 kind: TypeHint,
709 label: "&u8", 711 label: "&u8",
710 }, 712 },
711 InlayHint { 713 InlayHint {
712 range: 441..442, 714 range: 440..441,
713 kind: TypeHint, 715 kind: TypeHint,
714 label: "&u32", 716 label: "&u32",
715 }, 717 },
716 InlayHint { 718 InlayHint {
717 range: 448..449, 719 range: 447..448,
718 kind: TypeHint, 720 kind: TypeHint,
719 label: "&u8", 721 label: "&u8",
720 }, 722 },
721 InlayHint { 723 InlayHint {
722 range: 500..501, 724 range: 499..500,
723 kind: TypeHint, 725 kind: TypeHint,
724 label: "&u8", 726 label: "&u8",
725 }, 727 },
726 InlayHint { 728 InlayHint {
727 range: 543..544, 729 range: 542..543,
728 kind: TypeHint, 730 kind: TypeHint,
729 label: "&u8", 731 label: "&u8",
730 }, 732 },
@@ -769,57 +771,57 @@ fn main() {
769 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###" 771 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###"
770 [ 772 [
771 InlayHint { 773 InlayHint {
772 range: 188..192, 774 range: 187..191,
773 kind: TypeHint, 775 kind: TypeHint,
774 label: "CustomOption<Test>", 776 label: "CustomOption<Test>",
775 }, 777 },
776 InlayHint { 778 InlayHint {
777 range: 273..277, 779 range: 272..276,
778 kind: TypeHint, 780 kind: TypeHint,
779 label: "&CustomOption<Test>", 781 label: "&CustomOption<Test>",
780 }, 782 },
781 InlayHint { 783 InlayHint {
782 range: 309..313, 784 range: 308..312,
783 kind: TypeHint, 785 kind: TypeHint,
784 label: "&Test", 786 label: "&Test",
785 }, 787 },
786 InlayHint { 788 InlayHint {
787 range: 353..354, 789 range: 352..353,
788 kind: TypeHint, 790 kind: TypeHint,
789 label: "&CustomOption<u32>", 791 label: "&CustomOption<u32>",
790 }, 792 },
791 InlayHint { 793 InlayHint {
792 range: 356..357, 794 range: 355..356,
793 kind: TypeHint, 795 kind: TypeHint,
794 label: "&u8", 796 label: "&u8",
795 }, 797 },
796 InlayHint { 798 InlayHint {
797 range: 402..403, 799 range: 401..402,
798 kind: TypeHint, 800 kind: TypeHint,
799 label: "&CustomOption<u32>", 801 label: "&CustomOption<u32>",
800 }, 802 },
801 InlayHint { 803 InlayHint {
802 range: 408..409, 804 range: 407..408,
803 kind: TypeHint, 805 kind: TypeHint,
804 label: "&u8", 806 label: "&u8",
805 }, 807 },
806 InlayHint { 808 InlayHint {
807 range: 459..460, 809 range: 458..459,
808 kind: TypeHint, 810 kind: TypeHint,
809 label: "&u32", 811 label: "&u32",
810 }, 812 },
811 InlayHint { 813 InlayHint {
812 range: 466..467, 814 range: 465..466,
813 kind: TypeHint, 815 kind: TypeHint,
814 label: "&u8", 816 label: "&u8",
815 }, 817 },
816 InlayHint { 818 InlayHint {
817 range: 521..522, 819 range: 520..521,
818 kind: TypeHint, 820 kind: TypeHint,
819 label: "&u8", 821 label: "&u8",
820 }, 822 },
821 InlayHint { 823 InlayHint {
822 range: 567..568, 824 range: 566..567,
823 kind: TypeHint, 825 kind: TypeHint,
824 label: "&u8", 826 label: "&u8",
825 }, 827 },
@@ -864,52 +866,52 @@ fn main() {
864 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###" 866 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###"
865 [ 867 [
866 InlayHint { 868 InlayHint {
867 range: 252..256, 869 range: 251..255,
868 kind: TypeHint, 870 kind: TypeHint,
869 label: "CustomOption<Test>", 871 label: "CustomOption<Test>",
870 }, 872 },
871 InlayHint { 873 InlayHint {
872 range: 277..281, 874 range: 276..280,
873 kind: TypeHint, 875 kind: TypeHint,
874 label: "Test", 876 label: "Test",
875 }, 877 },
876 InlayHint { 878 InlayHint {
877 range: 310..311, 879 range: 309..310,
878 kind: TypeHint, 880 kind: TypeHint,
879 label: "CustomOption<u32>", 881 label: "CustomOption<u32>",
880 }, 882 },
881 InlayHint { 883 InlayHint {
882 range: 313..314, 884 range: 312..313,
883 kind: TypeHint, 885 kind: TypeHint,
884 label: "u8", 886 label: "u8",
885 }, 887 },
886 InlayHint { 888 InlayHint {
887 range: 348..349, 889 range: 347..348,
888 kind: TypeHint, 890 kind: TypeHint,
889 label: "CustomOption<u32>", 891 label: "CustomOption<u32>",
890 }, 892 },
891 InlayHint { 893 InlayHint {
892 range: 354..355, 894 range: 353..354,
893 kind: TypeHint, 895 kind: TypeHint,
894 label: "u8", 896 label: "u8",
895 }, 897 },
896 InlayHint { 898 InlayHint {
897 range: 394..395, 899 range: 393..394,
898 kind: TypeHint, 900 kind: TypeHint,
899 label: "u32", 901 label: "u32",
900 }, 902 },
901 InlayHint { 903 InlayHint {
902 range: 401..402, 904 range: 400..401,
903 kind: TypeHint, 905 kind: TypeHint,
904 label: "u8", 906 label: "u8",
905 }, 907 },
906 InlayHint { 908 InlayHint {
907 range: 445..446, 909 range: 444..445,
908 kind: TypeHint, 910 kind: TypeHint,
909 label: "u8", 911 label: "u8",
910 }, 912 },
911 InlayHint { 913 InlayHint {
912 range: 480..481, 914 range: 479..480,
913 kind: TypeHint, 915 kind: TypeHint,
914 label: "u8", 916 label: "u8",
915 }, 917 },
@@ -936,17 +938,17 @@ fn main() {
936 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig { max_length: Some(8), ..Default::default() }).unwrap(), @r###" 938 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig { max_length: Some(8), ..Default::default() }).unwrap(), @r###"
937 [ 939 [
938 InlayHint { 940 InlayHint {
939 range: 74..75, 941 range: 73..74,
940 kind: TypeHint, 942 kind: TypeHint,
941 label: "Smol<u32>", 943 label: "Smol<u32>",
942 }, 944 },
943 InlayHint { 945 InlayHint {
944 range: 98..99, 946 range: 97..98,
945 kind: TypeHint, 947 kind: TypeHint,
946 label: "VeryLongOuterName<…>", 948 label: "VeryLongOuterName<…>",
947 }, 949 },
948 InlayHint { 950 InlayHint {
949 range: 137..138, 951 range: 136..137,
950 kind: TypeHint, 952 kind: TypeHint,
951 label: "Smol<Smol<…>>", 953 label: "Smol<Smol<…>>",
952 }, 954 },
@@ -1024,77 +1026,77 @@ fn main() {
1024 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###" 1026 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###"
1025 [ 1027 [
1026 InlayHint { 1028 InlayHint {
1027 range: 798..809, 1029 range: 797..808,
1028 kind: TypeHint, 1030 kind: TypeHint,
1029 label: "i32", 1031 label: "i32",
1030 }, 1032 },
1031 InlayHint { 1033 InlayHint {
1032 range: 842..843, 1034 range: 841..842,
1033 kind: ParameterHint, 1035 kind: ParameterHint,
1034 label: "foo", 1036 label: "foo",
1035 }, 1037 },
1036 InlayHint { 1038 InlayHint {
1037 range: 845..846, 1039 range: 844..845,
1038 kind: ParameterHint, 1040 kind: ParameterHint,
1039 label: "bar", 1041 label: "bar",
1040 }, 1042 },
1041 InlayHint { 1043 InlayHint {
1042 range: 848..855, 1044 range: 847..854,
1043 kind: ParameterHint, 1045 kind: ParameterHint,
1044 label: "msg", 1046 label: "msg",
1045 }, 1047 },
1046 InlayHint { 1048 InlayHint {
1047 range: 860..871, 1049 range: 859..870,
1048 kind: ParameterHint, 1050 kind: ParameterHint,
1049 label: "last", 1051 label: "last",
1050 }, 1052 },
1051 InlayHint { 1053 InlayHint {
1052 range: 914..917, 1054 range: 913..916,
1053 kind: ParameterHint, 1055 kind: ParameterHint,
1054 label: "param", 1056 label: "param",
1055 }, 1057 },
1056 InlayHint { 1058 InlayHint {
1057 range: 937..939, 1059 range: 936..938,
1058 kind: ParameterHint, 1060 kind: ParameterHint,
1059 label: "&self", 1061 label: "&self",
1060 }, 1062 },
1061 InlayHint { 1063 InlayHint {
1062 range: 941..945, 1064 range: 940..944,
1063 kind: ParameterHint, 1065 kind: ParameterHint,
1064 label: "param", 1066 label: "param",
1065 }, 1067 },
1066 InlayHint { 1068 InlayHint {
1067 range: 980..989, 1069 range: 979..988,
1068 kind: ParameterHint, 1070 kind: ParameterHint,
1069 label: "file_id", 1071 label: "file_id",
1070 }, 1072 },
1071 InlayHint { 1073 InlayHint {
1072 range: 999..1012, 1074 range: 998..1011,
1073 kind: ParameterHint, 1075 kind: ParameterHint,
1074 label: "name", 1076 label: "name",
1075 }, 1077 },
1076 InlayHint { 1078 InlayHint {
1077 range: 1022..1026, 1079 range: 1021..1025,
1078 kind: ParameterHint, 1080 kind: ParameterHint,
1079 label: "focus_range", 1081 label: "focus_range",
1080 }, 1082 },
1081 InlayHint { 1083 InlayHint {
1082 range: 1036..1048, 1084 range: 1035..1047,
1083 kind: ParameterHint, 1085 kind: ParameterHint,
1084 label: "full_range", 1086 label: "full_range",
1085 }, 1087 },
1086 InlayHint { 1088 InlayHint {
1087 range: 1058..1071, 1089 range: 1057..1070,
1088 kind: ParameterHint, 1090 kind: ParameterHint,
1089 label: "kind", 1091 label: "kind",
1090 }, 1092 },
1091 InlayHint { 1093 InlayHint {
1092 range: 1081..1085, 1094 range: 1080..1084,
1093 kind: ParameterHint, 1095 kind: ParameterHint,
1094 label: "docs", 1096 label: "docs",
1095 }, 1097 },
1096 InlayHint { 1098 InlayHint {
1097 range: 1095..1099, 1099 range: 1094..1098,
1098 kind: ParameterHint, 1100 kind: ParameterHint,
1099 label: "description", 1101 label: "description",
1100 }, 1102 },
@@ -1239,16 +1241,17 @@ fn main() {
1239 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig{ parameter_hints: false, type_hints: false, chaining_hints: true, max_length: None}).unwrap(), @r###" 1241 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig{ parameter_hints: false, type_hints: false, chaining_hints: true, max_length: None}).unwrap(), @r###"
1240 [ 1242 [
1241 InlayHint { 1243 InlayHint {
1242 range: 232..269, 1244 range: 147..172,
1243 kind: ChainingHint, 1245 kind: ChainingHint,
1244 label: "B", 1246 label: "B",
1245 }, 1247 },
1246 InlayHint { 1248 InlayHint {
1247 range: 232..239, 1249 range: 147..154,
1248 kind: ChainingHint, 1250 kind: ChainingHint,
1249 label: "A", 1251 label: "A",
1250 }, 1252 },
1251 ]"###); 1253 ]
1254 "###);
1252 } 1255 }
1253 1256
1254 #[test] 1257 #[test]
@@ -1293,12 +1296,12 @@ fn main() {
1293 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig{ parameter_hints: false, type_hints: false, chaining_hints: true, max_length: None}).unwrap(), @r###" 1296 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig{ parameter_hints: false, type_hints: false, chaining_hints: true, max_length: None}).unwrap(), @r###"
1294 [ 1297 [
1295 InlayHint { 1298 InlayHint {
1296 range: 252..323, 1299 range: 143..190,
1297 kind: ChainingHint, 1300 kind: ChainingHint,
1298 label: "C", 1301 label: "C",
1299 }, 1302 },
1300 InlayHint { 1303 InlayHint {
1301 range: 252..300, 1304 range: 143..179,
1302 kind: ChainingHint, 1305 kind: ChainingHint,
1303 label: "B", 1306 label: "B",
1304 }, 1307 },
@@ -1331,15 +1334,16 @@ fn main() {
1331 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig{ parameter_hints: false, type_hints: false, chaining_hints: true, max_length: None}).unwrap(), @r###" 1334 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig{ parameter_hints: false, type_hints: false, chaining_hints: true, max_length: None}).unwrap(), @r###"
1332 [ 1335 [
1333 InlayHint { 1336 InlayHint {
1334 range: 403..452, 1337 range: 246..283,
1335 kind: ChainingHint, 1338 kind: ChainingHint,
1336 label: "B<X<i32, bool>>", 1339 label: "B<X<i32, bool>>",
1337 }, 1340 },
1338 InlayHint { 1341 InlayHint {
1339 range: 403..422, 1342 range: 246..265,
1340 kind: ChainingHint, 1343 kind: ChainingHint,
1341 label: "A<X<i32, bool>>", 1344 label: "A<X<i32, bool>>",
1342 }, 1345 },
1343 ]"###); 1346 ]
1347 "###);
1344 } 1348 }
1345} 1349}
diff --git a/crates/ra_ide/src/mock_analysis.rs b/crates/ra_ide/src/mock_analysis.rs
index 981bdf924..4e3986604 100644
--- a/crates/ra_ide/src/mock_analysis.rs
+++ b/crates/ra_ide/src/mock_analysis.rs
@@ -117,13 +117,13 @@ impl MockAnalysis {
117 (res, position) 117 (res, position)
118 } 118 }
119 119
120 pub fn add_file_fixture(&mut self, fixture: Fixture) -> FileId { 120 fn add_file_fixture(&mut self, fixture: Fixture) -> FileId {
121 let file_id = self.next_id(); 121 let file_id = self.next_id();
122 self.files.push(MockFileData::from(fixture)); 122 self.files.push(MockFileData::from(fixture));
123 file_id 123 file_id
124 } 124 }
125 125
126 pub fn add_file_fixture_with_position(&mut self, mut fixture: Fixture) -> FilePosition { 126 fn add_file_fixture_with_position(&mut self, mut fixture: Fixture) -> FilePosition {
127 let (offset, text) = extract_offset(&fixture.text); 127 let (offset, text) = extract_offset(&fixture.text);
128 fixture.text = text; 128 fixture.text = text;
129 let file_id = self.next_id(); 129 let file_id = self.next_id();
@@ -136,13 +136,13 @@ impl MockAnalysis {
136 self.files.push(MockFileData::new(path.to_string(), text.to_string())); 136 self.files.push(MockFileData::new(path.to_string(), text.to_string()));
137 file_id 137 file_id
138 } 138 }
139 pub fn add_file_with_position(&mut self, path: &str, text: &str) -> FilePosition { 139 fn add_file_with_position(&mut self, path: &str, text: &str) -> FilePosition {
140 let (offset, text) = extract_offset(text); 140 let (offset, text) = extract_offset(text);
141 let file_id = self.next_id(); 141 let file_id = self.next_id();
142 self.files.push(MockFileData::new(path.to_string(), text)); 142 self.files.push(MockFileData::new(path.to_string(), text));
143 FilePosition { file_id, offset } 143 FilePosition { file_id, offset }
144 } 144 }
145 pub fn add_file_with_range(&mut self, path: &str, text: &str) -> FileRange { 145 fn add_file_with_range(&mut self, path: &str, text: &str) -> FileRange {
146 let (range, text) = extract_range(text); 146 let (range, text) = extract_range(text);
147 let file_id = self.next_id(); 147 let file_id = self.next_id();
148 self.files.push(MockFileData::new(path.to_string(), text)); 148 self.files.push(MockFileData::new(path.to_string(), text));
@@ -222,8 +222,8 @@ pub fn analysis_and_position(ra_fixture: &str) -> (Analysis, FilePosition) {
222 222
223/// Creates analysis for a single file. 223/// Creates analysis for a single file.
224pub fn single_file(ra_fixture: &str) -> (Analysis, FileId) { 224pub fn single_file(ra_fixture: &str) -> (Analysis, FileId) {
225 let mut mock = MockAnalysis::new(); 225 let mock = MockAnalysis::with_files(ra_fixture);
226 let file_id = mock.add_file("/main.rs", ra_fixture); 226 let file_id = mock.id_of("/main.rs");
227 (mock.analysis(), file_id) 227 (mock.analysis(), file_id)
228} 228}
229 229
diff --git a/crates/ra_ide/src/syntax_highlighting/tests.rs b/crates/ra_ide/src/syntax_highlighting/tests.rs
index b1f48f03b..c8943816f 100644
--- a/crates/ra_ide/src/syntax_highlighting/tests.rs
+++ b/crates/ra_ide/src/syntax_highlighting/tests.rs
@@ -140,16 +140,17 @@ fn accidentally_quadratic() {
140fn test_ranges() { 140fn test_ranges() {
141 let (analysis, file_id) = single_file( 141 let (analysis, file_id) = single_file(
142 r#" 142 r#"
143 #[derive(Clone, Debug)] 143#[derive(Clone, Debug)]
144 struct Foo { 144struct Foo {
145 pub x: i32, 145 pub x: i32,
146 pub y: i32, 146 pub y: i32,
147 }"#, 147}
148"#,
148 ); 149 );
149 150
150 // The "x" 151 // The "x"
151 let highlights = &analysis 152 let highlights = &analysis
152 .highlight_range(FileRange { file_id, range: TextRange::at(82.into(), 1.into()) }) 153 .highlight_range(FileRange { file_id, range: TextRange::at(45.into(), 1.into()) })
153 .unwrap(); 154 .unwrap();
154 155
155 assert_eq!(&highlights[0].highlight.to_string(), "field.declaration"); 156 assert_eq!(&highlights[0].highlight.to_string(), "field.declaration");
diff --git a/crates/ra_ide/src/typing/on_enter.rs b/crates/ra_ide/src/typing/on_enter.rs
index a40d8af9c..787e85ffd 100644
--- a/crates/ra_ide/src/typing/on_enter.rs
+++ b/crates/ra_ide/src/typing/on_enter.rs
@@ -75,18 +75,15 @@ fn node_indent(file: &SourceFile, token: &SyntaxToken) -> Option<SmolStr> {
75 75
76#[cfg(test)] 76#[cfg(test)]
77mod tests { 77mod tests {
78 use test_utils::{assert_eq_text, extract_offset}; 78 use test_utils::assert_eq_text;
79 79
80 use crate::mock_analysis::single_file; 80 use crate::mock_analysis::single_file_with_position;
81
82 use super::*;
83 81
84 fn apply_on_enter(before: &str) -> Option<String> { 82 fn apply_on_enter(before: &str) -> Option<String> {
85 let (offset, before) = extract_offset(before); 83 let (analysis, position) = single_file_with_position(&before);
86 let (analysis, file_id) = single_file(&before); 84 let result = analysis.on_enter(position).unwrap()?;
87 let result = analysis.on_enter(FilePosition { offset, file_id }).unwrap()?;
88 85
89 let mut actual = before.to_string(); 86 let mut actual = analysis.file_text(position.file_id).unwrap().to_string();
90 result.apply(&mut actual); 87 result.apply(&mut actual);
91 Some(actual) 88 Some(actual)
92 } 89 }