diff options
| author | Young-Flash <871946895@qq.com> | 2023-12-27 19:49:50 +0800 |
|---|---|---|
| committer | Young-Flash <871946895@qq.com> | 2023-12-27 19:49:50 +0800 |
| commit | a38a79e2ba12c80459b81d21be8a59aeb9434f5d (patch) | |
| tree | 965b326baabebd1c1d448464cedc9becef435924 | |
| parent | 67f001e5ec9a48804efc1528e8b303c440846093 (diff) | |
| download | rust-a38a79e2ba12c80459b81d21be8a59aeb9434f5d.tar.gz rust-a38a79e2ba12c80459b81d21be8a59aeb9434f5d.zip | |
use SyntaxKind instead of "Self" literal comparison
| -rw-r--r-- | crates/ide-assists/src/handlers/extract_struct_from_enum_variant.rs | 33 |
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 2e0a628eee7..3aa3069a23d 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(); |
