Merge pull request #20730 from A4-Tacks/migrate-expand-rest-pat
Migrate `expand_record_rest_pattern` assist to use `SyntaxEditor`
diff --git a/crates/ide-assists/src/handlers/expand_rest_pattern.rs b/crates/ide-assists/src/handlers/expand_rest_pattern.rs
index 1c0d330..932166a 100644
--- a/crates/ide-assists/src/handlers/expand_rest_pattern.rs
+++ b/crates/ide-assists/src/handlers/expand_rest_pattern.rs
@@ -24,7 +24,7 @@
// struct Bar { y: Y, z: Z }
//
// fn foo(bar: Bar) {
-// let Bar { y, z } = bar;
+// let Bar { y, z } = bar;
// }
// ```
fn expand_record_rest_pattern(
@@ -53,18 +53,17 @@
|builder| {
let make = SyntaxFactory::with_mappings();
let mut editor = builder.make_editor(rest_pat.syntax());
- let new_field_list = make.record_pat_field_list(old_field_list.fields(), None);
- for (f, _) in missing_fields.iter() {
- let field = make.record_pat_field_shorthand(
+ let new_fields = old_field_list.fields().chain(missing_fields.iter().map(|(f, _)| {
+ make.record_pat_field_shorthand(
make.ident_pat(
false,
false,
make.name(&f.name(ctx.sema.db).display_no_db(edition).to_smolstr()),
)
.into(),
- );
- new_field_list.add_field(field);
- }
+ )
+ }));
+ let new_field_list = make.record_pat_field_list(new_fields, None);
editor.replace(old_field_list.syntax(), new_field_list.syntax());
@@ -214,7 +213,7 @@
fn bar(foo: Foo) {
match foo {
Foo::A(_) => false,
- Foo::B{ y, z } => true,
+ Foo::B{ y, z } => true,
};
}
"#,
@@ -275,7 +274,7 @@
}
fn foo(bar: Bar) {
- let Bar { y, z } = bar;
+ let Bar { y, z } = bar;
}
"#,
);
@@ -379,7 +378,7 @@
position!(usize);
fn macro_call(pos: Pos) {
- let Pos { x, y } = pos;
+ let Pos { x, y } = pos;
}
"#,
);
@@ -423,7 +422,7 @@
fn macro_call(foo: Foo) {
match foo {
Foo::A(_) => false,
- Foo::B{ x, y } => true,
+ Foo::B{ x, y } => true,
}
}
"#,
diff --git a/crates/ide-assists/src/tests/generated.rs b/crates/ide-assists/src/tests/generated.rs
index 91348be..71ffaa2 100644
--- a/crates/ide-assists/src/tests/generated.rs
+++ b/crates/ide-assists/src/tests/generated.rs
@@ -1035,7 +1035,7 @@
struct Bar { y: Y, z: Z }
fn foo(bar: Bar) {
- let Bar { y, z } = bar;
+ let Bar { y, z } = bar;
}
"#####,
)