@@ -55,44 +55,16 @@ fn fixes(
55
55
56
56
#[ cfg( test) ]
57
57
mod tests {
58
- use crate :: tests:: check_fix;
59
-
60
- // Register the required standard library types to make the tests work
61
- #[ track_caller]
62
- fn check_diagnostics ( ra_fixture : & str ) {
63
- let prefix = r#"
64
- //- /main.rs crate:main deps:core
65
- use core::iter::Iterator;
66
- use core::option::Option::{self, Some, None};
67
- "# ;
68
- let suffix = r#"
69
- //- /core/lib.rs crate:core
70
- pub mod option {
71
- pub enum Option<T> { Some(T), None }
72
- }
73
- pub mod iter {
74
- pub trait Iterator {
75
- type Item;
76
- fn filter_map<B, F>(self, f: F) -> FilterMap where F: FnMut(Self::Item) -> Option<B> { FilterMap }
77
- fn next(&mut self) -> Option<Self::Item>;
78
- }
79
- pub struct FilterMap {}
80
- impl Iterator for FilterMap {
81
- type Item = i32;
82
- fn next(&mut self) -> i32 { 7 }
83
- }
84
- }
85
- "# ;
86
- crate :: tests:: check_diagnostics ( & format ! ( "{}{}{}" , prefix, ra_fixture, suffix) )
87
- }
58
+ use crate :: tests:: { check_diagnostics, check_fix} ;
88
59
89
60
#[ test]
90
61
fn replace_filter_map_next_with_find_map2 ( ) {
91
62
check_diagnostics (
92
63
r#"
93
- fn foo() {
94
- let m = [1, 2, 3].iter().filter_map(|x| Some(92)).next();
95
- } //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 💡 weak: replace filter_map(..).next() with find_map(..)
64
+ //- minicore: iterators
65
+ fn foo() {
66
+ let m = core::iter::repeat(()).filter_map(|()| Some(92)).next();
67
+ } //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 💡 weak: replace filter_map(..).next() with find_map(..)
96
68
"# ,
97
69
) ;
98
70
}
@@ -101,11 +73,11 @@ pub mod iter {
101
73
fn replace_filter_map_next_with_find_map_no_diagnostic_without_next ( ) {
102
74
check_diagnostics (
103
75
r#"
76
+ //- minicore: iterators
104
77
fn foo() {
105
- let m = [1, 2, 3]
106
- .iter()
107
- .filter_map(|x| Some(92))
108
- .len();
78
+ let m = core::iter::repeat(())
79
+ .filter_map(|()| Some(92))
80
+ .count();
109
81
}
110
82
"# ,
111
83
) ;
@@ -115,12 +87,12 @@ fn foo() {
115
87
fn replace_filter_map_next_with_find_map_no_diagnostic_with_intervening_methods ( ) {
116
88
check_diagnostics (
117
89
r#"
90
+ //- minicore: iterators
118
91
fn foo() {
119
- let m = [1, 2, 3]
120
- .iter()
121
- .filter_map(|x| Some(92))
92
+ let m = core::iter::repeat(())
93
+ .filter_map(|()| Some(92))
122
94
.map(|x| x + 2)
123
- .len ();
95
+ .next ();
124
96
}
125
97
"# ,
126
98
) ;
@@ -130,10 +102,10 @@ fn foo() {
130
102
fn replace_filter_map_next_with_find_map_no_diagnostic_if_not_in_chain ( ) {
131
103
check_diagnostics (
132
104
r#"
105
+ //- minicore: iterators
133
106
fn foo() {
134
- let m = [1, 2, 3]
135
- .iter()
136
- .filter_map(|x| Some(92));
107
+ let m = core::iter::repeat(())
108
+ .filter_map(|()| Some(92));
137
109
let n = m.next();
138
110
}
139
111
"# ,
@@ -144,34 +116,14 @@ fn foo() {
144
116
fn replace_with_wind_map ( ) {
145
117
check_fix (
146
118
r#"
147
- //- /main.rs crate:main deps:core
148
- use core::iter::Iterator;
149
- use core::option::Option::{self, Some, None};
119
+ //- minicore: iterators
150
120
fn foo() {
151
- let m = [1, 2, 3].iter().$0filter_map(|x| Some(92)).next();
152
- }
153
- //- /core/lib.rs crate:core
154
- pub mod option {
155
- pub enum Option<T> { Some(T), None }
156
- }
157
- pub mod iter {
158
- pub trait Iterator {
159
- type Item;
160
- fn filter_map<B, F>(self, f: F) -> FilterMap where F: FnMut(Self::Item) -> Option<B> { FilterMap }
161
- fn next(&mut self) -> Option<Self::Item>;
162
- }
163
- pub struct FilterMap {}
164
- impl Iterator for FilterMap {
165
- type Item = i32;
166
- fn next(&mut self) -> i32 { 7 }
167
- }
121
+ let m = core::iter::repeat(()).$0filter_map(|()| Some(92)).next();
168
122
}
169
123
"# ,
170
124
r#"
171
- use core::iter::Iterator;
172
- use core::option::Option::{self, Some, None};
173
125
fn foo() {
174
- let m = [1, 2, 3]. iter() .find_map(|x | Some(92));
126
+ let m = core:: iter::repeat(()) .find_map(|() | Some(92));
175
127
}
176
128
"# ,
177
129
)
0 commit comments