diff options
Diffstat (limited to 'crates/ra_ide/src/completion/presentation.rs')
-rw-r--r-- | crates/ra_ide/src/completion/presentation.rs | 286 |
1 files changed, 146 insertions, 140 deletions
diff --git a/crates/ra_ide/src/completion/presentation.rs b/crates/ra_ide/src/completion/presentation.rs index 5e2b8b920..7633cd7fd 100644 --- a/crates/ra_ide/src/completion/presentation.rs +++ b/crates/ra_ide/src/completion/presentation.rs | |||
@@ -15,12 +15,7 @@ use crate::{ | |||
15 | }; | 15 | }; |
16 | 16 | ||
17 | impl Completions { | 17 | impl Completions { |
18 | pub(crate) fn add_field( | 18 | pub(crate) fn add_field(&mut self, ctx: &CompletionContext, field: hir::Field, ty: &Type) { |
19 | &mut self, | ||
20 | ctx: &CompletionContext, | ||
21 | field: hir::StructField, | ||
22 | ty: &Type, | ||
23 | ) { | ||
24 | let is_deprecated = is_deprecated(field, ctx.db); | 19 | let is_deprecated = is_deprecated(field, ctx.db); |
25 | let ty = ty.display(ctx.db).to_string(); | 20 | let ty = ty.display(ctx.db).to_string(); |
26 | let name = field.name(ctx.db); | 21 | let name = field.name(ctx.db); |
@@ -133,29 +128,6 @@ impl Completions { | |||
133 | completion_item.kind(kind).set_documentation(docs).add_to(self) | 128 | completion_item.kind(kind).set_documentation(docs).add_to(self) |
134 | } | 129 | } |
135 | 130 | ||
136 | fn guess_macro_braces(&self, macro_name: &str, docs: &str) -> &'static str { | ||
137 | let mut votes = [0, 0, 0]; | ||
138 | for (idx, s) in docs.match_indices(¯o_name) { | ||
139 | let (before, after) = (&docs[..idx], &docs[idx + s.len()..]); | ||
140 | // Ensure to match the full word | ||
141 | if after.starts_with('!') | ||
142 | && !before.ends_with(|c: char| c == '_' || c.is_ascii_alphanumeric()) | ||
143 | { | ||
144 | // It may have spaces before the braces like `foo! {}` | ||
145 | match after[1..].chars().find(|&c| !c.is_whitespace()) { | ||
146 | Some('{') => votes[0] += 1, | ||
147 | Some('[') => votes[1] += 1, | ||
148 | Some('(') => votes[2] += 1, | ||
149 | _ => {} | ||
150 | } | ||
151 | } | ||
152 | } | ||
153 | |||
154 | // Insert a space before `{}`. | ||
155 | // We prefer the last one when some votes equal. | ||
156 | *votes.iter().zip(&[" {$0}", "[$0]", "($0)"]).max_by_key(|&(&vote, _)| vote).unwrap().1 | ||
157 | } | ||
158 | |||
159 | pub(crate) fn add_macro( | 131 | pub(crate) fn add_macro( |
160 | &mut self, | 132 | &mut self, |
161 | ctx: &CompletionContext, | 133 | ctx: &CompletionContext, |
@@ -177,21 +149,27 @@ impl Completions { | |||
177 | let detail = macro_label(&ast_node); | 149 | let detail = macro_label(&ast_node); |
178 | 150 | ||
179 | let docs = macro_.docs(ctx.db); | 151 | let docs = macro_.docs(ctx.db); |
180 | let macro_declaration = format!("{}!", name); | ||
181 | 152 | ||
182 | let mut builder = | 153 | let mut builder = CompletionItem::new( |
183 | CompletionItem::new(CompletionKind::Reference, ctx.source_range(), ¯o_declaration) | 154 | CompletionKind::Reference, |
184 | .kind(CompletionItemKind::Macro) | 155 | ctx.source_range(), |
185 | .set_documentation(docs.clone()) | 156 | &format!("{}!", name), |
186 | .set_deprecated(is_deprecated(macro_, ctx.db)) | 157 | ) |
187 | .detail(detail); | 158 | .kind(CompletionItemKind::Macro) |
159 | .set_documentation(docs.clone()) | ||
160 | .set_deprecated(is_deprecated(macro_, ctx.db)) | ||
161 | .detail(detail); | ||
188 | 162 | ||
163 | let needs_bang = ctx.use_item_syntax.is_none() && !ctx.is_macro_call; | ||
189 | builder = match ctx.config.snippet_cap { | 164 | builder = match ctx.config.snippet_cap { |
190 | Some(cap) if ctx.use_item_syntax.is_none() && !ctx.is_macro_call => { | 165 | Some(cap) if needs_bang => { |
191 | let macro_braces_to_insert = | 166 | let docs = docs.as_ref().map_or("", |s| s.as_str()); |
192 | self.guess_macro_braces(&name, docs.as_ref().map_or("", |s| s.as_str())); | 167 | let (bra, ket) = guess_macro_braces(&name, docs); |
193 | builder.insert_snippet(cap, macro_declaration + macro_braces_to_insert) | 168 | builder |
169 | .insert_snippet(cap, format!("{}!{}$0{}", name, bra, ket)) | ||
170 | .label(format!("{}!{}…{}", name, bra, ket)) | ||
194 | } | 171 | } |
172 | None if needs_bang => builder.insert_text(format!("{}!", name)), | ||
195 | _ => { | 173 | _ => { |
196 | tested_by!(dont_insert_macro_call_parens_unncessary); | 174 | tested_by!(dont_insert_macro_call_parens_unncessary); |
197 | builder.insert_text(name) | 175 | builder.insert_text(name) |
@@ -404,6 +382,34 @@ fn is_deprecated(node: impl HasAttrs, db: &RootDatabase) -> bool { | |||
404 | node.attrs(db).by_key("deprecated").exists() | 382 | node.attrs(db).by_key("deprecated").exists() |
405 | } | 383 | } |
406 | 384 | ||
385 | fn guess_macro_braces(macro_name: &str, docs: &str) -> (&'static str, &'static str) { | ||
386 | let mut votes = [0, 0, 0]; | ||
387 | for (idx, s) in docs.match_indices(¯o_name) { | ||
388 | let (before, after) = (&docs[..idx], &docs[idx + s.len()..]); | ||
389 | // Ensure to match the full word | ||
390 | if after.starts_with('!') | ||
391 | && !before.ends_with(|c: char| c == '_' || c.is_ascii_alphanumeric()) | ||
392 | { | ||
393 | // It may have spaces before the braces like `foo! {}` | ||
394 | match after[1..].chars().find(|&c| !c.is_whitespace()) { | ||
395 | Some('{') => votes[0] += 1, | ||
396 | Some('[') => votes[1] += 1, | ||
397 | Some('(') => votes[2] += 1, | ||
398 | _ => {} | ||
399 | } | ||
400 | } | ||
401 | } | ||
402 | |||
403 | // Insert a space before `{}`. | ||
404 | // We prefer the last one when some votes equal. | ||
405 | let (_vote, (bra, ket)) = votes | ||
406 | .iter() | ||
407 | .zip(&[(" {", "}"), ("[", "]"), ("(", ")")]) | ||
408 | .max_by_key(|&(&vote, _)| vote) | ||
409 | .unwrap(); | ||
410 | (*bra, *ket) | ||
411 | } | ||
412 | |||
407 | #[cfg(test)] | 413 | #[cfg(test)] |
408 | mod tests { | 414 | mod tests { |
409 | use insta::assert_debug_snapshot; | 415 | use insta::assert_debug_snapshot; |
@@ -441,8 +447,8 @@ mod tests { | |||
441 | [ | 447 | [ |
442 | CompletionItem { | 448 | CompletionItem { |
443 | label: "Foo", | 449 | label: "Foo", |
444 | source_range: [121; 123), | 450 | source_range: 121..123, |
445 | delete: [121; 123), | 451 | delete: 121..123, |
446 | insert: "Foo", | 452 | insert: "Foo", |
447 | kind: EnumVariant, | 453 | kind: EnumVariant, |
448 | detail: "{ x: i32, y: i32 }", | 454 | detail: "{ x: i32, y: i32 }", |
@@ -467,8 +473,8 @@ mod tests { | |||
467 | [ | 473 | [ |
468 | CompletionItem { | 474 | CompletionItem { |
469 | label: "Foo(…)", | 475 | label: "Foo(…)", |
470 | source_range: [115; 117), | 476 | source_range: 115..117, |
471 | delete: [115; 117), | 477 | delete: 115..117, |
472 | insert: "Foo($0)", | 478 | insert: "Foo($0)", |
473 | kind: EnumVariant, | 479 | kind: EnumVariant, |
474 | lookup: "Foo", | 480 | lookup: "Foo", |
@@ -495,8 +501,8 @@ mod tests { | |||
495 | [ | 501 | [ |
496 | CompletionItem { | 502 | CompletionItem { |
497 | label: "Foo", | 503 | label: "Foo", |
498 | source_range: [104; 106), | 504 | source_range: 104..106, |
499 | delete: [104; 106), | 505 | delete: 104..106, |
500 | insert: "Foo", | 506 | insert: "Foo", |
501 | kind: EnumVariant, | 507 | kind: EnumVariant, |
502 | detail: "()", | 508 | detail: "()", |
@@ -523,8 +529,8 @@ mod tests { | |||
523 | [ | 529 | [ |
524 | CompletionItem { | 530 | CompletionItem { |
525 | label: "main()", | 531 | label: "main()", |
526 | source_range: [203; 206), | 532 | source_range: 203..206, |
527 | delete: [203; 206), | 533 | delete: 203..206, |
528 | insert: "main()$0", | 534 | insert: "main()$0", |
529 | kind: Function, | 535 | kind: Function, |
530 | lookup: "main", | 536 | lookup: "main", |
@@ -532,8 +538,8 @@ mod tests { | |||
532 | }, | 538 | }, |
533 | CompletionItem { | 539 | CompletionItem { |
534 | label: "something_deprecated()", | 540 | label: "something_deprecated()", |
535 | source_range: [203; 206), | 541 | source_range: 203..206, |
536 | delete: [203; 206), | 542 | delete: 203..206, |
537 | insert: "something_deprecated()$0", | 543 | insert: "something_deprecated()$0", |
538 | kind: Function, | 544 | kind: Function, |
539 | lookup: "something_deprecated", | 545 | lookup: "something_deprecated", |
@@ -542,8 +548,8 @@ mod tests { | |||
542 | }, | 548 | }, |
543 | CompletionItem { | 549 | CompletionItem { |
544 | label: "something_else_deprecated()", | 550 | label: "something_else_deprecated()", |
545 | source_range: [203; 206), | 551 | source_range: 203..206, |
546 | delete: [203; 206), | 552 | delete: 203..206, |
547 | insert: "something_else_deprecated()$0", | 553 | insert: "something_else_deprecated()$0", |
548 | kind: Function, | 554 | kind: Function, |
549 | lookup: "something_else_deprecated", | 555 | lookup: "something_else_deprecated", |
@@ -569,8 +575,8 @@ mod tests { | |||
569 | [ | 575 | [ |
570 | CompletionItem { | 576 | CompletionItem { |
571 | label: "main()", | 577 | label: "main()", |
572 | source_range: [61; 64), | 578 | source_range: 61..64, |
573 | delete: [61; 64), | 579 | delete: 61..64, |
574 | insert: "main()$0", | 580 | insert: "main()$0", |
575 | kind: Function, | 581 | kind: Function, |
576 | lookup: "main", | 582 | lookup: "main", |
@@ -578,8 +584,8 @@ mod tests { | |||
578 | }, | 584 | }, |
579 | CompletionItem { | 585 | CompletionItem { |
580 | label: "no_args()", | 586 | label: "no_args()", |
581 | source_range: [61; 64), | 587 | source_range: 61..64, |
582 | delete: [61; 64), | 588 | delete: 61..64, |
583 | insert: "no_args()$0", | 589 | insert: "no_args()$0", |
584 | kind: Function, | 590 | kind: Function, |
585 | lookup: "no_args", | 591 | lookup: "no_args", |
@@ -599,8 +605,8 @@ mod tests { | |||
599 | [ | 605 | [ |
600 | CompletionItem { | 606 | CompletionItem { |
601 | label: "main()", | 607 | label: "main()", |
602 | source_range: [80; 85), | 608 | source_range: 80..85, |
603 | delete: [80; 85), | 609 | delete: 80..85, |
604 | insert: "main()$0", | 610 | insert: "main()$0", |
605 | kind: Function, | 611 | kind: Function, |
606 | lookup: "main", | 612 | lookup: "main", |
@@ -608,8 +614,8 @@ mod tests { | |||
608 | }, | 614 | }, |
609 | CompletionItem { | 615 | CompletionItem { |
610 | label: "with_args(…)", | 616 | label: "with_args(…)", |
611 | source_range: [80; 85), | 617 | source_range: 80..85, |
612 | delete: [80; 85), | 618 | delete: 80..85, |
613 | insert: "with_args(${1:x}, ${2:y})$0", | 619 | insert: "with_args(${1:x}, ${2:y})$0", |
614 | kind: Function, | 620 | kind: Function, |
615 | lookup: "with_args", | 621 | lookup: "with_args", |
@@ -635,8 +641,8 @@ mod tests { | |||
635 | [ | 641 | [ |
636 | CompletionItem { | 642 | CompletionItem { |
637 | label: "foo()", | 643 | label: "foo()", |
638 | source_range: [163; 164), | 644 | source_range: 163..164, |
639 | delete: [163; 164), | 645 | delete: 163..164, |
640 | insert: "foo()$0", | 646 | insert: "foo()$0", |
641 | kind: Method, | 647 | kind: Method, |
642 | lookup: "foo", | 648 | lookup: "foo", |
@@ -663,23 +669,23 @@ mod tests { | |||
663 | [ | 669 | [ |
664 | CompletionItem { | 670 | CompletionItem { |
665 | label: "None", | 671 | label: "None", |
666 | source_range: [144; 147), | 672 | source_range: 144..147, |
667 | delete: [144; 147), | 673 | delete: 144..147, |
668 | insert: "None", | 674 | insert: "None", |
669 | kind: EnumVariant, | 675 | kind: EnumVariant, |
670 | detail: "()", | 676 | detail: "()", |
671 | }, | 677 | }, |
672 | CompletionItem { | 678 | CompletionItem { |
673 | label: "Option", | 679 | label: "Option", |
674 | source_range: [144; 147), | 680 | source_range: 144..147, |
675 | delete: [144; 147), | 681 | delete: 144..147, |
676 | insert: "Option", | 682 | insert: "Option", |
677 | kind: Enum, | 683 | kind: Enum, |
678 | }, | 684 | }, |
679 | CompletionItem { | 685 | CompletionItem { |
680 | label: "Some(…)", | 686 | label: "Some(…)", |
681 | source_range: [144; 147), | 687 | source_range: 144..147, |
682 | delete: [144; 147), | 688 | delete: 144..147, |
683 | insert: "Some($0)", | 689 | insert: "Some($0)", |
684 | kind: EnumVariant, | 690 | kind: EnumVariant, |
685 | lookup: "Some", | 691 | lookup: "Some", |
@@ -688,8 +694,8 @@ mod tests { | |||
688 | }, | 694 | }, |
689 | CompletionItem { | 695 | CompletionItem { |
690 | label: "main()", | 696 | label: "main()", |
691 | source_range: [144; 147), | 697 | source_range: 144..147, |
692 | delete: [144; 147), | 698 | delete: 144..147, |
693 | insert: "main()$0", | 699 | insert: "main()$0", |
694 | kind: Function, | 700 | kind: Function, |
695 | lookup: "main", | 701 | lookup: "main", |
@@ -714,23 +720,23 @@ mod tests { | |||
714 | [ | 720 | [ |
715 | CompletionItem { | 721 | CompletionItem { |
716 | label: "None", | 722 | label: "None", |
717 | source_range: [185; 188), | 723 | source_range: 185..188, |
718 | delete: [185; 188), | 724 | delete: 185..188, |
719 | insert: "None", | 725 | insert: "None", |
720 | kind: EnumVariant, | 726 | kind: EnumVariant, |
721 | detail: "()", | 727 | detail: "()", |
722 | }, | 728 | }, |
723 | CompletionItem { | 729 | CompletionItem { |
724 | label: "Option", | 730 | label: "Option", |
725 | source_range: [185; 188), | 731 | source_range: 185..188, |
726 | delete: [185; 188), | 732 | delete: 185..188, |
727 | insert: "Option", | 733 | insert: "Option", |
728 | kind: Enum, | 734 | kind: Enum, |
729 | }, | 735 | }, |
730 | CompletionItem { | 736 | CompletionItem { |
731 | label: "Some(…)", | 737 | label: "Some(…)", |
732 | source_range: [185; 188), | 738 | source_range: 185..188, |
733 | delete: [185; 188), | 739 | delete: 185..188, |
734 | insert: "Some($0)", | 740 | insert: "Some($0)", |
735 | kind: EnumVariant, | 741 | kind: EnumVariant, |
736 | lookup: "Some", | 742 | lookup: "Some", |
@@ -760,8 +766,8 @@ mod tests { | |||
760 | [ | 766 | [ |
761 | CompletionItem { | 767 | CompletionItem { |
762 | label: "foo(…)", | 768 | label: "foo(…)", |
763 | source_range: [171; 172), | 769 | source_range: 171..172, |
764 | delete: [171; 172), | 770 | delete: 171..172, |
765 | insert: "foo(${1:x})$0", | 771 | insert: "foo(${1:x})$0", |
766 | kind: Method, | 772 | kind: Method, |
767 | lookup: "foo", | 773 | lookup: "foo", |
@@ -795,8 +801,8 @@ mod tests { | |||
795 | [ | 801 | [ |
796 | CompletionItem { | 802 | CompletionItem { |
797 | label: "foo(…)", | 803 | label: "foo(…)", |
798 | source_range: [171; 172), | 804 | source_range: 171..172, |
799 | delete: [171; 172), | 805 | delete: 171..172, |
800 | insert: "foo($0)", | 806 | insert: "foo($0)", |
801 | kind: Method, | 807 | kind: Method, |
802 | lookup: "foo", | 808 | lookup: "foo", |
@@ -822,8 +828,8 @@ mod tests { | |||
822 | [ | 828 | [ |
823 | CompletionItem { | 829 | CompletionItem { |
824 | label: "foo", | 830 | label: "foo", |
825 | source_range: [40; 41), | 831 | source_range: 40..41, |
826 | delete: [40; 41), | 832 | delete: 40..41, |
827 | insert: "foo", | 833 | insert: "foo", |
828 | kind: Function, | 834 | kind: Function, |
829 | detail: "pub fn foo()", | 835 | detail: "pub fn foo()", |
@@ -849,16 +855,16 @@ mod tests { | |||
849 | [ | 855 | [ |
850 | CompletionItem { | 856 | CompletionItem { |
851 | label: "frobnicate", | 857 | label: "frobnicate", |
852 | source_range: [35; 39), | 858 | source_range: 35..39, |
853 | delete: [35; 39), | 859 | delete: 35..39, |
854 | insert: "frobnicate", | 860 | insert: "frobnicate", |
855 | kind: Function, | 861 | kind: Function, |
856 | detail: "fn frobnicate()", | 862 | detail: "fn frobnicate()", |
857 | }, | 863 | }, |
858 | CompletionItem { | 864 | CompletionItem { |
859 | label: "main", | 865 | label: "main", |
860 | source_range: [35; 39), | 866 | source_range: 35..39, |
861 | delete: [35; 39), | 867 | delete: 35..39, |
862 | insert: "main", | 868 | insert: "main", |
863 | kind: Function, | 869 | kind: Function, |
864 | detail: "fn main()", | 870 | detail: "fn main()", |
@@ -881,8 +887,8 @@ mod tests { | |||
881 | [ | 887 | [ |
882 | CompletionItem { | 888 | CompletionItem { |
883 | label: "new", | 889 | label: "new", |
884 | source_range: [67; 69), | 890 | source_range: 67..69, |
885 | delete: [67; 69), | 891 | delete: 67..69, |
886 | insert: "new", | 892 | insert: "new", |
887 | kind: Function, | 893 | kind: Function, |
888 | detail: "fn new() -> Foo", | 894 | detail: "fn new() -> Foo", |
@@ -906,16 +912,16 @@ mod tests { | |||
906 | [ | 912 | [ |
907 | CompletionItem { | 913 | CompletionItem { |
908 | label: "Vec<…>", | 914 | label: "Vec<…>", |
909 | source_range: [61; 63), | 915 | source_range: 61..63, |
910 | delete: [61; 63), | 916 | delete: 61..63, |
911 | insert: "Vec<$0>", | 917 | insert: "Vec<$0>", |
912 | kind: Struct, | 918 | kind: Struct, |
913 | lookup: "Vec", | 919 | lookup: "Vec", |
914 | }, | 920 | }, |
915 | CompletionItem { | 921 | CompletionItem { |
916 | label: "foo(…)", | 922 | label: "foo(…)", |
917 | source_range: [61; 63), | 923 | source_range: 61..63, |
918 | delete: [61; 63), | 924 | delete: 61..63, |
919 | insert: "foo(${1:xs})$0", | 925 | insert: "foo(${1:xs})$0", |
920 | kind: Function, | 926 | kind: Function, |
921 | lookup: "foo", | 927 | lookup: "foo", |
@@ -936,16 +942,16 @@ mod tests { | |||
936 | [ | 942 | [ |
937 | CompletionItem { | 943 | CompletionItem { |
938 | label: "Vec<…>", | 944 | label: "Vec<…>", |
939 | source_range: [64; 66), | 945 | source_range: 64..66, |
940 | delete: [64; 66), | 946 | delete: 64..66, |
941 | insert: "Vec<$0>", | 947 | insert: "Vec<$0>", |
942 | kind: TypeAlias, | 948 | kind: TypeAlias, |
943 | lookup: "Vec", | 949 | lookup: "Vec", |
944 | }, | 950 | }, |
945 | CompletionItem { | 951 | CompletionItem { |
946 | label: "foo(…)", | 952 | label: "foo(…)", |
947 | source_range: [64; 66), | 953 | source_range: 64..66, |
948 | delete: [64; 66), | 954 | delete: 64..66, |
949 | insert: "foo(${1:xs})$0", | 955 | insert: "foo(${1:xs})$0", |
950 | kind: Function, | 956 | kind: Function, |
951 | lookup: "foo", | 957 | lookup: "foo", |
@@ -966,15 +972,15 @@ mod tests { | |||
966 | [ | 972 | [ |
967 | CompletionItem { | 973 | CompletionItem { |
968 | label: "Vec", | 974 | label: "Vec", |
969 | source_range: [68; 70), | 975 | source_range: 68..70, |
970 | delete: [68; 70), | 976 | delete: 68..70, |
971 | insert: "Vec", | 977 | insert: "Vec", |
972 | kind: Struct, | 978 | kind: Struct, |
973 | }, | 979 | }, |
974 | CompletionItem { | 980 | CompletionItem { |
975 | label: "foo(…)", | 981 | label: "foo(…)", |
976 | source_range: [68; 70), | 982 | source_range: 68..70, |
977 | delete: [68; 70), | 983 | delete: 68..70, |
978 | insert: "foo(${1:xs})$0", | 984 | insert: "foo(${1:xs})$0", |
979 | kind: Function, | 985 | kind: Function, |
980 | lookup: "foo", | 986 | lookup: "foo", |
@@ -995,15 +1001,15 @@ mod tests { | |||
995 | [ | 1001 | [ |
996 | CompletionItem { | 1002 | CompletionItem { |
997 | label: "Vec", | 1003 | label: "Vec", |
998 | source_range: [61; 63), | 1004 | source_range: 61..63, |
999 | delete: [61; 63), | 1005 | delete: 61..63, |
1000 | insert: "Vec", | 1006 | insert: "Vec", |
1001 | kind: Struct, | 1007 | kind: Struct, |
1002 | }, | 1008 | }, |
1003 | CompletionItem { | 1009 | CompletionItem { |
1004 | label: "foo(…)", | 1010 | label: "foo(…)", |
1005 | source_range: [61; 63), | 1011 | source_range: 61..63, |
1006 | delete: [61; 63), | 1012 | delete: 61..63, |
1007 | insert: "foo(${1:xs})$0", | 1013 | insert: "foo(${1:xs})$0", |
1008 | kind: Function, | 1014 | kind: Function, |
1009 | lookup: "foo", | 1015 | lookup: "foo", |
@@ -1035,8 +1041,8 @@ mod tests { | |||
1035 | [ | 1041 | [ |
1036 | CompletionItem { | 1042 | CompletionItem { |
1037 | label: "frobnicate!", | 1043 | label: "frobnicate!", |
1038 | source_range: [9; 9), | 1044 | source_range: 9..9, |
1039 | delete: [9; 9), | 1045 | delete: 9..9, |
1040 | insert: "frobnicate", | 1046 | insert: "frobnicate", |
1041 | kind: Macro, | 1047 | kind: Macro, |
1042 | detail: "#[macro_export]\nmacro_rules! frobnicate", | 1048 | detail: "#[macro_export]\nmacro_rules! frobnicate", |
@@ -1061,16 +1067,16 @@ mod tests { | |||
1061 | [ | 1067 | [ |
1062 | CompletionItem { | 1068 | CompletionItem { |
1063 | label: "frobnicate!", | 1069 | label: "frobnicate!", |
1064 | source_range: [56; 60), | 1070 | source_range: 56..60, |
1065 | delete: [56; 60), | 1071 | delete: 56..60, |
1066 | insert: "frobnicate", | 1072 | insert: "frobnicate", |
1067 | kind: Macro, | 1073 | kind: Macro, |
1068 | detail: "macro_rules! frobnicate", | 1074 | detail: "macro_rules! frobnicate", |
1069 | }, | 1075 | }, |
1070 | CompletionItem { | 1076 | CompletionItem { |
1071 | label: "main()", | 1077 | label: "main()", |
1072 | source_range: [56; 60), | 1078 | source_range: 56..60, |
1073 | delete: [56; 60), | 1079 | delete: 56..60, |
1074 | insert: "main()$0", | 1080 | insert: "main()$0", |
1075 | kind: Function, | 1081 | kind: Function, |
1076 | lookup: "main", | 1082 | lookup: "main", |
@@ -1098,24 +1104,24 @@ mod tests { | |||
1098 | [ | 1104 | [ |
1099 | CompletionItem { | 1105 | CompletionItem { |
1100 | label: "another_field", | 1106 | label: "another_field", |
1101 | source_range: [201; 201), | 1107 | source_range: 201..201, |
1102 | delete: [201; 201), | 1108 | delete: 201..201, |
1103 | insert: "another_field", | 1109 | insert: "another_field", |
1104 | kind: Field, | 1110 | kind: Field, |
1105 | detail: "i64", | 1111 | detail: "i64", |
1106 | }, | 1112 | }, |
1107 | CompletionItem { | 1113 | CompletionItem { |
1108 | label: "my_string", | 1114 | label: "my_string", |
1109 | source_range: [201; 201), | 1115 | source_range: 201..201, |
1110 | delete: [201; 201), | 1116 | delete: 201..201, |
1111 | insert: "my_string", | 1117 | insert: "my_string", |
1112 | kind: Field, | 1118 | kind: Field, |
1113 | detail: "{unknown}", | 1119 | detail: "{unknown}", |
1114 | }, | 1120 | }, |
1115 | CompletionItem { | 1121 | CompletionItem { |
1116 | label: "the_field", | 1122 | label: "the_field", |
1117 | source_range: [201; 201), | 1123 | source_range: 201..201, |
1118 | delete: [201; 201), | 1124 | delete: 201..201, |
1119 | insert: "the_field", | 1125 | insert: "the_field", |
1120 | kind: Field, | 1126 | kind: Field, |
1121 | detail: "u32", | 1127 | detail: "u32", |
@@ -1142,16 +1148,16 @@ mod tests { | |||
1142 | [ | 1148 | [ |
1143 | CompletionItem { | 1149 | CompletionItem { |
1144 | label: "another_field", | 1150 | label: "another_field", |
1145 | source_range: [208; 208), | 1151 | source_range: 208..208, |
1146 | delete: [208; 208), | 1152 | delete: 208..208, |
1147 | insert: "another_field", | 1153 | insert: "another_field", |
1148 | kind: Field, | 1154 | kind: Field, |
1149 | detail: "i64", | 1155 | detail: "i64", |
1150 | }, | 1156 | }, |
1151 | CompletionItem { | 1157 | CompletionItem { |
1152 | label: "another_good_type", | 1158 | label: "another_good_type", |
1153 | source_range: [208; 208), | 1159 | source_range: 208..208, |
1154 | delete: [208; 208), | 1160 | delete: 208..208, |
1155 | insert: "another_good_type", | 1161 | insert: "another_good_type", |
1156 | kind: Field, | 1162 | kind: Field, |
1157 | detail: "u32", | 1163 | detail: "u32", |
@@ -1159,8 +1165,8 @@ mod tests { | |||
1159 | }, | 1165 | }, |
1160 | CompletionItem { | 1166 | CompletionItem { |
1161 | label: "the_field", | 1167 | label: "the_field", |
1162 | source_range: [208; 208), | 1168 | source_range: 208..208, |
1163 | delete: [208; 208), | 1169 | delete: 208..208, |
1164 | insert: "the_field", | 1170 | insert: "the_field", |
1165 | kind: Field, | 1171 | kind: Field, |
1166 | detail: "u32", | 1172 | detail: "u32", |
@@ -1190,16 +1196,16 @@ mod tests { | |||
1190 | [ | 1196 | [ |
1191 | CompletionItem { | 1197 | CompletionItem { |
1192 | label: "another_field", | 1198 | label: "another_field", |
1193 | source_range: [270; 270), | 1199 | source_range: 270..270, |
1194 | delete: [270; 270), | 1200 | delete: 270..270, |
1195 | insert: "another_field", | 1201 | insert: "another_field", |
1196 | kind: Field, | 1202 | kind: Field, |
1197 | detail: "i64", | 1203 | detail: "i64", |
1198 | }, | 1204 | }, |
1199 | CompletionItem { | 1205 | CompletionItem { |
1200 | label: "another_good_type", | 1206 | label: "another_good_type", |
1201 | source_range: [270; 270), | 1207 | source_range: 270..270, |
1202 | delete: [270; 270), | 1208 | delete: 270..270, |
1203 | insert: "another_good_type", | 1209 | insert: "another_good_type", |
1204 | kind: Field, | 1210 | kind: Field, |
1205 | detail: "u32", | 1211 | detail: "u32", |
@@ -1207,8 +1213,8 @@ mod tests { | |||
1207 | }, | 1213 | }, |
1208 | CompletionItem { | 1214 | CompletionItem { |
1209 | label: "the_field", | 1215 | label: "the_field", |
1210 | source_range: [270; 270), | 1216 | source_range: 270..270, |
1211 | delete: [270; 270), | 1217 | delete: 270..270, |
1212 | insert: "the_field", | 1218 | insert: "the_field", |
1213 | kind: Field, | 1219 | kind: Field, |
1214 | detail: "u32", | 1220 | detail: "u32", |
@@ -1238,8 +1244,8 @@ mod tests { | |||
1238 | [ | 1244 | [ |
1239 | CompletionItem { | 1245 | CompletionItem { |
1240 | label: "another_field", | 1246 | label: "another_field", |
1241 | source_range: [336; 336), | 1247 | source_range: 336..336, |
1242 | delete: [336; 336), | 1248 | delete: 336..336, |
1243 | insert: "another_field", | 1249 | insert: "another_field", |
1244 | kind: Field, | 1250 | kind: Field, |
1245 | detail: "i64", | 1251 | detail: "i64", |
@@ -1247,16 +1253,16 @@ mod tests { | |||
1247 | }, | 1253 | }, |
1248 | CompletionItem { | 1254 | CompletionItem { |
1249 | label: "another_good_type", | 1255 | label: "another_good_type", |
1250 | source_range: [336; 336), | 1256 | source_range: 336..336, |
1251 | delete: [336; 336), | 1257 | delete: 336..336, |
1252 | insert: "another_good_type", | 1258 | insert: "another_good_type", |
1253 | kind: Field, | 1259 | kind: Field, |
1254 | detail: "u32", | 1260 | detail: "u32", |
1255 | }, | 1261 | }, |
1256 | CompletionItem { | 1262 | CompletionItem { |
1257 | label: "the_field", | 1263 | label: "the_field", |
1258 | source_range: [336; 336), | 1264 | source_range: 336..336, |
1259 | delete: [336; 336), | 1265 | delete: 336..336, |
1260 | insert: "the_field", | 1266 | insert: "the_field", |
1261 | kind: Field, | 1267 | kind: Field, |
1262 | detail: "u32", | 1268 | detail: "u32", |
@@ -1285,16 +1291,16 @@ mod tests { | |||
1285 | [ | 1291 | [ |
1286 | CompletionItem { | 1292 | CompletionItem { |
1287 | label: "another_field", | 1293 | label: "another_field", |
1288 | source_range: [328; 328), | 1294 | source_range: 328..328, |
1289 | delete: [328; 328), | 1295 | delete: 328..328, |
1290 | insert: "another_field", | 1296 | insert: "another_field", |
1291 | kind: Field, | 1297 | kind: Field, |
1292 | detail: "i64", | 1298 | detail: "i64", |
1293 | }, | 1299 | }, |
1294 | CompletionItem { | 1300 | CompletionItem { |
1295 | label: "another_good_type", | 1301 | label: "another_good_type", |
1296 | source_range: [328; 328), | 1302 | source_range: 328..328, |
1297 | delete: [328; 328), | 1303 | delete: 328..328, |
1298 | insert: "another_good_type", | 1304 | insert: "another_good_type", |
1299 | kind: Field, | 1305 | kind: Field, |
1300 | detail: "u32", | 1306 | detail: "u32", |
@@ -1302,8 +1308,8 @@ mod tests { | |||
1302 | }, | 1308 | }, |
1303 | CompletionItem { | 1309 | CompletionItem { |
1304 | label: "the_field", | 1310 | label: "the_field", |
1305 | source_range: [328; 328), | 1311 | source_range: 328..328, |
1306 | delete: [328; 328), | 1312 | delete: 328..328, |
1307 | insert: "the_field", | 1313 | insert: "the_field", |
1308 | kind: Field, | 1314 | kind: Field, |
1309 | detail: "u32", | 1315 | detail: "u32", |