Unnamed repository; edit this file 'description' to name the repository.
fix: private items are shown in completions for modules in fn body
Khanh Duong Quoc 2024-10-21
parent 687b72c · commit 5fdcbdd
-rw-r--r--crates/hir-def/src/visibility.rs6
-rw-r--r--crates/ide-completion/src/tests/pattern.rs18
2 files changed, 20 insertions, 4 deletions
diff --git a/crates/hir-def/src/visibility.rs b/crates/hir-def/src/visibility.rs
index 11d91513f1..3aeb88047a 100644
--- a/crates/hir-def/src/visibility.rs
+++ b/crates/hir-def/src/visibility.rs
@@ -139,13 +139,11 @@ impl Visibility {
let def_map_block = def_map.block_id();
loop {
match (to_module.block, def_map_block) {
- // to_module is not a block, so there is no parent def map to use
+ // `to_module` is not a block, so there is no parent def map to use.
(None, _) => (),
+ // `to_module` is at `def_map`'s block, no need to move further.
(Some(a), Some(b)) if a == b => {
cov_mark::hit!(is_visible_from_same_block_def_map);
- if let Some(parent) = def_map.parent() {
- to_module = parent;
- }
}
_ => {
if let Some(parent) = to_module.def_map(db).parent() {
diff --git a/crates/ide-completion/src/tests/pattern.rs b/crates/ide-completion/src/tests/pattern.rs
index bd3e7c72bc..a5eb0369b1 100644
--- a/crates/ide-completion/src/tests/pattern.rs
+++ b/crates/ide-completion/src/tests/pattern.rs
@@ -923,3 +923,21 @@ fn foo() {
"#]],
);
}
+
+#[test]
+fn private_item_in_module_in_function_body() {
+ check_empty(
+ r#"
+fn main() {
+ mod foo {
+ struct Private;
+ pub struct Public;
+ }
+ foo::$0
+}
+"#,
+ expect![[r#"
+ st Public Public
+ "#]],
+ );
+}