diff options
author | Aleksey Kladov <[email protected]> | 2021-06-17 18:58:05 +0100 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2021-06-17 19:04:12 +0100 |
commit | ca99aaa053c7915633a1b2dadd40ad0deb3a3ac3 (patch) | |
tree | 0c7bf1f81bd6c6b9b57d0c34acc6dfd16af0b23a /crates/ide_assists/src/handlers/generate_from_impl_for_enum.rs | |
parent | 82c7afc70354c15454207ef8ffd2f7274330c3ed (diff) |
internal: add From to minicore
Diffstat (limited to 'crates/ide_assists/src/handlers/generate_from_impl_for_enum.rs')
-rw-r--r-- | crates/ide_assists/src/handlers/generate_from_impl_for_enum.rs | 105 |
1 files changed, 74 insertions, 31 deletions
diff --git a/crates/ide_assists/src/handlers/generate_from_impl_for_enum.rs b/crates/ide_assists/src/handlers/generate_from_impl_for_enum.rs index ce6998d82..8727be07d 100644 --- a/crates/ide_assists/src/handlers/generate_from_impl_for_enum.rs +++ b/crates/ide_assists/src/handlers/generate_from_impl_for_enum.rs | |||
@@ -110,14 +110,19 @@ mod tests { | |||
110 | fn test_generate_from_impl_for_enum() { | 110 | fn test_generate_from_impl_for_enum() { |
111 | check_assist( | 111 | check_assist( |
112 | generate_from_impl_for_enum, | 112 | generate_from_impl_for_enum, |
113 | "enum A { $0One(u32) }", | 113 | r#" |
114 | r#"enum A { One(u32) } | 114 | //- minicore: from |
115 | enum A { $0One(u32) } | ||
116 | "#, | ||
117 | r#" | ||
118 | enum A { One(u32) } | ||
115 | 119 | ||
116 | impl From<u32> for A { | 120 | impl From<u32> for A { |
117 | fn from(v: u32) -> Self { | 121 | fn from(v: u32) -> Self { |
118 | Self::One(v) | 122 | Self::One(v) |
119 | } | 123 | } |
120 | }"#, | 124 | } |
125 | "#, | ||
121 | ); | 126 | ); |
122 | } | 127 | } |
123 | 128 | ||
@@ -125,53 +130,71 @@ impl From<u32> for A { | |||
125 | fn test_generate_from_impl_for_enum_complicated_path() { | 130 | fn test_generate_from_impl_for_enum_complicated_path() { |
126 | check_assist( | 131 | check_assist( |
127 | generate_from_impl_for_enum, | 132 | generate_from_impl_for_enum, |
128 | r#"enum A { $0One(foo::bar::baz::Boo) }"#, | 133 | r#" |
129 | r#"enum A { One(foo::bar::baz::Boo) } | 134 | //- minicore: from |
135 | enum A { $0One(foo::bar::baz::Boo) } | ||
136 | "#, | ||
137 | r#" | ||
138 | enum A { One(foo::bar::baz::Boo) } | ||
130 | 139 | ||
131 | impl From<foo::bar::baz::Boo> for A { | 140 | impl From<foo::bar::baz::Boo> for A { |
132 | fn from(v: foo::bar::baz::Boo) -> Self { | 141 | fn from(v: foo::bar::baz::Boo) -> Self { |
133 | Self::One(v) | 142 | Self::One(v) |
134 | } | 143 | } |
135 | }"#, | 144 | } |
145 | "#, | ||
136 | ); | 146 | ); |
137 | } | 147 | } |
138 | 148 | ||
139 | fn check_not_applicable(ra_fixture: &str) { | ||
140 | let fixture = | ||
141 | format!("//- /main.rs crate:main deps:core\n{}\n{}", ra_fixture, FamousDefs::FIXTURE); | ||
142 | check_assist_not_applicable(generate_from_impl_for_enum, &fixture) | ||
143 | } | ||
144 | |||
145 | #[test] | 149 | #[test] |
146 | fn test_add_from_impl_no_element() { | 150 | fn test_add_from_impl_no_element() { |
147 | check_not_applicable("enum A { $0One }"); | 151 | check_assist_not_applicable( |
152 | generate_from_impl_for_enum, | ||
153 | r#" | ||
154 | //- minicore: from | ||
155 | enum A { $0One } | ||
156 | "#, | ||
157 | ); | ||
148 | } | 158 | } |
149 | 159 | ||
150 | #[test] | 160 | #[test] |
151 | fn test_add_from_impl_more_than_one_element_in_tuple() { | 161 | fn test_add_from_impl_more_than_one_element_in_tuple() { |
152 | check_not_applicable("enum A { $0One(u32, String) }"); | 162 | check_assist_not_applicable( |
163 | generate_from_impl_for_enum, | ||
164 | r#" | ||
165 | //- minicore: from | ||
166 | enum A { $0One(u32, String) } | ||
167 | "#, | ||
168 | ); | ||
153 | } | 169 | } |
154 | 170 | ||
155 | #[test] | 171 | #[test] |
156 | fn test_add_from_impl_struct_variant() { | 172 | fn test_add_from_impl_struct_variant() { |
157 | check_assist( | 173 | check_assist( |
158 | generate_from_impl_for_enum, | 174 | generate_from_impl_for_enum, |
159 | "enum A { $0One { x: u32 } }", | 175 | r#" |
160 | r#"enum A { One { x: u32 } } | 176 | //- minicore: from |
177 | enum A { $0One { x: u32 } } | ||
178 | "#, | ||
179 | r#" | ||
180 | enum A { One { x: u32 } } | ||
161 | 181 | ||
162 | impl From<u32> for A { | 182 | impl From<u32> for A { |
163 | fn from(x: u32) -> Self { | 183 | fn from(x: u32) -> Self { |
164 | Self::One { x } | 184 | Self::One { x } |
165 | } | 185 | } |
166 | }"#, | 186 | } |
187 | "#, | ||
167 | ); | 188 | ); |
168 | } | 189 | } |
169 | 190 | ||
170 | #[test] | 191 | #[test] |
171 | fn test_add_from_impl_already_exists() { | 192 | fn test_add_from_impl_already_exists() { |
172 | cov_mark::check!(test_add_from_impl_already_exists); | 193 | cov_mark::check!(test_add_from_impl_already_exists); |
173 | check_not_applicable( | 194 | check_assist_not_applicable( |
195 | generate_from_impl_for_enum, | ||
174 | r#" | 196 | r#" |
197 | //- minicore: from | ||
175 | enum A { $0One(u32), } | 198 | enum A { $0One(u32), } |
176 | 199 | ||
177 | impl From<u32> for A { | 200 | impl From<u32> for A { |
@@ -187,7 +210,9 @@ impl From<u32> for A { | |||
187 | fn test_add_from_impl_different_variant_impl_exists() { | 210 | fn test_add_from_impl_different_variant_impl_exists() { |
188 | check_assist( | 211 | check_assist( |
189 | generate_from_impl_for_enum, | 212 | generate_from_impl_for_enum, |
190 | r#"enum A { $0One(u32), Two(String), } | 213 | r#" |
214 | //- minicore: from | ||
215 | enum A { $0One(u32), Two(String), } | ||
191 | 216 | ||
192 | impl From<String> for A { | 217 | impl From<String> for A { |
193 | fn from(v: String) -> Self { | 218 | fn from(v: String) -> Self { |
@@ -197,8 +222,10 @@ impl From<String> for A { | |||
197 | 222 | ||
198 | pub trait From<T> { | 223 | pub trait From<T> { |
199 | fn from(T) -> Self; | 224 | fn from(T) -> Self; |
200 | }"#, | 225 | } |
201 | r#"enum A { One(u32), Two(String), } | 226 | "#, |
227 | r#" | ||
228 | enum A { One(u32), Two(String), } | ||
202 | 229 | ||
203 | impl From<u32> for A { | 230 | impl From<u32> for A { |
204 | fn from(v: u32) -> Self { | 231 | fn from(v: u32) -> Self { |
@@ -214,7 +241,8 @@ impl From<String> for A { | |||
214 | 241 | ||
215 | pub trait From<T> { | 242 | pub trait From<T> { |
216 | fn from(T) -> Self; | 243 | fn from(T) -> Self; |
217 | }"#, | 244 | } |
245 | "#, | ||
218 | ); | 246 | ); |
219 | } | 247 | } |
220 | 248 | ||
@@ -222,14 +250,19 @@ pub trait From<T> { | |||
222 | fn test_add_from_impl_static_str() { | 250 | fn test_add_from_impl_static_str() { |
223 | check_assist( | 251 | check_assist( |
224 | generate_from_impl_for_enum, | 252 | generate_from_impl_for_enum, |
225 | "enum A { $0One(&'static str) }", | 253 | r#" |
226 | r#"enum A { One(&'static str) } | 254 | //- minicore: from |
255 | enum A { $0One(&'static str) } | ||
256 | "#, | ||
257 | r#" | ||
258 | enum A { One(&'static str) } | ||
227 | 259 | ||
228 | impl From<&'static str> for A { | 260 | impl From<&'static str> for A { |
229 | fn from(v: &'static str) -> Self { | 261 | fn from(v: &'static str) -> Self { |
230 | Self::One(v) | 262 | Self::One(v) |
231 | } | 263 | } |
232 | }"#, | 264 | } |
265 | "#, | ||
233 | ); | 266 | ); |
234 | } | 267 | } |
235 | 268 | ||
@@ -237,14 +270,19 @@ impl From<&'static str> for A { | |||
237 | fn test_add_from_impl_generic_enum() { | 270 | fn test_add_from_impl_generic_enum() { |
238 | check_assist( | 271 | check_assist( |
239 | generate_from_impl_for_enum, | 272 | generate_from_impl_for_enum, |
240 | "enum Generic<T, U: Clone> { $0One(T), Two(U) }", | 273 | r#" |
241 | r#"enum Generic<T, U: Clone> { One(T), Two(U) } | 274 | //- minicore: from |
275 | enum Generic<T, U: Clone> { $0One(T), Two(U) } | ||
276 | "#, | ||
277 | r#" | ||
278 | enum Generic<T, U: Clone> { One(T), Two(U) } | ||
242 | 279 | ||
243 | impl<T, U: Clone> From<T> for Generic<T, U> { | 280 | impl<T, U: Clone> From<T> for Generic<T, U> { |
244 | fn from(v: T) -> Self { | 281 | fn from(v: T) -> Self { |
245 | Self::One(v) | 282 | Self::One(v) |
246 | } | 283 | } |
247 | }"#, | 284 | } |
285 | "#, | ||
248 | ); | 286 | ); |
249 | } | 287 | } |
250 | 288 | ||
@@ -252,14 +290,19 @@ impl<T, U: Clone> From<T> for Generic<T, U> { | |||
252 | fn test_add_from_impl_with_lifetime() { | 290 | fn test_add_from_impl_with_lifetime() { |
253 | check_assist( | 291 | check_assist( |
254 | generate_from_impl_for_enum, | 292 | generate_from_impl_for_enum, |
255 | "enum Generic<'a> { $0One(&'a i32) }", | 293 | r#" |
256 | r#"enum Generic<'a> { One(&'a i32) } | 294 | //- minicore: from |
295 | enum Generic<'a> { $0One(&'a i32) } | ||
296 | "#, | ||
297 | r#" | ||
298 | enum Generic<'a> { One(&'a i32) } | ||
257 | 299 | ||
258 | impl<'a> From<&'a i32> for Generic<'a> { | 300 | impl<'a> From<&'a i32> for Generic<'a> { |
259 | fn from(v: &'a i32) -> Self { | 301 | fn from(v: &'a i32) -> Self { |
260 | Self::One(v) | 302 | Self::One(v) |
261 | } | 303 | } |
262 | }"#, | 304 | } |
305 | "#, | ||
263 | ); | 306 | ); |
264 | } | 307 | } |
265 | } | 308 | } |