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