about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLukas Wirth <lukastw97@gmail.com>2022-08-09 18:08:05 +0200
committerLukas Wirth <lukastw97@gmail.com>2022-08-09 18:08:05 +0200
commitb3ac58dfb80e6dad9fc777f23247fd379424b65e (patch)
treedbbe5108cff435d141cd3b7cca9eea69c4c07333
parent8c9359b072098403eb0b37a1b0822bb7b4f3b8ba (diff)
downloadrust-b3ac58dfb80e6dad9fc777f23247fd379424b65e.tar.gz
rust-b3ac58dfb80e6dad9fc777f23247fd379424b65e.zip
Add some more `cov_mark`s
-rw-r--r--crates/ide-completion/src/completions/expr.rs4
-rw-r--r--crates/ide-completion/src/completions/record.rs12
-rw-r--r--crates/ide-completion/src/tests/record.rs1
3 files changed, 12 insertions, 5 deletions
diff --git a/crates/ide-completion/src/completions/expr.rs b/crates/ide-completion/src/completions/expr.rs
index e6c4bdf5206..4d66af9e8d5 100644
--- a/crates/ide-completion/src/completions/expr.rs
+++ b/crates/ide-completion/src/completions/expr.rs
@@ -231,7 +231,9 @@ pub(crate) fn complete_expr_path(
                             cov_mark::hit!(functional_update);
                             let missing_fields =
                                 ctx.sema.record_literal_missing_fields(record_expr);
-                            add_default_update(acc, ctx, ty, &missing_fields);
+                            if !missing_fields.is_empty() {
+                                add_default_update(acc, ctx, ty);
+                            }
                         }
                     };
                 }
diff --git a/crates/ide-completion/src/completions/record.rs b/crates/ide-completion/src/completions/record.rs
index 3f85b45a13c..bfb98b9f277 100644
--- a/crates/ide-completion/src/completions/record.rs
+++ b/crates/ide-completion/src/completions/record.rs
@@ -59,7 +59,11 @@ pub(crate) fn complete_record_expr_fields(
         }
         _ => {
             let missing_fields = ctx.sema.record_literal_missing_fields(record_expr);
-            add_default_update(acc, ctx, ty, &missing_fields);
+
+            if !missing_fields.is_empty() {
+                cov_mark::hit!(functional_update_field);
+                add_default_update(acc, ctx, ty);
+            }
             if dot_prefix {
                 cov_mark::hit!(functional_update_one_dot);
                 let mut item =
@@ -78,14 +82,14 @@ pub(crate) fn add_default_update(
     acc: &mut Completions,
     ctx: &CompletionContext<'_>,
     ty: Option<hir::TypeInfo>,
-    missing_fields: &[(hir::Field, hir::Type)],
 ) {
     let default_trait = ctx.famous_defs().core_default_Default();
-    let impl_default_trait = default_trait
+    let impls_default_trait = default_trait
         .zip(ty.as_ref())
         .map_or(false, |(default_trait, ty)| ty.original.impls_trait(ctx.db, default_trait, &[]));
-    if impl_default_trait && !missing_fields.is_empty() {
+    if impls_default_trait {
         // FIXME: This should make use of scope_def like completions so we get all the other goodies
+        // that is we should handle this like actually completing the default function
         let completion_text = "..Default::default()";
         let mut item = CompletionItem::new(SymbolKind::Field, ctx.source_range(), completion_text);
         let completion_text =
diff --git a/crates/ide-completion/src/tests/record.rs b/crates/ide-completion/src/tests/record.rs
index e9ee5161179..328faaa060f 100644
--- a/crates/ide-completion/src/tests/record.rs
+++ b/crates/ide-completion/src/tests/record.rs
@@ -156,6 +156,7 @@ fn main() {
 
 #[test]
 fn functional_update_no_dot() {
+    cov_mark::check!(functional_update_field);
     // FIXME: This should filter out all completions that do not have the type `Foo`
     check(
         r#"