diff options
| author | Niklas Lindorfer <niklas@lindorfer.com> | 2024-03-04 18:14:25 +0000 |
|---|---|---|
| committer | Niklas Lindorfer <niklas@lindorfer.com> | 2024-03-04 21:50:01 +0000 |
| commit | 2a4ba4295b3bb53e672cb2dded2247a5553cf089 (patch) | |
| tree | f8b81903d10fb72b4144842d9501fa40d2db2fcc | |
| parent | 9f14343f9ee24f53f17492c5f9b653427e2ad15e (diff) | |
| download | rust-2a4ba4295b3bb53e672cb2dded2247a5553cf089.tar.gz rust-2a4ba4295b3bb53e672cb2dded2247a5553cf089.zip | |
fix: hide destructure_struct_binding assist if no public fields
| -rw-r--r-- | crates/ide-assists/src/handlers/destructure_struct_binding.rs | 27 | ||||
| -rw-r--r-- | crates/syntax/src/ast/make.rs | 5 |
2 files changed, 23 insertions, 9 deletions
diff --git a/crates/ide-assists/src/handlers/destructure_struct_binding.rs b/crates/ide-assists/src/handlers/destructure_struct_binding.rs index 4edc52b614a..c1a3f930265 100644 --- a/crates/ide-assists/src/handlers/destructure_struct_binding.rs +++ b/crates/ide-assists/src/handlers/destructure_struct_binding.rs @@ -107,6 +107,10 @@ fn collect_data(ident_pat: ast::IdentPat, ctx: &AssistContext<'_>) -> Option<Str let visible_fields = fields.into_iter().filter(|field| field.is_visible_from(ctx.db(), module)).collect_vec(); + if visible_fields.is_empty() { + return None; + } + let has_private_members = (is_non_exhaustive && is_foreign_crate) || visible_fields.len() < n_fields; @@ -413,7 +417,7 @@ mod tests { #[test] fn unit_struct() { - check_assist( + check_assist_not_applicable( destructure_struct_binding, r#" struct Foo; @@ -422,13 +426,6 @@ mod tests { let $0foo = Foo; } "#, - r#" - struct Foo; - - fn main() { - let Foo = Foo; - } - "#, ) } @@ -739,4 +736,18 @@ mod tests { "#, ) } + + #[test] + fn record_struct_no_public_members() { + check_assist_not_applicable( + destructure_struct_binding, + r#" + //- /lib.rs crate:dep + pub struct Foo { bar: i32, baz: i32 }; + + //- /main.rs crate:main deps:dep + fn main($0foo: dep::Foo) {} + "#, + ) + } } diff --git a/crates/syntax/src/ast/make.rs b/crates/syntax/src/ast/make.rs index f299dda4f0f..ff18fee9bab 100644 --- a/crates/syntax/src/ast/make.rs +++ b/crates/syntax/src/ast/make.rs @@ -724,7 +724,10 @@ pub fn record_pat_field_list( ) -> ast::RecordPatFieldList { let mut fields = fields.into_iter().join(", "); if let Some(rest_pat) = rest_pat { - format_to!(fields, ", {rest_pat}"); + if !fields.is_empty() { + fields.push_str(", "); + } + format_to!(fields, "{rest_pat}"); } ast_from_text(&format!("fn f(S {{ {fields} }}: ()))")) } |
