Unnamed repository; edit this file 'description' to name the repository.
make assist not applicable if there is no missing field
| -rw-r--r-- | crates/ide-assists/src/handlers/fill_record_pattern_fields.rs | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/crates/ide-assists/src/handlers/fill_record_pattern_fields.rs b/crates/ide-assists/src/handlers/fill_record_pattern_fields.rs index e7b27c98eb..e639de4b67 100644 --- a/crates/ide-assists/src/handlers/fill_record_pattern_fields.rs +++ b/crates/ide-assists/src/handlers/fill_record_pattern_fields.rs @@ -36,6 +36,11 @@ pub(crate) fn fill_record_pattern_fields(acc: &mut Assists, ctx: &AssistContext< let missing_fields = ctx.sema.record_pattern_missing_fields(&record_pat); + if missing_fields.is_empty() { + cov_mark::hit!(no_missing_fields); + return None; + } + let old_field_list = record_pat.record_pat_field_list()?; let new_field_list = make::record_pat_field_list(old_field_list.fields()).clone_for_update(); for (f, _) in missing_fields.iter() { @@ -233,4 +238,39 @@ fn bar(foo: Foo) { "#, ); } + + #[test] + fn not_applicable_when_no_missing_fields() { + // This is still possible even though it's meaningless + cov_mark::check!(no_missing_fields); + check_assist_not_applicable( + fill_record_pattern_fields, + r#" +enum Foo { + A(X), + B{y: Y, z: Z} +} + +fn bar(foo: Foo) { + match foo { + Foo::A(_) => false, + Foo::B{y, z, ..$0} => true, + }; +} +"#, + ); + check_assist_not_applicable( + fill_record_pattern_fields, + r#" +struct Bar { + y: Y, + z: Z, +} + +fn foo(bar: Bar) { + let Bar { y, z, ..$0 } = bar; +} +"#, + ); + } } |