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