Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-assists/src/handlers/destructure_struct_binding.rs')
| -rw-r--r-- | crates/ide-assists/src/handlers/destructure_struct_binding.rs | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/crates/ide-assists/src/handlers/destructure_struct_binding.rs b/crates/ide-assists/src/handlers/destructure_struct_binding.rs index 4edc52b614..c1a3f93026 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) {} + "#, + ) + } } |