Skip to content

Commit 8a0a3b2

Browse files
committed
fix: extract_struct_from_enum_variant should resolve Self generic arg
1 parent 85fb463 commit 8a0a3b2

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

crates/ide-assists/src/handlers/extract_struct_from_enum_variant.rs

+26
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,32 @@ fn create_struct_def(
246246
Either::Left(field_list) => {
247247
let field_list = field_list.clone_for_update();
248248

249+
// replace `Self` with the enum name when construct struct def
250+
field_list
251+
.fields()
252+
.filter_map(|field| match field.ty()? {
253+
ast::Type::PathType(p) => {
254+
let generic_arg_list = p.path()?.segment()?.generic_arg_list()?;
255+
Some(
256+
generic_arg_list
257+
.generic_args()
258+
.filter_map(|generic_arg| {
259+
if generic_arg.to_string() == "Self" {
260+
let type_arg =
261+
make::type_arg(make::ty(&enum_.name()?.to_string()))
262+
.clone_for_update();
263+
Some(ted::replace(generic_arg.syntax(), type_arg.syntax()))
264+
} else {
265+
None
266+
}
267+
})
268+
.count(),
269+
)
270+
}
271+
_ => None,
272+
})
273+
.count();
274+
249275
if let Some(vis) = &enum_vis {
250276
field_list
251277
.fields()

0 commit comments

Comments
 (0)