Unnamed repository; edit this file 'description' to name the repository.
Merge pull request #21354 from A4-Tacks/dedup-record-update
Fix duplicate record functional update
Lukas Wirth 4 months ago
parent b3178d9 · parent 57384b1 · commit 38271f5
-rw-r--r--crates/ide-completion/src/completions/record.rs5
-rw-r--r--crates/ide-completion/src/tests/record.rs23
2 files changed, 27 insertions, 1 deletions
diff --git a/crates/ide-completion/src/completions/record.rs b/crates/ide-completion/src/completions/record.rs
index bfa567009c..c5bfdcb8b7 100644
--- a/crates/ide-completion/src/completions/record.rs
+++ b/crates/ide-completion/src/completions/record.rs
@@ -70,8 +70,11 @@ pub(crate) fn complete_record_expr_fields(
}
_ => {
let missing_fields = ctx.sema.record_literal_missing_fields(record_expr);
+ let update_exists = record_expr
+ .record_expr_field_list()
+ .is_some_and(|list| list.dotdot_token().is_some());
- if !missing_fields.is_empty() {
+ if !missing_fields.is_empty() && !update_exists {
cov_mark::hit!(functional_update_field);
add_default_update(acc, ctx, ty);
}
diff --git a/crates/ide-completion/src/tests/record.rs b/crates/ide-completion/src/tests/record.rs
index a1013b8654..d9be6556fa 100644
--- a/crates/ide-completion/src/tests/record.rs
+++ b/crates/ide-completion/src/tests/record.rs
@@ -264,6 +264,29 @@ fn main() {
}
#[test]
+fn functional_update_exist_update() {
+ check(
+ r#"
+//- minicore:default
+struct Foo { foo1: u32, foo2: u32 }
+impl Default for Foo {
+ fn default() -> Self { loop {} }
+}
+
+fn main() {
+ let thing = 1;
+ let foo = Foo { foo1: 0, foo2: 0 };
+ let foo2 = Foo { thing, $0 ..Default::default() }
+}
+"#,
+ expect![[r#"
+ fd foo1 u32
+ fd foo2 u32
+ "#]],
+ );
+}
+
+#[test]
fn empty_union_literal() {
check(
r#"