Merge pull request #20872 from A4-Tacks/conv-named-to-tuple-rest-pat

Fix missing RestPat for convert_named_struct_to_tuple_struct
This commit is contained in:
Shoyu Vanilla (Flint) 2025-10-21 04:54:46 +00:00 committed by GitHub
commit 34af63109f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -187,6 +187,7 @@ fn process_struct_name_reference(
return None;
}
// FIXME: Processing RecordPat and RecordExpr for unordered fields, and insert RestPat
let parent = full_path.syntax().parent()?;
match_ast! {
match parent {
@ -202,6 +203,9 @@ fn process_struct_name_reference(
.record_pat_field_list()?
.fields()
.filter_map(|pat| pat.pat())
.chain(record_struct_pat.record_pat_field_list()?
.rest_pat()
.map(Into::into))
)
.to_string()
);
@ -346,6 +350,37 @@ impl A {
);
}
#[test]
fn convert_struct_and_rest_pat() {
check_assist(
convert_named_struct_to_tuple_struct,
r#"
struct Inner;
struct A$0 { inner: Inner }
fn foo(A { .. }: A) {}
"#,
r#"
struct Inner;
struct A(Inner);
fn foo(A(..): A) {}
"#,
);
check_assist(
convert_named_struct_to_tuple_struct,
r#"
struct Inner;
struct A$0 { inner: Inner, extra: Inner }
fn foo(A { inner, .. }: A) {}
"#,
r#"
struct Inner;
struct A(Inner, Inner);
fn foo(A(inner, ..): A) {}
"#,
);
}
#[test]
fn convert_simple_struct_cursor_on_visibility_keyword() {
check_assist(