]> git.lizzy.rs Git - rust.git/blob - crates/ide_assists/src/tests/generated.rs
7709: Updated the implementation.
[rust.git] / crates / ide_assists / src / tests / generated.rs
1 //! Generated file, do not edit by hand, see `xtask/src/codegen`
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 "#####,
56         r#####"
57 trait Trait {
58     type X;
59     fn foo(&self);
60     fn bar(&self) {}
61 }
62
63 impl Trait for () {
64     type X = ();
65     fn foo(&self) {}
66
67     $0fn bar(&self) {}
68 }
69 "#####,
70     )
71 }
72
73 #[test]
74 fn doctest_add_impl_missing_members() {
75     check_doc_test(
76         "add_impl_missing_members",
77         r#####"
78 trait Trait<T> {
79     type X;
80     fn foo(&self) -> T;
81     fn bar(&self) {}
82 }
83
84 impl Trait<u32> for () {$0
85
86 }
87 "#####,
88         r#####"
89 trait Trait<T> {
90     type X;
91     fn foo(&self) -> T;
92     fn bar(&self) {}
93 }
94
95 impl Trait<u32> for () {
96     $0type X;
97
98     fn foo(&self) -> u32 {
99         todo!()
100     }
101 }
102 "#####,
103     )
104 }
105
106 #[test]
107 fn doctest_add_lifetime_to_type() {
108     check_doc_test(
109         "add_lifetime_to_type",
110         r#####"
111 struct Point {
112     x: &$0u32,
113     y: u32,
114 }
115 "#####,
116         r#####"
117 struct Point<'a> {
118     x: &'a u32,
119     y: u32,
120 }
121 "#####,
122     )
123 }
124
125 #[test]
126 fn doctest_add_turbo_fish() {
127     check_doc_test(
128         "add_turbo_fish",
129         r#####"
130 fn make<T>() -> T { todo!() }
131 fn main() {
132     let x = make$0();
133 }
134 "#####,
135         r#####"
136 fn make<T>() -> T { todo!() }
137 fn main() {
138     let x = make::<${0:_}>();
139 }
140 "#####,
141     )
142 }
143
144 #[test]
145 fn doctest_apply_demorgan() {
146     check_doc_test(
147         "apply_demorgan",
148         r#####"
149 fn main() {
150     if x != 4 ||$0 y < 3.14 {}
151 }
152 "#####,
153         r#####"
154 fn main() {
155     if !(x == 4 && !(y < 3.14)) {}
156 }
157 "#####,
158     )
159 }
160
161 #[test]
162 fn doctest_auto_import() {
163     check_doc_test(
164         "auto_import",
165         r#####"
166 fn main() {
167     let map = HashMap$0::new();
168 }
169 pub mod std { pub mod collections { pub struct HashMap { } } }
170 "#####,
171         r#####"
172 use std::collections::HashMap;
173
174 fn main() {
175     let map = HashMap::new();
176 }
177 pub mod std { pub mod collections { pub struct HashMap { } } }
178 "#####,
179     )
180 }
181
182 #[test]
183 fn doctest_change_visibility() {
184     check_doc_test(
185         "change_visibility",
186         r#####"
187 $0fn frobnicate() {}
188 "#####,
189         r#####"
190 pub(crate) fn frobnicate() {}
191 "#####,
192     )
193 }
194
195 #[test]
196 fn doctest_convert_integer_literal() {
197     check_doc_test(
198         "convert_integer_literal",
199         r#####"
200 const _: i32 = 10$0;
201 "#####,
202         r#####"
203 const _: i32 = 0b1010;
204 "#####,
205     )
206 }
207
208 #[test]
209 fn doctest_convert_iter_for_each_to_for() {
210     check_doc_test(
211         "convert_iter_for_each_to_for",
212         r#####"
213 //- /lib.rs crate:core
214 pub mod iter { pub mod traits { pub mod iterator { pub trait Iterator {} } } }
215 pub struct SomeIter;
216 impl self::iter::traits::iterator::Iterator for SomeIter {}
217 //- /lib.rs crate:main deps:core
218 use core::SomeIter;
219 fn main() {
220     let iter = SomeIter;
221     iter.for_each$0(|(x, y)| {
222         println!("x: {}, y: {}", x, y);
223     });
224 }
225 "#####,
226         r#####"
227 use core::SomeIter;
228 fn main() {
229     let iter = SomeIter;
230     for (x, y) in iter {
231         println!("x: {}, y: {}", x, y);
232     }
233 }
234 "#####,
235     )
236 }
237
238 #[test]
239 fn doctest_convert_to_guarded_return() {
240     check_doc_test(
241         "convert_to_guarded_return",
242         r#####"
243 fn main() {
244     $0if cond {
245         foo();
246         bar();
247     }
248 }
249 "#####,
250         r#####"
251 fn main() {
252     if !cond {
253         return;
254     }
255     foo();
256     bar();
257 }
258 "#####,
259     )
260 }
261
262 #[test]
263 fn doctest_expand_glob_import() {
264     check_doc_test(
265         "expand_glob_import",
266         r#####"
267 mod foo {
268     pub struct Bar;
269     pub struct Baz;
270 }
271
272 use foo::*$0;
273
274 fn qux(bar: Bar, baz: Baz) {}
275 "#####,
276         r#####"
277 mod foo {
278     pub struct Bar;
279     pub struct Baz;
280 }
281
282 use foo::{Baz, Bar};
283
284 fn qux(bar: Bar, baz: Baz) {}
285 "#####,
286     )
287 }
288
289 #[test]
290 fn doctest_extract_function() {
291     check_doc_test(
292         "extract_function",
293         r#####"
294 fn main() {
295     let n = 1;
296     $0let m = n + 2;
297     let k = m + n;$0
298     let g = 3;
299 }
300 "#####,
301         r#####"
302 fn main() {
303     let n = 1;
304     fun_name(n);
305     let g = 3;
306 }
307
308 fn $0fun_name(n: i32) {
309     let m = n + 2;
310     let k = m + n;
311 }
312 "#####,
313     )
314 }
315
316 #[test]
317 fn doctest_extract_struct_from_enum_variant() {
318     check_doc_test(
319         "extract_struct_from_enum_variant",
320         r#####"
321 enum A { $0One(u32, u32) }
322 "#####,
323         r#####"
324 struct One(pub u32, pub u32);
325
326 enum A { One(One) }
327 "#####,
328     )
329 }
330
331 #[test]
332 fn doctest_extract_variable() {
333     check_doc_test(
334         "extract_variable",
335         r#####"
336 fn main() {
337     $0(1 + 2)$0 * 4;
338 }
339 "#####,
340         r#####"
341 fn main() {
342     let $0var_name = (1 + 2);
343     var_name * 4;
344 }
345 "#####,
346     )
347 }
348
349 #[test]
350 fn doctest_fill_match_arms() {
351     check_doc_test(
352         "fill_match_arms",
353         r#####"
354 enum Action { Move { distance: u32 }, Stop }
355
356 fn handle(action: Action) {
357     match action {
358         $0
359     }
360 }
361 "#####,
362         r#####"
363 enum Action { Move { distance: u32 }, Stop }
364
365 fn handle(action: Action) {
366     match action {
367         $0Action::Move { distance } => {}
368         Action::Stop => {}
369     }
370 }
371 "#####,
372     )
373 }
374
375 #[test]
376 fn doctest_fix_visibility() {
377     check_doc_test(
378         "fix_visibility",
379         r#####"
380 mod m {
381     fn frobnicate() {}
382 }
383 fn main() {
384     m::frobnicate$0() {}
385 }
386 "#####,
387         r#####"
388 mod m {
389     $0pub(crate) fn frobnicate() {}
390 }
391 fn main() {
392     m::frobnicate() {}
393 }
394 "#####,
395     )
396 }
397
398 #[test]
399 fn doctest_flip_binexpr() {
400     check_doc_test(
401         "flip_binexpr",
402         r#####"
403 fn main() {
404     let _ = 90 +$0 2;
405 }
406 "#####,
407         r#####"
408 fn main() {
409     let _ = 2 + 90;
410 }
411 "#####,
412     )
413 }
414
415 #[test]
416 fn doctest_flip_comma() {
417     check_doc_test(
418         "flip_comma",
419         r#####"
420 fn main() {
421     ((1, 2),$0 (3, 4));
422 }
423 "#####,
424         r#####"
425 fn main() {
426     ((3, 4), (1, 2));
427 }
428 "#####,
429     )
430 }
431
432 #[test]
433 fn doctest_flip_trait_bound() {
434     check_doc_test(
435         "flip_trait_bound",
436         r#####"
437 fn foo<T: Clone +$0 Copy>() { }
438 "#####,
439         r#####"
440 fn foo<T: Copy + Clone>() { }
441 "#####,
442     )
443 }
444
445 #[test]
446 fn doctest_generate_default_from_enum_variant() {
447     check_doc_test(
448         "generate_default_from_enum_variant",
449         r#####"
450 enum Version {
451  Undefined,
452  Minor$0,
453  Major,
454 }
455 "#####,
456         r#####"
457 enum Version {
458  Undefined,
459  Minor,
460  Major,
461 }
462
463 impl Default for Version {
464     fn default() -> Self {
465         Self::Minor
466     }
467 }
468 "#####,
469     )
470 }
471
472 #[test]
473 fn doctest_generate_default_from_new() {
474     check_doc_test(
475         "generate_default_from_new",
476         r#####"
477 struct Example { _inner: () }
478
479 impl Example {
480     pub fn n$0ew() -> Self {
481         Self { _inner: () }
482     }
483 }
484 "#####,
485         r#####"
486 struct Example { _inner: () }
487
488 impl Example {
489     pub fn new() -> Self {
490         Self { _inner: () }
491     }
492 }
493
494 impl Default for Example {
495     fn default() -> Self {
496         Self::new()
497     }
498 }
499 "#####,
500     )
501 }
502
503 #[test]
504 fn doctest_generate_derive() {
505     check_doc_test(
506         "generate_derive",
507         r#####"
508 struct Point {
509     x: u32,
510     y: u32,$0
511 }
512 "#####,
513         r#####"
514 #[derive($0)]
515 struct Point {
516     x: u32,
517     y: u32,
518 }
519 "#####,
520     )
521 }
522
523 #[test]
524 fn doctest_generate_enum_as_method() {
525     check_doc_test(
526         "generate_enum_as_method",
527         r#####"
528 enum Value {
529  Number(i32),
530  Text(String)$0,
531 }
532 "#####,
533         r#####"
534 enum Value {
535  Number(i32),
536  Text(String),
537 }
538
539 impl Value {
540     fn as_text(&self) -> Option<&String> {
541         if let Self::Text(v) = self {
542             Some(v)
543         } else {
544             None
545         }
546     }
547 }
548 "#####,
549     )
550 }
551
552 #[test]
553 fn doctest_generate_enum_is_method() {
554     check_doc_test(
555         "generate_enum_is_method",
556         r#####"
557 enum Version {
558  Undefined,
559  Minor$0,
560  Major,
561 }
562 "#####,
563         r#####"
564 enum Version {
565  Undefined,
566  Minor,
567  Major,
568 }
569
570 impl Version {
571     /// Returns `true` if the version is [`Minor`].
572     fn is_minor(&self) -> bool {
573         matches!(self, Self::Minor)
574     }
575 }
576 "#####,
577     )
578 }
579
580 #[test]
581 fn doctest_generate_enum_try_into_method() {
582     check_doc_test(
583         "generate_enum_try_into_method",
584         r#####"
585 enum Value {
586  Number(i32),
587  Text(String)$0,
588 }
589 "#####,
590         r#####"
591 enum Value {
592  Number(i32),
593  Text(String),
594 }
595
596 impl Value {
597     fn try_into_text(self) -> Result<String, Self> {
598         if let Self::Text(v) = self {
599             Ok(v)
600         } else {
601             Err(self)
602         }
603     }
604 }
605 "#####,
606     )
607 }
608
609 #[test]
610 fn doctest_generate_from_impl_for_enum() {
611     check_doc_test(
612         "generate_from_impl_for_enum",
613         r#####"
614 enum A { $0One(u32) }
615 "#####,
616         r#####"
617 enum A { One(u32) }
618
619 impl From<u32> for A {
620     fn from(v: u32) -> Self {
621         Self::One(v)
622     }
623 }
624 "#####,
625     )
626 }
627
628 #[test]
629 fn doctest_generate_function() {
630     check_doc_test(
631         "generate_function",
632         r#####"
633 struct Baz;
634 fn baz() -> Baz { Baz }
635 fn foo() {
636     bar$0("", baz());
637 }
638
639 "#####,
640         r#####"
641 struct Baz;
642 fn baz() -> Baz { Baz }
643 fn foo() {
644     bar("", baz());
645 }
646
647 fn bar(arg: &str, baz: Baz) ${0:-> ()} {
648     todo!()
649 }
650
651 "#####,
652     )
653 }
654
655 #[test]
656 fn doctest_generate_getter() {
657     check_doc_test(
658         "generate_getter",
659         r#####"
660 struct Person {
661     nam$0e: String,
662 }
663 "#####,
664         r#####"
665 struct Person {
666     name: String,
667 }
668
669 impl Person {
670     /// Get a reference to the person's name.
671     fn name(&self) -> &String {
672         &self.name
673     }
674 }
675 "#####,
676     )
677 }
678
679 #[test]
680 fn doctest_generate_getter_mut() {
681     check_doc_test(
682         "generate_getter_mut",
683         r#####"
684 struct Person {
685     nam$0e: String,
686 }
687 "#####,
688         r#####"
689 struct Person {
690     name: String,
691 }
692
693 impl Person {
694     /// Get a mutable reference to the person's name.
695     fn name_mut(&mut self) -> &mut String {
696         &mut self.name
697     }
698 }
699 "#####,
700     )
701 }
702
703 #[test]
704 fn doctest_generate_impl() {
705     check_doc_test(
706         "generate_impl",
707         r#####"
708 struct Ctx<T: Clone> {
709     data: T,$0
710 }
711 "#####,
712         r#####"
713 struct Ctx<T: Clone> {
714     data: T,
715 }
716
717 impl<T: Clone> Ctx<T> {
718     $0
719 }
720 "#####,
721     )
722 }
723
724 #[test]
725 fn doctest_generate_is_empty_from_len() {
726     check_doc_test(
727         "generate_is_empty_from_len",
728         r#####"
729 struct MyStruct { data: Vec<String> }
730
731 impl MyStruct {
732     p$0ub fn len(&self) -> usize {
733         self.data.len()
734     }
735 }
736 "#####,
737         r#####"
738 struct MyStruct { data: Vec<String> }
739
740 impl MyStruct {
741     pub fn len(&self) -> usize {
742         self.data.len()
743     }
744
745     pub fn is_empty(&self) -> bool {
746         self.len() == 0
747     }
748 }
749 "#####,
750     )
751 }
752
753 #[test]
754 fn doctest_generate_new() {
755     check_doc_test(
756         "generate_new",
757         r#####"
758 struct Ctx<T: Clone> {
759      data: T,$0
760 }
761 "#####,
762         r#####"
763 struct Ctx<T: Clone> {
764      data: T,
765 }
766
767 impl<T: Clone> Ctx<T> {
768     fn $0new(data: T) -> Self { Self { data } }
769 }
770 "#####,
771     )
772 }
773
774 #[test]
775 fn doctest_generate_setter() {
776     check_doc_test(
777         "generate_setter",
778         r#####"
779 struct Person {
780     nam$0e: String,
781 }
782 "#####,
783         r#####"
784 struct Person {
785     name: String,
786 }
787
788 impl Person {
789     /// Set the person's name.
790     fn set_name(&mut self, name: String) {
791         self.name = name;
792     }
793 }
794 "#####,
795     )
796 }
797
798 #[test]
799 fn doctest_infer_function_return_type() {
800     check_doc_test(
801         "infer_function_return_type",
802         r#####"
803 fn foo() { 4$02i32 }
804 "#####,
805         r#####"
806 fn foo() -> i32 { 42i32 }
807 "#####,
808     )
809 }
810
811 #[test]
812 fn doctest_inline_function() {
813     check_doc_test(
814         "inline_function",
815         r#####"
816 fn add(a: u32, b: u32) -> u32 { a + b }
817 fn main() {
818     let x = add$0(1, 2);
819 }
820 "#####,
821         r#####"
822 fn add(a: u32, b: u32) -> u32 { a + b }
823 fn main() {
824     let x = {
825         let a = 1;
826         let b = 2;
827         a + b
828     };
829 }
830 "#####,
831     )
832 }
833
834 #[test]
835 fn doctest_inline_local_variable() {
836     check_doc_test(
837         "inline_local_variable",
838         r#####"
839 fn main() {
840     let x$0 = 1 + 2;
841     x * 4;
842 }
843 "#####,
844         r#####"
845 fn main() {
846     (1 + 2) * 4;
847 }
848 "#####,
849     )
850 }
851
852 #[test]
853 fn doctest_introduce_named_lifetime() {
854     check_doc_test(
855         "introduce_named_lifetime",
856         r#####"
857 impl Cursor<'_$0> {
858     fn node(self) -> &SyntaxNode {
859         match self {
860             Cursor::Replace(node) | Cursor::Before(node) => node,
861         }
862     }
863 }
864 "#####,
865         r#####"
866 impl<'a> Cursor<'a> {
867     fn node(self) -> &SyntaxNode {
868         match self {
869             Cursor::Replace(node) | Cursor::Before(node) => node,
870         }
871     }
872 }
873 "#####,
874     )
875 }
876
877 #[test]
878 fn doctest_invert_if() {
879     check_doc_test(
880         "invert_if",
881         r#####"
882 fn main() {
883     if$0 !y { A } else { B }
884 }
885 "#####,
886         r#####"
887 fn main() {
888     if y { B } else { A }
889 }
890 "#####,
891     )
892 }
893
894 #[test]
895 fn doctest_make_raw_string() {
896     check_doc_test(
897         "make_raw_string",
898         r#####"
899 fn main() {
900     "Hello,$0 World!";
901 }
902 "#####,
903         r#####"
904 fn main() {
905     r#"Hello, World!"#;
906 }
907 "#####,
908     )
909 }
910
911 #[test]
912 fn doctest_make_usual_string() {
913     check_doc_test(
914         "make_usual_string",
915         r#####"
916 fn main() {
917     r#"Hello,$0 "World!""#;
918 }
919 "#####,
920         r#####"
921 fn main() {
922     "Hello, \"World!\"";
923 }
924 "#####,
925     )
926 }
927
928 #[test]
929 fn doctest_merge_imports() {
930     check_doc_test(
931         "merge_imports",
932         r#####"
933 use std::$0fmt::Formatter;
934 use std::io;
935 "#####,
936         r#####"
937 use std::{fmt::Formatter, io};
938 "#####,
939     )
940 }
941
942 #[test]
943 fn doctest_merge_match_arms() {
944     check_doc_test(
945         "merge_match_arms",
946         r#####"
947 enum Action { Move { distance: u32 }, Stop }
948
949 fn handle(action: Action) {
950     match action {
951         $0Action::Move(..) => foo(),
952         Action::Stop => foo(),
953     }
954 }
955 "#####,
956         r#####"
957 enum Action { Move { distance: u32 }, Stop }
958
959 fn handle(action: Action) {
960     match action {
961         Action::Move(..) | Action::Stop => foo(),
962     }
963 }
964 "#####,
965     )
966 }
967
968 #[test]
969 fn doctest_move_arm_cond_to_match_guard() {
970     check_doc_test(
971         "move_arm_cond_to_match_guard",
972         r#####"
973 enum Action { Move { distance: u32 }, Stop }
974
975 fn handle(action: Action) {
976     match action {
977         Action::Move { distance } => $0if distance > 10 { foo() },
978         _ => (),
979     }
980 }
981 "#####,
982         r#####"
983 enum Action { Move { distance: u32 }, Stop }
984
985 fn handle(action: Action) {
986     match action {
987         Action::Move { distance } if distance > 10 => foo(),
988         _ => (),
989     }
990 }
991 "#####,
992     )
993 }
994
995 #[test]
996 fn doctest_move_bounds_to_where_clause() {
997     check_doc_test(
998         "move_bounds_to_where_clause",
999         r#####"
1000 fn apply<T, U, $0F: FnOnce(T) -> U>(f: F, x: T) -> U {
1001     f(x)
1002 }
1003 "#####,
1004         r#####"
1005 fn apply<T, U, F>(f: F, x: T) -> U where F: FnOnce(T) -> U {
1006     f(x)
1007 }
1008 "#####,
1009     )
1010 }
1011
1012 #[test]
1013 fn doctest_move_guard_to_arm_body() {
1014     check_doc_test(
1015         "move_guard_to_arm_body",
1016         r#####"
1017 enum Action { Move { distance: u32 }, Stop }
1018
1019 fn handle(action: Action) {
1020     match action {
1021         Action::Move { distance } $0if distance > 10 => foo(),
1022         _ => (),
1023     }
1024 }
1025 "#####,
1026         r#####"
1027 enum Action { Move { distance: u32 }, Stop }
1028
1029 fn handle(action: Action) {
1030     match action {
1031         Action::Move { distance } => if distance > 10 {
1032             foo()
1033         },
1034         _ => (),
1035     }
1036 }
1037 "#####,
1038     )
1039 }
1040
1041 #[test]
1042 fn doctest_move_module_to_file() {
1043     check_doc_test(
1044         "move_module_to_file",
1045         r#####"
1046 mod $0foo {
1047     fn t() {}
1048 }
1049 "#####,
1050         r#####"
1051 mod foo;
1052 "#####,
1053     )
1054 }
1055
1056 #[test]
1057 fn doctest_pull_assignment_up() {
1058     check_doc_test(
1059         "pull_assignment_up",
1060         r#####"
1061 fn main() {
1062     let mut foo = 6;
1063
1064     if true {
1065         $0foo = 5;
1066     } else {
1067         foo = 4;
1068     }
1069 }
1070 "#####,
1071         r#####"
1072 fn main() {
1073     let mut foo = 6;
1074
1075     foo = if true {
1076         5
1077     } else {
1078         4
1079     };
1080 }
1081 "#####,
1082     )
1083 }
1084
1085 #[test]
1086 fn doctest_qualify_path() {
1087     check_doc_test(
1088         "qualify_path",
1089         r#####"
1090 fn main() {
1091     let map = HashMap$0::new();
1092 }
1093 pub mod std { pub mod collections { pub struct HashMap { } } }
1094 "#####,
1095         r#####"
1096 fn main() {
1097     let map = std::collections::HashMap::new();
1098 }
1099 pub mod std { pub mod collections { pub struct HashMap { } } }
1100 "#####,
1101     )
1102 }
1103
1104 #[test]
1105 fn doctest_remove_dbg() {
1106     check_doc_test(
1107         "remove_dbg",
1108         r#####"
1109 fn main() {
1110     $0dbg!(92);
1111 }
1112 "#####,
1113         r#####"
1114 fn main() {
1115     92;
1116 }
1117 "#####,
1118     )
1119 }
1120
1121 #[test]
1122 fn doctest_remove_hash() {
1123     check_doc_test(
1124         "remove_hash",
1125         r#####"
1126 fn main() {
1127     r#"Hello,$0 World!"#;
1128 }
1129 "#####,
1130         r#####"
1131 fn main() {
1132     r"Hello, World!";
1133 }
1134 "#####,
1135     )
1136 }
1137
1138 #[test]
1139 fn doctest_remove_mut() {
1140     check_doc_test(
1141         "remove_mut",
1142         r#####"
1143 impl Walrus {
1144     fn feed(&mut$0 self, amount: u32) {}
1145 }
1146 "#####,
1147         r#####"
1148 impl Walrus {
1149     fn feed(&self, amount: u32) {}
1150 }
1151 "#####,
1152     )
1153 }
1154
1155 #[test]
1156 fn doctest_remove_unused_param() {
1157     check_doc_test(
1158         "remove_unused_param",
1159         r#####"
1160 fn frobnicate(x: i32$0) {}
1161
1162 fn main() {
1163     frobnicate(92);
1164 }
1165 "#####,
1166         r#####"
1167 fn frobnicate() {}
1168
1169 fn main() {
1170     frobnicate();
1171 }
1172 "#####,
1173     )
1174 }
1175
1176 #[test]
1177 fn doctest_reorder_fields() {
1178     check_doc_test(
1179         "reorder_fields",
1180         r#####"
1181 struct Foo {foo: i32, bar: i32};
1182 const test: Foo = $0Foo {bar: 0, foo: 1}
1183 "#####,
1184         r#####"
1185 struct Foo {foo: i32, bar: i32};
1186 const test: Foo = Foo {foo: 1, bar: 0}
1187 "#####,
1188     )
1189 }
1190
1191 #[test]
1192 fn doctest_reorder_impl() {
1193     check_doc_test(
1194         "reorder_impl",
1195         r#####"
1196 trait Foo {
1197     fn a() {}
1198     fn b() {}
1199     fn c() {}
1200 }
1201
1202 struct Bar;
1203 $0impl Foo for Bar {
1204     fn b() {}
1205     fn c() {}
1206     fn a() {}
1207 }
1208 "#####,
1209         r#####"
1210 trait Foo {
1211     fn a() {}
1212     fn b() {}
1213     fn c() {}
1214 }
1215
1216 struct Bar;
1217 impl Foo for Bar {
1218     fn a() {}
1219     fn b() {}
1220     fn c() {}
1221 }
1222 "#####,
1223     )
1224 }
1225
1226 #[test]
1227 fn doctest_replace_derive_with_manual_impl() {
1228     check_doc_test(
1229         "replace_derive_with_manual_impl",
1230         r#####"
1231 trait Debug { fn fmt(&self, f: &mut Formatter) -> Result<()>; }
1232 #[derive(Deb$0ug, Display)]
1233 struct S;
1234 "#####,
1235         r#####"
1236 trait Debug { fn fmt(&self, f: &mut Formatter) -> Result<()>; }
1237 #[derive(Display)]
1238 struct S;
1239
1240 impl Debug for S {
1241     fn fmt(&self, f: &mut Formatter) -> Result<()> {
1242         ${0:todo!()}
1243     }
1244 }
1245 "#####,
1246     )
1247 }
1248
1249 #[test]
1250 fn doctest_replace_for_loop_with_for_each() {
1251     check_doc_test(
1252         "replace_for_loop_with_for_each",
1253         r#####"
1254 fn main() {
1255     let x = vec![1, 2, 3];
1256     for$0 v in x {
1257         let y = v * 2;
1258     }
1259 }
1260 "#####,
1261         r#####"
1262 fn main() {
1263     let x = vec![1, 2, 3];
1264     x.into_iter().for_each(|v| {
1265         let y = v * 2;
1266     });
1267 }
1268 "#####,
1269     )
1270 }
1271
1272 #[test]
1273 fn doctest_replace_if_let_with_match() {
1274     check_doc_test(
1275         "replace_if_let_with_match",
1276         r#####"
1277 enum Action { Move { distance: u32 }, Stop }
1278
1279 fn handle(action: Action) {
1280     $0if let Action::Move { distance } = action {
1281         foo(distance)
1282     } else {
1283         bar()
1284     }
1285 }
1286 "#####,
1287         r#####"
1288 enum Action { Move { distance: u32 }, Stop }
1289
1290 fn handle(action: Action) {
1291     match action {
1292         Action::Move { distance } => foo(distance),
1293         _ => bar(),
1294     }
1295 }
1296 "#####,
1297     )
1298 }
1299
1300 #[test]
1301 fn doctest_replace_impl_trait_with_generic() {
1302     check_doc_test(
1303         "replace_impl_trait_with_generic",
1304         r#####"
1305 fn foo(bar: $0impl Bar) {}
1306 "#####,
1307         r#####"
1308 fn foo<B: Bar>(bar: B) {}
1309 "#####,
1310     )
1311 }
1312
1313 #[test]
1314 fn doctest_replace_let_with_if_let() {
1315     check_doc_test(
1316         "replace_let_with_if_let",
1317         r#####"
1318 enum Option<T> { Some(T), None }
1319
1320 fn main(action: Action) {
1321     $0let x = compute();
1322 }
1323
1324 fn compute() -> Option<i32> { None }
1325 "#####,
1326         r#####"
1327 enum Option<T> { Some(T), None }
1328
1329 fn main(action: Action) {
1330     if let Some(x) = compute() {
1331     }
1332 }
1333
1334 fn compute() -> Option<i32> { None }
1335 "#####,
1336     )
1337 }
1338
1339 #[test]
1340 fn doctest_replace_match_with_if_let() {
1341     check_doc_test(
1342         "replace_match_with_if_let",
1343         r#####"
1344 enum Action { Move { distance: u32 }, Stop }
1345
1346 fn handle(action: Action) {
1347     $0match action {
1348         Action::Move { distance } => foo(distance),
1349         _ => bar(),
1350     }
1351 }
1352 "#####,
1353         r#####"
1354 enum Action { Move { distance: u32 }, Stop }
1355
1356 fn handle(action: Action) {
1357     if let Action::Move { distance } = action {
1358         foo(distance)
1359     } else {
1360         bar()
1361     }
1362 }
1363 "#####,
1364     )
1365 }
1366
1367 #[test]
1368 fn doctest_replace_qualified_name_with_use() {
1369     check_doc_test(
1370         "replace_qualified_name_with_use",
1371         r#####"
1372 fn process(map: std::collections::$0HashMap<String, String>) {}
1373 "#####,
1374         r#####"
1375 use std::collections::HashMap;
1376
1377 fn process(map: HashMap<String, String>) {}
1378 "#####,
1379     )
1380 }
1381
1382 #[test]
1383 fn doctest_replace_string_with_char() {
1384     check_doc_test(
1385         "replace_string_with_char",
1386         r#####"
1387 fn main() {
1388     find("{$0");
1389 }
1390 "#####,
1391         r#####"
1392 fn main() {
1393     find('{');
1394 }
1395 "#####,
1396     )
1397 }
1398
1399 #[test]
1400 fn doctest_replace_unwrap_with_match() {
1401     check_doc_test(
1402         "replace_unwrap_with_match",
1403         r#####"
1404 enum Result<T, E> { Ok(T), Err(E) }
1405 fn main() {
1406     let x: Result<i32, i32> = Result::Ok(92);
1407     let y = x.$0unwrap();
1408 }
1409 "#####,
1410         r#####"
1411 enum Result<T, E> { Ok(T), Err(E) }
1412 fn main() {
1413     let x: Result<i32, i32> = Result::Ok(92);
1414     let y = match x {
1415         Ok(a) => a,
1416         $0_ => unreachable!(),
1417     };
1418 }
1419 "#####,
1420     )
1421 }
1422
1423 #[test]
1424 fn doctest_split_import() {
1425     check_doc_test(
1426         "split_import",
1427         r#####"
1428 use std::$0collections::HashMap;
1429 "#####,
1430         r#####"
1431 use std::{collections::HashMap};
1432 "#####,
1433     )
1434 }
1435
1436 #[test]
1437 fn doctest_toggle_ignore() {
1438     check_doc_test(
1439         "toggle_ignore",
1440         r#####"
1441 $0#[test]
1442 fn arithmetics {
1443     assert_eq!(2 + 2, 5);
1444 }
1445 "#####,
1446         r#####"
1447 #[test]
1448 #[ignore]
1449 fn arithmetics {
1450     assert_eq!(2 + 2, 5);
1451 }
1452 "#####,
1453     )
1454 }
1455
1456 #[test]
1457 fn doctest_unmerge_use() {
1458     check_doc_test(
1459         "unmerge_use",
1460         r#####"
1461 use std::fmt::{Debug, Display$0};
1462 "#####,
1463         r#####"
1464 use std::fmt::{Debug};
1465 use std::fmt::Display;
1466 "#####,
1467     )
1468 }
1469
1470 #[test]
1471 fn doctest_unwrap_block() {
1472     check_doc_test(
1473         "unwrap_block",
1474         r#####"
1475 fn foo() {
1476     if true {$0
1477         println!("foo");
1478     }
1479 }
1480 "#####,
1481         r#####"
1482 fn foo() {
1483     println!("foo");
1484 }
1485 "#####,
1486     )
1487 }
1488
1489 #[test]
1490 fn doctest_wrap_return_type_in_result() {
1491     check_doc_test(
1492         "wrap_return_type_in_result",
1493         r#####"
1494 fn foo() -> i32$0 { 42i32 }
1495 "#####,
1496         r#####"
1497 fn foo() -> Result<i32, ${0:_}> { Ok(42i32) }
1498 "#####,
1499     )
1500 }