Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/ide-assists/src/handlers/extract_struct_from_enum_variant.rs33
1 files changed, 15 insertions, 18 deletions
diff --git a/crates/ide-assists/src/handlers/extract_struct_from_enum_variant.rs b/crates/ide-assists/src/handlers/extract_struct_from_enum_variant.rs
index 2e0a628eee..3aa3069a23 100644
--- a/crates/ide-assists/src/handlers/extract_struct_from_enum_variant.rs
+++ b/crates/ide-assists/src/handlers/extract_struct_from_enum_variant.rs
@@ -250,24 +250,21 @@ fn create_struct_def(
field_list
.fields()
.filter_map(|field| match field.ty()? {
- ast::Type::PathType(p) => {
- let generic_arg_list = p.path()?.segment()?.generic_arg_list()?;
- Some(
- generic_arg_list
- .generic_args()
- .filter_map(|generic_arg| {
- if generic_arg.to_string() == "Self" {
- let type_arg =
- make::type_arg(make::ty(&enum_.name()?.to_string()))
- .clone_for_update();
- Some(ted::replace(generic_arg.syntax(), type_arg.syntax()))
- } else {
- None
- }
- })
- .count(),
- )
- }
+ ast::Type::PathType(p) => Some(
+ p.syntax()
+ .descendants_with_tokens()
+ .filter_map(|it| {
+ if it.kind() == T![Self] {
+ let type_arg =
+ make::type_arg(make::ty(&enum_.name()?.to_string()))
+ .clone_for_update();
+ Some(ted::replace(it, type_arg.syntax()))
+ } else {
+ None
+ }
+ })
+ .count(),
+ ),
_ => None,
})
.count();