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.rs27
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) {}
+ "#,
+ )
+ }
}