fix: private items are shown in completions for modules in fn body

This commit is contained in:
Khanh Duong Quoc 2024-10-19 20:22:36 +09:00
parent 0c374048b6
commit 8b4a94f261
No known key found for this signature in database
GPG Key ID: 68399C39885161F3
2 changed files with 20 additions and 4 deletions

View File

@ -139,13 +139,11 @@ fn is_visible_from_def_map_(
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() {

View File

@ -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
"#]],
);
}