diff options
| author | dfireBird <me@dfirebird.dev> | 2024-02-26 21:21:56 +0530 |
|---|---|---|
| committer | dfireBird <me@dfirebird.dev> | 2024-02-26 21:21:56 +0530 |
| commit | 2ea70662f04b145c54a484f84a9c32d4209c8fc7 (patch) | |
| tree | 71e880117533a43b18881fa7f682f5e87796800a | |
| parent | 6f4354f6adc37ed889491cbfe6ed3e730e55fa91 (diff) | |
| download | rust-2ea70662f04b145c54a484f84a9c32d4209c8fc7.tar.gz rust-2ea70662f04b145c54a484f84a9c32d4209c8fc7.zip | |
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 e7b27c98eb2..e639de4b670 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; +} +"#, + ); + } } |
