]> git.lizzy.rs Git - rust.git/blob - crates/ide_assists/src/tests/generated.rs
Merge #11461
[rust.git] / crates / ide_assists / src / tests / generated.rs
1 //! Generated by `sourcegen_assists_docs`, do not edit by hand.
2
3 use super::check_doc_test;
4
5 #[test]
6 fn doctest_add_explicit_type() {
7     check_doc_test(
8         "add_explicit_type",
9         r#####"
10 fn main() {
11     let x$0 = 92;
12 }
13 "#####,
14         r#####"
15 fn main() {
16     let x: i32 = 92;
17 }
18 "#####,
19     )
20 }
21
22 #[test]
23 fn doctest_add_hash() {
24     check_doc_test(
25         "add_hash",
26         r#####"
27 fn main() {
28     r#"Hello,$0 World!"#;
29 }
30 "#####,
31         r#####"
32 fn main() {
33     r##"Hello, World!"##;
34 }
35 "#####,
36     )
37 }
38
39 #[test]
40 fn doctest_add_impl_default_members() {
41     check_doc_test(
42         "add_impl_default_members",
43         r#####"
44 trait Trait {
45     type X;
46     fn foo(&self);
47     fn bar(&self) {}
48 }
49
50 impl Trait for () {
51     type X = ();
52     fn foo(&self) {}$0
53 }
54 "#####,
55         r#####"
56 trait Trait {
57     type X;
58     fn foo(&self);
59     fn bar(&self) {}
60 }
61
62 impl Trait for () {
63     type X = ();
64     fn foo(&self) {}
65
66     $0fn bar(&self) {}
67 }
68 "#####,
69     )
70 }
71
72 #[test]
73 fn doctest_add_impl_missing_members() {
74     check_doc_test(
75         "add_impl_missing_members",
76         r#####"
77 trait Trait<T> {
78     type X;
79     fn foo(&self) -> T;
80     fn bar(&self) {}
81 }
82
83 impl Trait<u32> for () {$0
84
85 }
86 "#####,
87         r#####"
88 trait Trait<T> {
89     type X;
90     fn foo(&self) -> T;
91     fn bar(&self) {}
92 }
93
94 impl Trait<u32> for () {
95     $0type X;
96
97     fn foo(&self) -> u32 {
98         todo!()
99     }
100 }
101 "#####,
102     )
103 }
104
105 #[test]
106 fn doctest_add_lifetime_to_type() {
107     check_doc_test(
108         "add_lifetime_to_type",
109         r#####"
110 struct Point {
111     x: &$0u32,
112     y: u32,
113 }
114 "#####,
115         r#####"
116 struct Point<'a> {
117     x: &'a u32,
118     y: u32,
119 }
120 "#####,
121     )
122 }
123
124 #[test]
125 fn doctest_add_missing_match_arms() {
126     check_doc_test(
127         "add_missing_match_arms",
128         r#####"
129 enum Action { Move { distance: u32 }, Stop }
130
131 fn handle(action: Action) {
132     match action {
133         $0
134     }
135 }
136 "#####,
137         r#####"
138 enum Action { Move { distance: u32 }, Stop }
139
140 fn handle(action: Action) {
141     match action {
142         $0Action::Move { distance } => todo!(),
143         Action::Stop => todo!(),
144     }
145 }
146 "#####,
147     )
148 }
149
150 #[test]
151 fn doctest_add_return_type() {
152     check_doc_test(
153         "add_return_type",
154         r#####"
155 fn foo() { 4$02i32 }
156 "#####,
157         r#####"
158 fn foo() -> i32 { 42i32 }
159 "#####,
160     )
161 }
162
163 #[test]
164 fn doctest_add_turbo_fish() {
165     check_doc_test(
166         "add_turbo_fish",
167         r#####"
168 fn make<T>() -> T { todo!() }
169 fn main() {
170     let x = make$0();
171 }
172 "#####,
173         r#####"
174 fn make<T>() -> T { todo!() }
175 fn main() {
176     let x = make::<${0:_}>();
177 }
178 "#####,
179     )
180 }
181
182 #[test]
183 fn doctest_apply_demorgan() {
184     check_doc_test(
185         "apply_demorgan",
186         r#####"
187 fn main() {
188     if x != 4 ||$0 y < 3.14 {}
189 }
190 "#####,
191         r#####"
192 fn main() {
193     if !(x == 4 && y >= 3.14) {}
194 }
195 "#####,
196     )
197 }
198
199 #[test]
200 fn doctest_auto_import() {
201     check_doc_test(
202         "auto_import",
203         r#####"
204 fn main() {
205     let map = HashMap$0::new();
206 }
207 pub mod std { pub mod collections { pub struct HashMap { } } }
208 "#####,
209         r#####"
210 use std::collections::HashMap;
211
212 fn main() {
213     let map = HashMap::new();
214 }
215 pub mod std { pub mod collections { pub struct HashMap { } } }
216 "#####,
217     )
218 }
219
220 #[test]
221 fn doctest_change_visibility() {
222     check_doc_test(
223         "change_visibility",
224         r#####"
225 $0fn frobnicate() {}
226 "#####,
227         r#####"
228 pub(crate) fn frobnicate() {}
229 "#####,
230     )
231 }
232
233 #[test]
234 fn doctest_convert_bool_then_to_if() {
235     check_doc_test(
236         "convert_bool_then_to_if",
237         r#####"
238 //- minicore: bool_impl
239 fn main() {
240     (0 == 0).then$0(|| val)
241 }
242 "#####,
243         r#####"
244 fn main() {
245     if 0 == 0 {
246         Some(val)
247     } else {
248         None
249     }
250 }
251 "#####,
252     )
253 }
254
255 #[test]
256 fn doctest_convert_for_loop_with_for_each() {
257     check_doc_test(
258         "convert_for_loop_with_for_each",
259         r#####"
260 fn main() {
261     let x = vec![1, 2, 3];
262     for$0 v in x {
263         let y = v * 2;
264     }
265 }
266 "#####,
267         r#####"
268 fn main() {
269     let x = vec![1, 2, 3];
270     x.into_iter().for_each(|v| {
271         let y = v * 2;
272     });
273 }
274 "#####,
275     )
276 }
277
278 #[test]
279 fn doctest_convert_if_to_bool_then() {
280     check_doc_test(
281         "convert_if_to_bool_then",
282         r#####"
283 //- minicore: option
284 fn main() {
285     if$0 cond {
286         Some(val)
287     } else {
288         None
289     }
290 }
291 "#####,
292         r#####"
293 fn main() {
294     cond.then(|| val)
295 }
296 "#####,
297     )
298 }
299
300 #[test]
301 fn doctest_convert_integer_literal() {
302     check_doc_test(
303         "convert_integer_literal",
304         r#####"
305 const _: i32 = 10$0;
306 "#####,
307         r#####"
308 const _: i32 = 0b1010;
309 "#####,
310     )
311 }
312
313 #[test]
314 fn doctest_convert_into_to_from() {
315     check_doc_test(
316         "convert_into_to_from",
317         r#####"
318 //- minicore: from
319 impl $0Into<Thing> for usize {
320     fn into(self) -> Thing {
321         Thing {
322             b: self.to_string(),
323             a: self
324         }
325     }
326 }
327 "#####,
328         r#####"
329 impl From<usize> for Thing {
330     fn from(val: usize) -> Self {
331         Thing {
332             b: val.to_string(),
333             a: val
334         }
335     }
336 }
337 "#####,
338     )
339 }
340
341 #[test]
342 fn doctest_convert_iter_for_each_to_for() {
343     check_doc_test(
344         "convert_iter_for_each_to_for",
345         r#####"
346 //- minicore: iterators
347 use core::iter;
348 fn main() {
349     let iter = iter::repeat((9, 2));
350     iter.for_each$0(|(x, y)| {
351         println!("x: {}, y: {}", x, y);
352     });
353 }
354 "#####,
355         r#####"
356 use core::iter;
357 fn main() {
358     let iter = iter::repeat((9, 2));
359     for (x, y) in iter {
360         println!("x: {}, y: {}", x, y);
361     }
362 }
363 "#####,
364     )
365 }
366
367 #[test]
368 fn doctest_convert_to_guarded_return() {
369     check_doc_test(
370         "convert_to_guarded_return",
371         r#####"
372 fn main() {
373     $0if cond {
374         foo();
375         bar();
376     }
377 }
378 "#####,
379         r#####"
380 fn main() {
381     if !cond {
382         return;
383     }
384     foo();
385     bar();
386 }
387 "#####,
388     )
389 }
390
391 #[test]
392 fn doctest_convert_tuple_struct_to_named_struct() {
393     check_doc_test(
394         "convert_tuple_struct_to_named_struct",
395         r#####"
396 struct Point$0(f32, f32);
397
398 impl Point {
399     pub fn new(x: f32, y: f32) -> Self {
400         Point(x, y)
401     }
402
403     pub fn x(&self) -> f32 {
404         self.0
405     }
406
407     pub fn y(&self) -> f32 {
408         self.1
409     }
410 }
411 "#####,
412         r#####"
413 struct Point { field1: f32, field2: f32 }
414
415 impl Point {
416     pub fn new(x: f32, y: f32) -> Self {
417         Point { field1: x, field2: y }
418     }
419
420     pub fn x(&self) -> f32 {
421         self.field1
422     }
423
424     pub fn y(&self) -> f32 {
425         self.field2
426     }
427 }
428 "#####,
429     )
430 }
431
432 #[test]
433 fn doctest_convert_while_to_loop() {
434     check_doc_test(
435         "convert_while_to_loop",
436         r#####"
437 fn main() {
438     $0while cond {
439         foo();
440     }
441 }
442 "#####,
443         r#####"
444 fn main() {
445     loop {
446         if !cond {
447             break;
448         }
449         foo();
450     }
451 }
452 "#####,
453     )
454 }
455
456 #[test]
457 fn doctest_destructure_tuple_binding() {
458     check_doc_test(
459         "destructure_tuple_binding",
460         r#####"
461 fn main() {
462     let $0t = (1,2);
463     let v = t.0;
464 }
465 "#####,
466         r#####"
467 fn main() {
468     let ($0_0, _1) = (1,2);
469     let v = _0;
470 }
471 "#####,
472     )
473 }
474
475 #[test]
476 fn doctest_expand_glob_import() {
477     check_doc_test(
478         "expand_glob_import",
479         r#####"
480 mod foo {
481     pub struct Bar;
482     pub struct Baz;
483 }
484
485 use foo::*$0;
486
487 fn qux(bar: Bar, baz: Baz) {}
488 "#####,
489         r#####"
490 mod foo {
491     pub struct Bar;
492     pub struct Baz;
493 }
494
495 use foo::{Baz, Bar};
496
497 fn qux(bar: Bar, baz: Baz) {}
498 "#####,
499     )
500 }
501
502 #[test]
503 fn doctest_extract_function() {
504     check_doc_test(
505         "extract_function",
506         r#####"
507 fn main() {
508     let n = 1;
509     $0let m = n + 2;
510     // calculate
511     let k = m + n;$0
512     let g = 3;
513 }
514 "#####,
515         r#####"
516 fn main() {
517     let n = 1;
518     fun_name(n);
519     let g = 3;
520 }
521
522 fn $0fun_name(n: i32) {
523     let m = n + 2;
524     // calculate
525     let k = m + n;
526 }
527 "#####,
528     )
529 }
530
531 #[test]
532 fn doctest_extract_module() {
533     check_doc_test(
534         "extract_module",
535         r#####"
536 $0fn foo(name: i32) -> i32 {
537     name + 1
538 }$0
539
540 fn bar(name: i32) -> i32 {
541     name + 2
542 }
543 "#####,
544         r#####"
545 mod modname {
546     pub(crate) fn foo(name: i32) -> i32 {
547         name + 1
548     }
549 }
550
551 fn bar(name: i32) -> i32 {
552     name + 2
553 }
554 "#####,
555     )
556 }
557
558 #[test]
559 fn doctest_extract_struct_from_enum_variant() {
560     check_doc_test(
561         "extract_struct_from_enum_variant",
562         r#####"
563 enum A { $0One(u32, u32) }
564 "#####,
565         r#####"
566 struct One(u32, u32);
567
568 enum A { One(One) }
569 "#####,
570     )
571 }
572
573 #[test]
574 fn doctest_extract_type_alias() {
575     check_doc_test(
576         "extract_type_alias",
577         r#####"
578 struct S {
579     field: $0(u8, u8, u8)$0,
580 }
581 "#####,
582         r#####"
583 type $0Type = (u8, u8, u8);
584
585 struct S {
586     field: Type,
587 }
588 "#####,
589     )
590 }
591
592 #[test]
593 fn doctest_extract_variable() {
594     check_doc_test(
595         "extract_variable",
596         r#####"
597 fn main() {
598     $0(1 + 2)$0 * 4;
599 }
600 "#####,
601         r#####"
602 fn main() {
603     let $0var_name = (1 + 2);
604     var_name * 4;
605 }
606 "#####,
607     )
608 }
609
610 #[test]
611 fn doctest_fix_visibility() {
612     check_doc_test(
613         "fix_visibility",
614         r#####"
615 mod m {
616     fn frobnicate() {}
617 }
618 fn main() {
619     m::frobnicate$0() {}
620 }
621 "#####,
622         r#####"
623 mod m {
624     $0pub(crate) fn frobnicate() {}
625 }
626 fn main() {
627     m::frobnicate() {}
628 }
629 "#####,
630     )
631 }
632
633 #[test]
634 fn doctest_flip_binexpr() {
635     check_doc_test(
636         "flip_binexpr",
637         r#####"
638 fn main() {
639     let _ = 90 +$0 2;
640 }
641 "#####,
642         r#####"
643 fn main() {
644     let _ = 2 + 90;
645 }
646 "#####,
647     )
648 }
649
650 #[test]
651 fn doctest_flip_comma() {
652     check_doc_test(
653         "flip_comma",
654         r#####"
655 fn main() {
656     ((1, 2),$0 (3, 4));
657 }
658 "#####,
659         r#####"
660 fn main() {
661     ((3, 4), (1, 2));
662 }
663 "#####,
664     )
665 }
666
667 #[test]
668 fn doctest_flip_trait_bound() {
669     check_doc_test(
670         "flip_trait_bound",
671         r#####"
672 fn foo<T: Clone +$0 Copy>() { }
673 "#####,
674         r#####"
675 fn foo<T: Copy + Clone>() { }
676 "#####,
677     )
678 }
679
680 #[test]
681 fn doctest_generate_constant() {
682     check_doc_test(
683         "generate_constant",
684         r#####"
685 struct S { i: usize }
686 impl S { pub fn new(n: usize) {} }
687 fn main() {
688     let v = S::new(CAPA$0CITY);
689 }
690 "#####,
691         r#####"
692 struct S { i: usize }
693 impl S { pub fn new(n: usize) {} }
694 fn main() {
695     const CAPACITY: usize = $0;
696     let v = S::new(CAPACITY);
697 }
698 "#####,
699     )
700 }
701
702 #[test]
703 fn doctest_generate_default_from_enum_variant() {
704     check_doc_test(
705         "generate_default_from_enum_variant",
706         r#####"
707 enum Version {
708  Undefined,
709  Minor$0,
710  Major,
711 }
712 "#####,
713         r#####"
714 enum Version {
715  Undefined,
716  Minor,
717  Major,
718 }
719
720 impl Default for Version {
721     fn default() -> Self {
722         Self::Minor
723     }
724 }
725 "#####,
726     )
727 }
728
729 #[test]
730 fn doctest_generate_default_from_new() {
731     check_doc_test(
732         "generate_default_from_new",
733         r#####"
734 struct Example { _inner: () }
735
736 impl Example {
737     pub fn n$0ew() -> Self {
738         Self { _inner: () }
739     }
740 }
741 "#####,
742         r#####"
743 struct Example { _inner: () }
744
745 impl Example {
746     pub fn new() -> Self {
747         Self { _inner: () }
748     }
749 }
750
751 impl Default for Example {
752     fn default() -> Self {
753         Self::new()
754     }
755 }
756 "#####,
757     )
758 }
759
760 #[test]
761 fn doctest_generate_delegate_methods() {
762     check_doc_test(
763         "generate_delegate_methods",
764         r#####"
765 struct Age(u8);
766 impl Age {
767     fn age(&self) -> u8 {
768         self.0
769     }
770 }
771
772 struct Person {
773     ag$0e: Age,
774 }
775 "#####,
776         r#####"
777 struct Age(u8);
778 impl Age {
779     fn age(&self) -> u8 {
780         self.0
781     }
782 }
783
784 struct Person {
785     age: Age,
786 }
787
788 impl Person {
789     $0fn age(&self) -> u8 {
790         self.age.age()
791     }
792 }
793 "#####,
794     )
795 }
796
797 #[test]
798 fn doctest_generate_deref() {
799     check_doc_test(
800         "generate_deref",
801         r#####"
802 struct A;
803 struct B {
804    $0a: A
805 }
806 "#####,
807         r#####"
808 struct A;
809 struct B {
810    a: A
811 }
812
813 impl std::ops::Deref for B {
814     type Target = A;
815
816     fn deref(&self) -> &Self::Target {
817         &self.a
818     }
819 }
820 "#####,
821     )
822 }
823
824 #[test]
825 fn doctest_generate_derive() {
826     check_doc_test(
827         "generate_derive",
828         r#####"
829 struct Point {
830     x: u32,
831     y: u32,$0
832 }
833 "#####,
834         r#####"
835 #[derive($0)]
836 struct Point {
837     x: u32,
838     y: u32,
839 }
840 "#####,
841     )
842 }
843
844 #[test]
845 fn doctest_generate_documentation_template() {
846     check_doc_test(
847         "generate_documentation_template",
848         r#####"
849 pub fn my_$0func(a: i32, b: i32) -> Result<(), std::io::Error> {
850     unimplemented!()
851 }
852 "#####,
853         r#####"
854 /// .
855 ///
856 /// # Examples
857 ///
858 /// ```
859 /// use test::my_func;
860 ///
861 /// assert_eq!(my_func(a, b), );
862 /// ```
863 ///
864 /// # Errors
865 ///
866 /// This function will return an error if .
867 pub fn my_func(a: i32, b: i32) -> Result<(), std::io::Error> {
868     unimplemented!()
869 }
870 "#####,
871     )
872 }
873
874 #[test]
875 fn doctest_generate_enum_as_method() {
876     check_doc_test(
877         "generate_enum_as_method",
878         r#####"
879 enum Value {
880  Number(i32),
881  Text(String)$0,
882 }
883 "#####,
884         r#####"
885 enum Value {
886  Number(i32),
887  Text(String),
888 }
889
890 impl Value {
891     fn as_text(&self) -> Option<&String> {
892         if let Self::Text(v) = self {
893             Some(v)
894         } else {
895             None
896         }
897     }
898 }
899 "#####,
900     )
901 }
902
903 #[test]
904 fn doctest_generate_enum_is_method() {
905     check_doc_test(
906         "generate_enum_is_method",
907         r#####"
908 enum Version {
909  Undefined,
910  Minor$0,
911  Major,
912 }
913 "#####,
914         r#####"
915 enum Version {
916  Undefined,
917  Minor,
918  Major,
919 }
920
921 impl Version {
922     /// Returns `true` if the version is [`Minor`].
923     ///
924     /// [`Minor`]: Version::Minor
925     fn is_minor(&self) -> bool {
926         matches!(self, Self::Minor)
927     }
928 }
929 "#####,
930     )
931 }
932
933 #[test]
934 fn doctest_generate_enum_try_into_method() {
935     check_doc_test(
936         "generate_enum_try_into_method",
937         r#####"
938 enum Value {
939  Number(i32),
940  Text(String)$0,
941 }
942 "#####,
943         r#####"
944 enum Value {
945  Number(i32),
946  Text(String),
947 }
948
949 impl Value {
950     fn try_into_text(self) -> Result<String, Self> {
951         if let Self::Text(v) = self {
952             Ok(v)
953         } else {
954             Err(self)
955         }
956     }
957 }
958 "#####,
959     )
960 }
961
962 #[test]
963 fn doctest_generate_from_impl_for_enum() {
964     check_doc_test(
965         "generate_from_impl_for_enum",
966         r#####"
967 enum A { $0One(u32) }
968 "#####,
969         r#####"
970 enum A { One(u32) }
971
972 impl From<u32> for A {
973     fn from(v: u32) -> Self {
974         Self::One(v)
975     }
976 }
977 "#####,
978     )
979 }
980
981 #[test]
982 fn doctest_generate_function() {
983     check_doc_test(
984         "generate_function",
985         r#####"
986 struct Baz;
987 fn baz() -> Baz { Baz }
988 fn foo() {
989     bar$0("", baz());
990 }
991
992 "#####,
993         r#####"
994 struct Baz;
995 fn baz() -> Baz { Baz }
996 fn foo() {
997     bar("", baz());
998 }
999
1000 fn bar(arg: &str, baz: Baz) ${0:-> _} {
1001     todo!()
1002 }
1003
1004 "#####,
1005     )
1006 }
1007
1008 #[test]
1009 fn doctest_generate_getter() {
1010     check_doc_test(
1011         "generate_getter",
1012         r#####"
1013 //- minicore: as_ref
1014 pub struct String;
1015 impl AsRef<str> for String {
1016     fn as_ref(&self) -> &str {
1017         ""
1018     }
1019 }
1020
1021 struct Person {
1022     nam$0e: String,
1023 }
1024 "#####,
1025         r#####"
1026 pub struct String;
1027 impl AsRef<str> for String {
1028     fn as_ref(&self) -> &str {
1029         ""
1030     }
1031 }
1032
1033 struct Person {
1034     name: String,
1035 }
1036
1037 impl Person {
1038     /// Get a reference to the person's name.
1039     fn $0name(&self) -> &str {
1040         self.name.as_ref()
1041     }
1042 }
1043 "#####,
1044     )
1045 }
1046
1047 #[test]
1048 fn doctest_generate_getter_mut() {
1049     check_doc_test(
1050         "generate_getter_mut",
1051         r#####"
1052 struct Person {
1053     nam$0e: String,
1054 }
1055 "#####,
1056         r#####"
1057 struct Person {
1058     name: String,
1059 }
1060
1061 impl Person {
1062     /// Get a mutable reference to the person's name.
1063     fn $0name_mut(&mut self) -> &mut String {
1064         &mut self.name
1065     }
1066 }
1067 "#####,
1068     )
1069 }
1070
1071 #[test]
1072 fn doctest_generate_impl() {
1073     check_doc_test(
1074         "generate_impl",
1075         r#####"
1076 struct Ctx<T: Clone> {
1077     data: T,$0
1078 }
1079 "#####,
1080         r#####"
1081 struct Ctx<T: Clone> {
1082     data: T,
1083 }
1084
1085 impl<T: Clone> Ctx<T> {
1086     $0
1087 }
1088 "#####,
1089     )
1090 }
1091
1092 #[test]
1093 fn doctest_generate_is_empty_from_len() {
1094     check_doc_test(
1095         "generate_is_empty_from_len",
1096         r#####"
1097 struct MyStruct { data: Vec<String> }
1098
1099 impl MyStruct {
1100     p$0ub fn len(&self) -> usize {
1101         self.data.len()
1102     }
1103 }
1104 "#####,
1105         r#####"
1106 struct MyStruct { data: Vec<String> }
1107
1108 impl MyStruct {
1109     pub fn len(&self) -> usize {
1110         self.data.len()
1111     }
1112
1113     pub fn is_empty(&self) -> bool {
1114         self.len() == 0
1115     }
1116 }
1117 "#####,
1118     )
1119 }
1120
1121 #[test]
1122 fn doctest_generate_new() {
1123     check_doc_test(
1124         "generate_new",
1125         r#####"
1126 struct Ctx<T: Clone> {
1127      data: T,$0
1128 }
1129 "#####,
1130         r#####"
1131 struct Ctx<T: Clone> {
1132      data: T,
1133 }
1134
1135 impl<T: Clone> Ctx<T> {
1136     fn $0new(data: T) -> Self { Self { data } }
1137 }
1138 "#####,
1139     )
1140 }
1141
1142 #[test]
1143 fn doctest_generate_setter() {
1144     check_doc_test(
1145         "generate_setter",
1146         r#####"
1147 struct Person {
1148     nam$0e: String,
1149 }
1150 "#####,
1151         r#####"
1152 struct Person {
1153     name: String,
1154 }
1155
1156 impl Person {
1157     /// Set the person's name.
1158     fn set_name(&mut self, name: String) {
1159         self.name = name;
1160     }
1161 }
1162 "#####,
1163     )
1164 }
1165
1166 #[test]
1167 fn doctest_inline_call() {
1168     check_doc_test(
1169         "inline_call",
1170         r#####"
1171 //- minicore: option
1172 fn foo(name: Option<&str>) {
1173     let name = name.unwrap$0();
1174 }
1175 "#####,
1176         r#####"
1177 fn foo(name: Option<&str>) {
1178     let name = match name {
1179             Some(val) => val,
1180             None => panic!("called `Option::unwrap()` on a `None` value"),
1181         };
1182 }
1183 "#####,
1184     )
1185 }
1186
1187 #[test]
1188 fn doctest_inline_into_callers() {
1189     check_doc_test(
1190         "inline_into_callers",
1191         r#####"
1192 fn print(_: &str) {}
1193 fn foo$0(word: &str) {
1194     if !word.is_empty() {
1195         print(word);
1196     }
1197 }
1198 fn bar() {
1199     foo("안녕하세요");
1200     foo("여러분");
1201 }
1202 "#####,
1203         r#####"
1204 fn print(_: &str) {}
1205
1206 fn bar() {
1207     {
1208         let word = "안녕하세요";
1209         if !word.is_empty() {
1210             print(word);
1211         }
1212     };
1213     {
1214         let word = "여러분";
1215         if !word.is_empty() {
1216             print(word);
1217         }
1218     };
1219 }
1220 "#####,
1221     )
1222 }
1223
1224 #[test]
1225 fn doctest_inline_local_variable() {
1226     check_doc_test(
1227         "inline_local_variable",
1228         r#####"
1229 fn main() {
1230     let x$0 = 1 + 2;
1231     x * 4;
1232 }
1233 "#####,
1234         r#####"
1235 fn main() {
1236     (1 + 2) * 4;
1237 }
1238 "#####,
1239     )
1240 }
1241
1242 #[test]
1243 fn doctest_introduce_named_generic() {
1244     check_doc_test(
1245         "introduce_named_generic",
1246         r#####"
1247 fn foo(bar: $0impl Bar) {}
1248 "#####,
1249         r#####"
1250 fn foo<B: Bar>(bar: B) {}
1251 "#####,
1252     )
1253 }
1254
1255 #[test]
1256 fn doctest_introduce_named_lifetime() {
1257     check_doc_test(
1258         "introduce_named_lifetime",
1259         r#####"
1260 impl Cursor<'_$0> {
1261     fn node(self) -> &SyntaxNode {
1262         match self {
1263             Cursor::Replace(node) | Cursor::Before(node) => node,
1264         }
1265     }
1266 }
1267 "#####,
1268         r#####"
1269 impl<'a> Cursor<'a> {
1270     fn node(self) -> &SyntaxNode {
1271         match self {
1272             Cursor::Replace(node) | Cursor::Before(node) => node,
1273         }
1274     }
1275 }
1276 "#####,
1277     )
1278 }
1279
1280 #[test]
1281 fn doctest_invert_if() {
1282     check_doc_test(
1283         "invert_if",
1284         r#####"
1285 fn main() {
1286     if$0 !y { A } else { B }
1287 }
1288 "#####,
1289         r#####"
1290 fn main() {
1291     if y { B } else { A }
1292 }
1293 "#####,
1294     )
1295 }
1296
1297 #[test]
1298 fn doctest_line_to_block() {
1299     check_doc_test(
1300         "line_to_block",
1301         r#####"
1302    // Multi-line$0
1303    // comment
1304 "#####,
1305         r#####"
1306   /*
1307   Multi-line
1308   comment
1309   */
1310 "#####,
1311     )
1312 }
1313
1314 #[test]
1315 fn doctest_make_raw_string() {
1316     check_doc_test(
1317         "make_raw_string",
1318         r#####"
1319 fn main() {
1320     "Hello,$0 World!";
1321 }
1322 "#####,
1323         r#####"
1324 fn main() {
1325     r#"Hello, World!"#;
1326 }
1327 "#####,
1328     )
1329 }
1330
1331 #[test]
1332 fn doctest_make_usual_string() {
1333     check_doc_test(
1334         "make_usual_string",
1335         r#####"
1336 fn main() {
1337     r#"Hello,$0 "World!""#;
1338 }
1339 "#####,
1340         r#####"
1341 fn main() {
1342     "Hello, \"World!\"";
1343 }
1344 "#####,
1345     )
1346 }
1347
1348 #[test]
1349 fn doctest_merge_imports() {
1350     check_doc_test(
1351         "merge_imports",
1352         r#####"
1353 use std::$0fmt::Formatter;
1354 use std::io;
1355 "#####,
1356         r#####"
1357 use std::{fmt::Formatter, io};
1358 "#####,
1359     )
1360 }
1361
1362 #[test]
1363 fn doctest_merge_match_arms() {
1364     check_doc_test(
1365         "merge_match_arms",
1366         r#####"
1367 enum Action { Move { distance: u32 }, Stop }
1368
1369 fn handle(action: Action) {
1370     match action {
1371         $0Action::Move(..) => foo(),
1372         Action::Stop => foo(),
1373     }
1374 }
1375 "#####,
1376         r#####"
1377 enum Action { Move { distance: u32 }, Stop }
1378
1379 fn handle(action: Action) {
1380     match action {
1381         Action::Move(..) | Action::Stop => foo(),
1382     }
1383 }
1384 "#####,
1385     )
1386 }
1387
1388 #[test]
1389 fn doctest_move_arm_cond_to_match_guard() {
1390     check_doc_test(
1391         "move_arm_cond_to_match_guard",
1392         r#####"
1393 enum Action { Move { distance: u32 }, Stop }
1394
1395 fn handle(action: Action) {
1396     match action {
1397         Action::Move { distance } => $0if distance > 10 { foo() },
1398         _ => (),
1399     }
1400 }
1401 "#####,
1402         r#####"
1403 enum Action { Move { distance: u32 }, Stop }
1404
1405 fn handle(action: Action) {
1406     match action {
1407         Action::Move { distance } if distance > 10 => foo(),
1408         _ => (),
1409     }
1410 }
1411 "#####,
1412     )
1413 }
1414
1415 #[test]
1416 fn doctest_move_bounds_to_where_clause() {
1417     check_doc_test(
1418         "move_bounds_to_where_clause",
1419         r#####"
1420 fn apply<T, U, $0F: FnOnce(T) -> U>(f: F, x: T) -> U {
1421     f(x)
1422 }
1423 "#####,
1424         r#####"
1425 fn apply<T, U, F>(f: F, x: T) -> U where F: FnOnce(T) -> U {
1426     f(x)
1427 }
1428 "#####,
1429     )
1430 }
1431
1432 #[test]
1433 fn doctest_move_from_mod_rs() {
1434     check_doc_test(
1435         "move_from_mod_rs",
1436         r#####"
1437 //- /main.rs
1438 mod a;
1439 //- /a/mod.rs
1440 $0fn t() {}$0
1441 "#####,
1442         r#####"
1443 fn t() {}
1444 "#####,
1445     )
1446 }
1447
1448 #[test]
1449 fn doctest_move_guard_to_arm_body() {
1450     check_doc_test(
1451         "move_guard_to_arm_body",
1452         r#####"
1453 enum Action { Move { distance: u32 }, Stop }
1454
1455 fn handle(action: Action) {
1456     match action {
1457         Action::Move { distance } $0if distance > 10 => foo(),
1458         _ => (),
1459     }
1460 }
1461 "#####,
1462         r#####"
1463 enum Action { Move { distance: u32 }, Stop }
1464
1465 fn handle(action: Action) {
1466     match action {
1467         Action::Move { distance } => if distance > 10 {
1468             foo()
1469         },
1470         _ => (),
1471     }
1472 }
1473 "#####,
1474     )
1475 }
1476
1477 #[test]
1478 fn doctest_move_module_to_file() {
1479     check_doc_test(
1480         "move_module_to_file",
1481         r#####"
1482 mod $0foo {
1483     fn t() {}
1484 }
1485 "#####,
1486         r#####"
1487 mod foo;
1488 "#####,
1489     )
1490 }
1491
1492 #[test]
1493 fn doctest_move_to_mod_rs() {
1494     check_doc_test(
1495         "move_to_mod_rs",
1496         r#####"
1497 //- /main.rs
1498 mod a;
1499 //- /a.rs
1500 $0fn t() {}$0
1501 "#####,
1502         r#####"
1503 fn t() {}
1504 "#####,
1505     )
1506 }
1507
1508 #[test]
1509 fn doctest_promote_local_to_const() {
1510     check_doc_test(
1511         "promote_local_to_const",
1512         r#####"
1513 fn main() {
1514     let foo$0 = true;
1515
1516     if foo {
1517         println!("It's true");
1518     } else {
1519         println!("It's false");
1520     }
1521 }
1522 "#####,
1523         r#####"
1524 fn main() {
1525     const $0FOO: bool = true;
1526
1527     if FOO {
1528         println!("It's true");
1529     } else {
1530         println!("It's false");
1531     }
1532 }
1533 "#####,
1534     )
1535 }
1536
1537 #[test]
1538 fn doctest_pull_assignment_up() {
1539     check_doc_test(
1540         "pull_assignment_up",
1541         r#####"
1542 fn main() {
1543     let mut foo = 6;
1544
1545     if true {
1546         $0foo = 5;
1547     } else {
1548         foo = 4;
1549     }
1550 }
1551 "#####,
1552         r#####"
1553 fn main() {
1554     let mut foo = 6;
1555
1556     foo = if true {
1557         5
1558     } else {
1559         4
1560     };
1561 }
1562 "#####,
1563     )
1564 }
1565
1566 #[test]
1567 fn doctest_qualify_method_call() {
1568     check_doc_test(
1569         "qualify_method_call",
1570         r#####"
1571 struct Foo;
1572 impl Foo {
1573     fn foo(&self) {}
1574 }
1575 fn main() {
1576     let foo = Foo;
1577     foo.fo$0o();
1578 }
1579 "#####,
1580         r#####"
1581 struct Foo;
1582 impl Foo {
1583     fn foo(&self) {}
1584 }
1585 fn main() {
1586     let foo = Foo;
1587     Foo::foo(&foo);
1588 }
1589 "#####,
1590     )
1591 }
1592
1593 #[test]
1594 fn doctest_qualify_path() {
1595     check_doc_test(
1596         "qualify_path",
1597         r#####"
1598 fn main() {
1599     let map = HashMap$0::new();
1600 }
1601 pub mod std { pub mod collections { pub struct HashMap { } } }
1602 "#####,
1603         r#####"
1604 fn main() {
1605     let map = std::collections::HashMap::new();
1606 }
1607 pub mod std { pub mod collections { pub struct HashMap { } } }
1608 "#####,
1609     )
1610 }
1611
1612 #[test]
1613 fn doctest_reformat_number_literal() {
1614     check_doc_test(
1615         "reformat_number_literal",
1616         r#####"
1617 const _: i32 = 1012345$0;
1618 "#####,
1619         r#####"
1620 const _: i32 = 1_012_345;
1621 "#####,
1622     )
1623 }
1624
1625 #[test]
1626 fn doctest_remove_dbg() {
1627     check_doc_test(
1628         "remove_dbg",
1629         r#####"
1630 fn main() {
1631     $0dbg!(92);
1632 }
1633 "#####,
1634         r#####"
1635 fn main() {
1636     92;
1637 }
1638 "#####,
1639     )
1640 }
1641
1642 #[test]
1643 fn doctest_remove_hash() {
1644     check_doc_test(
1645         "remove_hash",
1646         r#####"
1647 fn main() {
1648     r#"Hello,$0 World!"#;
1649 }
1650 "#####,
1651         r#####"
1652 fn main() {
1653     r"Hello, World!";
1654 }
1655 "#####,
1656     )
1657 }
1658
1659 #[test]
1660 fn doctest_remove_mut() {
1661     check_doc_test(
1662         "remove_mut",
1663         r#####"
1664 impl Walrus {
1665     fn feed(&mut$0 self, amount: u32) {}
1666 }
1667 "#####,
1668         r#####"
1669 impl Walrus {
1670     fn feed(&self, amount: u32) {}
1671 }
1672 "#####,
1673     )
1674 }
1675
1676 #[test]
1677 fn doctest_remove_unused_param() {
1678     check_doc_test(
1679         "remove_unused_param",
1680         r#####"
1681 fn frobnicate(x: i32$0) {}
1682
1683 fn main() {
1684     frobnicate(92);
1685 }
1686 "#####,
1687         r#####"
1688 fn frobnicate() {}
1689
1690 fn main() {
1691     frobnicate();
1692 }
1693 "#####,
1694     )
1695 }
1696
1697 #[test]
1698 fn doctest_reorder_fields() {
1699     check_doc_test(
1700         "reorder_fields",
1701         r#####"
1702 struct Foo {foo: i32, bar: i32};
1703 const test: Foo = $0Foo {bar: 0, foo: 1}
1704 "#####,
1705         r#####"
1706 struct Foo {foo: i32, bar: i32};
1707 const test: Foo = Foo {foo: 1, bar: 0}
1708 "#####,
1709     )
1710 }
1711
1712 #[test]
1713 fn doctest_reorder_impl() {
1714     check_doc_test(
1715         "reorder_impl",
1716         r#####"
1717 trait Foo {
1718     fn a() {}
1719     fn b() {}
1720     fn c() {}
1721 }
1722
1723 struct Bar;
1724 $0impl Foo for Bar {
1725     fn b() {}
1726     fn c() {}
1727     fn a() {}
1728 }
1729 "#####,
1730         r#####"
1731 trait Foo {
1732     fn a() {}
1733     fn b() {}
1734     fn c() {}
1735 }
1736
1737 struct Bar;
1738 impl Foo for Bar {
1739     fn a() {}
1740     fn b() {}
1741     fn c() {}
1742 }
1743 "#####,
1744     )
1745 }
1746
1747 #[test]
1748 fn doctest_replace_char_with_string() {
1749     check_doc_test(
1750         "replace_char_with_string",
1751         r#####"
1752 fn main() {
1753     find('{$0');
1754 }
1755 "#####,
1756         r#####"
1757 fn main() {
1758     find("{");
1759 }
1760 "#####,
1761     )
1762 }
1763
1764 #[test]
1765 fn doctest_replace_derive_with_manual_impl() {
1766     check_doc_test(
1767         "replace_derive_with_manual_impl",
1768         r#####"
1769 //- minicore: derive
1770 trait Debug { fn fmt(&self, f: &mut Formatter) -> Result<()>; }
1771 #[derive(Deb$0ug, Display)]
1772 struct S;
1773 "#####,
1774         r#####"
1775 trait Debug { fn fmt(&self, f: &mut Formatter) -> Result<()>; }
1776 #[derive(Display)]
1777 struct S;
1778
1779 impl Debug for S {
1780     $0fn fmt(&self, f: &mut Formatter) -> Result<()> {
1781         f.debug_struct("S").finish()
1782     }
1783 }
1784 "#####,
1785     )
1786 }
1787
1788 #[test]
1789 fn doctest_replace_if_let_with_match() {
1790     check_doc_test(
1791         "replace_if_let_with_match",
1792         r#####"
1793 enum Action { Move { distance: u32 }, Stop }
1794
1795 fn handle(action: Action) {
1796     $0if let Action::Move { distance } = action {
1797         foo(distance)
1798     } else {
1799         bar()
1800     }
1801 }
1802 "#####,
1803         r#####"
1804 enum Action { Move { distance: u32 }, Stop }
1805
1806 fn handle(action: Action) {
1807     match action {
1808         Action::Move { distance } => foo(distance),
1809         _ => bar(),
1810     }
1811 }
1812 "#####,
1813     )
1814 }
1815
1816 #[test]
1817 fn doctest_replace_let_with_if_let() {
1818     check_doc_test(
1819         "replace_let_with_if_let",
1820         r#####"
1821 enum Option<T> { Some(T), None }
1822
1823 fn main(action: Action) {
1824     $0let x = compute();
1825 }
1826
1827 fn compute() -> Option<i32> { None }
1828 "#####,
1829         r#####"
1830 enum Option<T> { Some(T), None }
1831
1832 fn main(action: Action) {
1833     if let Some(x) = compute() {
1834     }
1835 }
1836
1837 fn compute() -> Option<i32> { None }
1838 "#####,
1839     )
1840 }
1841
1842 #[test]
1843 fn doctest_replace_match_with_if_let() {
1844     check_doc_test(
1845         "replace_match_with_if_let",
1846         r#####"
1847 enum Action { Move { distance: u32 }, Stop }
1848
1849 fn handle(action: Action) {
1850     $0match action {
1851         Action::Move { distance } => foo(distance),
1852         _ => bar(),
1853     }
1854 }
1855 "#####,
1856         r#####"
1857 enum Action { Move { distance: u32 }, Stop }
1858
1859 fn handle(action: Action) {
1860     if let Action::Move { distance } = action {
1861         foo(distance)
1862     } else {
1863         bar()
1864     }
1865 }
1866 "#####,
1867     )
1868 }
1869
1870 #[test]
1871 fn doctest_replace_qualified_name_with_use() {
1872     check_doc_test(
1873         "replace_qualified_name_with_use",
1874         r#####"
1875 mod std { pub mod collections { pub struct HashMap<T, U>(T, U); } }
1876 fn process(map: std::collections::$0HashMap<String, String>) {}
1877 "#####,
1878         r#####"
1879 use std::collections::HashMap;
1880
1881 mod std { pub mod collections { pub struct HashMap<T, U>(T, U); } }
1882 fn process(map: HashMap<String, String>) {}
1883 "#####,
1884     )
1885 }
1886
1887 #[test]
1888 fn doctest_replace_string_with_char() {
1889     check_doc_test(
1890         "replace_string_with_char",
1891         r#####"
1892 fn main() {
1893     find("{$0");
1894 }
1895 "#####,
1896         r#####"
1897 fn main() {
1898     find('{');
1899 }
1900 "#####,
1901     )
1902 }
1903
1904 #[test]
1905 fn doctest_replace_try_expr_with_match() {
1906     check_doc_test(
1907         "replace_try_expr_with_match",
1908         r#####"
1909 //- minicore:option
1910 fn handle() {
1911     let pat = Some(true)$0?;
1912 }
1913 "#####,
1914         r#####"
1915 fn handle() {
1916     let pat = match Some(true) {
1917         Some(it) => it,
1918         None => return None,
1919     };
1920 }
1921 "#####,
1922     )
1923 }
1924
1925 #[test]
1926 fn doctest_replace_turbofish_with_explicit_type() {
1927     check_doc_test(
1928         "replace_turbofish_with_explicit_type",
1929         r#####"
1930 fn make<T>() -> T { ) }
1931 fn main() {
1932     let a = make$0::<i32>();
1933 }
1934 "#####,
1935         r#####"
1936 fn make<T>() -> T { ) }
1937 fn main() {
1938     let a: i32 = make();
1939 }
1940 "#####,
1941     )
1942 }
1943
1944 #[test]
1945 fn doctest_sort_items() {
1946     check_doc_test(
1947         "sort_items",
1948         r#####"
1949 struct $0Foo$0 { second: u32, first: String }
1950 "#####,
1951         r#####"
1952 struct Foo { first: String, second: u32 }
1953 "#####,
1954     )
1955 }
1956
1957 #[test]
1958 fn doctest_sort_items_1() {
1959     check_doc_test(
1960         "sort_items",
1961         r#####"
1962 trait $0Bar$0 {
1963     fn second(&self) -> u32;
1964     fn first(&self) -> String;
1965 }
1966 "#####,
1967         r#####"
1968 trait Bar {
1969     fn first(&self) -> String;
1970     fn second(&self) -> u32;
1971 }
1972 "#####,
1973     )
1974 }
1975
1976 #[test]
1977 fn doctest_sort_items_2() {
1978     check_doc_test(
1979         "sort_items",
1980         r#####"
1981 struct Baz;
1982 impl $0Baz$0 {
1983     fn second(&self) -> u32;
1984     fn first(&self) -> String;
1985 }
1986 "#####,
1987         r#####"
1988 struct Baz;
1989 impl Baz {
1990     fn first(&self) -> String;
1991     fn second(&self) -> u32;
1992 }
1993 "#####,
1994     )
1995 }
1996
1997 #[test]
1998 fn doctest_sort_items_3() {
1999     check_doc_test(
2000         "sort_items",
2001         r#####"
2002 enum $0Animal$0 {
2003   Dog(String, f64),
2004   Cat { weight: f64, name: String },
2005 }
2006 "#####,
2007         r#####"
2008 enum Animal {
2009   Cat { weight: f64, name: String },
2010   Dog(String, f64),
2011 }
2012 "#####,
2013     )
2014 }
2015
2016 #[test]
2017 fn doctest_sort_items_4() {
2018     check_doc_test(
2019         "sort_items",
2020         r#####"
2021 enum Animal {
2022   Dog(String, f64),
2023   Cat $0{ weight: f64, name: String }$0,
2024 }
2025 "#####,
2026         r#####"
2027 enum Animal {
2028   Dog(String, f64),
2029   Cat { name: String, weight: f64 },
2030 }
2031 "#####,
2032     )
2033 }
2034
2035 #[test]
2036 fn doctest_split_import() {
2037     check_doc_test(
2038         "split_import",
2039         r#####"
2040 use std::$0collections::HashMap;
2041 "#####,
2042         r#####"
2043 use std::{collections::HashMap};
2044 "#####,
2045     )
2046 }
2047
2048 #[test]
2049 fn doctest_toggle_ignore() {
2050     check_doc_test(
2051         "toggle_ignore",
2052         r#####"
2053 $0#[test]
2054 fn arithmetics {
2055     assert_eq!(2 + 2, 5);
2056 }
2057 "#####,
2058         r#####"
2059 #[test]
2060 #[ignore]
2061 fn arithmetics {
2062     assert_eq!(2 + 2, 5);
2063 }
2064 "#####,
2065     )
2066 }
2067
2068 #[test]
2069 fn doctest_unmerge_use() {
2070     check_doc_test(
2071         "unmerge_use",
2072         r#####"
2073 use std::fmt::{Debug, Display$0};
2074 "#####,
2075         r#####"
2076 use std::fmt::{Debug};
2077 use std::fmt::Display;
2078 "#####,
2079     )
2080 }
2081
2082 #[test]
2083 fn doctest_unwrap_block() {
2084     check_doc_test(
2085         "unwrap_block",
2086         r#####"
2087 fn foo() {
2088     if true {$0
2089         println!("foo");
2090     }
2091 }
2092 "#####,
2093         r#####"
2094 fn foo() {
2095     println!("foo");
2096 }
2097 "#####,
2098     )
2099 }
2100
2101 #[test]
2102 fn doctest_unwrap_result_return_type() {
2103     check_doc_test(
2104         "unwrap_result_return_type",
2105         r#####"
2106 //- minicore: result
2107 fn foo() -> Result<i32>$0 { Ok(42i32) }
2108 "#####,
2109         r#####"
2110 fn foo() -> i32 { 42i32 }
2111 "#####,
2112     )
2113 }
2114
2115 #[test]
2116 fn doctest_wrap_return_type_in_result() {
2117     check_doc_test(
2118         "wrap_return_type_in_result",
2119         r#####"
2120 //- minicore: result
2121 fn foo() -> i32$0 { 42i32 }
2122 "#####,
2123         r#####"
2124 fn foo() -> Result<i32, ${0:_}> { Ok(42i32) }
2125 "#####,
2126     )
2127 }