diff options
Diffstat (limited to 'crates/assists/src/handlers/generate_enum_match_method.rs')
-rw-r--r-- | crates/assists/src/handlers/generate_enum_match_method.rs | 41 |
1 files changed, 39 insertions, 2 deletions
diff --git a/crates/assists/src/handlers/generate_enum_match_method.rs b/crates/assists/src/handlers/generate_enum_match_method.rs index c3ff38b66..aeb887e71 100644 --- a/crates/assists/src/handlers/generate_enum_match_method.rs +++ b/crates/assists/src/handlers/generate_enum_match_method.rs | |||
@@ -4,7 +4,7 @@ use syntax::ast::{self, AstNode, NameOwner}; | |||
4 | use test_utils::mark; | 4 | use test_utils::mark; |
5 | 5 | ||
6 | use crate::{ | 6 | use crate::{ |
7 | utils::{find_impl_block, find_struct_impl, generate_impl_text}, | 7 | utils::{find_impl_block_end, find_struct_impl, generate_impl_text}, |
8 | AssistContext, AssistId, AssistKind, Assists, | 8 | AssistContext, AssistId, AssistKind, Assists, |
9 | }; | 9 | }; |
10 | 10 | ||
@@ -80,7 +80,7 @@ pub(crate) fn generate_enum_match_method(acc: &mut Assists, ctx: &AssistContext) | |||
80 | ); | 80 | ); |
81 | 81 | ||
82 | let start_offset = impl_def | 82 | let start_offset = impl_def |
83 | .and_then(|impl_def| find_impl_block(impl_def, &mut buf)) | 83 | .and_then(|impl_def| find_impl_block_end(impl_def, &mut buf)) |
84 | .unwrap_or_else(|| { | 84 | .unwrap_or_else(|| { |
85 | buf = generate_impl_text(&ast::Adt::Enum(parent_enum.clone()), &buf); | 85 | buf = generate_impl_text(&ast::Adt::Enum(parent_enum.clone()), &buf); |
86 | parent_enum.syntax().text_range().end() | 86 | parent_enum.syntax().text_range().end() |
@@ -200,4 +200,41 @@ impl Variant { | |||
200 | }"#, | 200 | }"#, |
201 | ); | 201 | ); |
202 | } | 202 | } |
203 | |||
204 | #[test] | ||
205 | fn test_multiple_generate_enum_match_from_variant() { | ||
206 | check_assist( | ||
207 | generate_enum_match_method, | ||
208 | r#" | ||
209 | enum Variant { | ||
210 | Undefined, | ||
211 | Minor, | ||
212 | Major$0, | ||
213 | } | ||
214 | |||
215 | impl Variant { | ||
216 | /// Returns `true` if the variant is [`Minor`]. | ||
217 | fn is_minor(&self) -> bool { | ||
218 | matches!(self, Self::Minor) | ||
219 | } | ||
220 | }"#, | ||
221 | r#"enum Variant { | ||
222 | Undefined, | ||
223 | Minor, | ||
224 | Major, | ||
225 | } | ||
226 | |||
227 | impl Variant { | ||
228 | /// Returns `true` if the variant is [`Minor`]. | ||
229 | fn is_minor(&self) -> bool { | ||
230 | matches!(self, Self::Minor) | ||
231 | } | ||
232 | |||
233 | /// Returns `true` if the variant is [`Major`]. | ||
234 | fn is_major(&self) -> bool { | ||
235 | matches!(self, Self::Major) | ||
236 | } | ||
237 | }"#, | ||
238 | ); | ||
239 | } | ||
203 | } | 240 | } |