Skip to content

Commit e75afeb

Browse files
committed
Resolve invisible defs in fix_visibility assist
1 parent dea49d0 commit e75afeb

File tree

2 files changed

+14
-10
lines changed

2 files changed

+14
-10
lines changed

crates/ide-assists/src/handlers/fix_visibility.rs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use hir::{db::HirDatabase, HasSource, HasVisibility, PathResolution};
1+
use hir::{db::HirDatabase, HasSource, HasVisibility, ModuleDef, PathResolution, ScopeDef};
22
use ide_db::base_db::FileId;
33
use syntax::{
44
ast::{self, HasVisibility as _},
@@ -18,7 +18,7 @@ use crate::{utils::vis_offset, AssistContext, AssistId, AssistKind, Assists};
1818
// fn frobnicate() {}
1919
// }
2020
// fn main() {
21-
// m::frobnicate$0() {}
21+
// m::frobnicate$0();
2222
// }
2323
// ```
2424
// ->
@@ -27,7 +27,7 @@ use crate::{utils::vis_offset, AssistContext, AssistId, AssistKind, Assists};
2727
// $0pub(crate) fn frobnicate() {}
2828
// }
2929
// fn main() {
30-
// m::frobnicate() {}
30+
// m::frobnicate();
3131
// }
3232
// ```
3333
pub(crate) fn fix_visibility(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option<()> {
@@ -37,11 +37,15 @@ pub(crate) fn fix_visibility(acc: &mut Assists, ctx: &AssistContext<'_>) -> Opti
3737

3838
fn add_vis_to_referenced_module_def(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option<()> {
3939
let path: ast::Path = ctx.find_node_at_offset()?;
40-
let path_res = ctx.sema.resolve_path(&path)?;
41-
let def = match path_res {
42-
PathResolution::Def(def) => def,
43-
_ => return None,
44-
};
40+
let qualifier = path.qualifier()?;
41+
let name_ref = path.segment()?.name_ref()?;
42+
let qualifier_res = ctx.sema.resolve_path(&qualifier)?;
43+
let PathResolution::Def(ModuleDef::Module(module)) = qualifier_res else { return None; };
44+
let (_, def) = module
45+
.scope(ctx.db(), None)
46+
.into_iter()
47+
.find(|(name, _)| name.to_smol_str() == name_ref.text().as_str())?;
48+
let ScopeDef::ModuleDef(def) = def else { return None; };
4549

4650
let current_module = ctx.sema.scope(path.syntax())?.module();
4751
let target_module = def.module(ctx.db())?;

crates/ide-assists/src/tests/generated.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -741,15 +741,15 @@ mod m {
741741
fn frobnicate() {}
742742
}
743743
fn main() {
744-
m::frobnicate$0() {}
744+
m::frobnicate$0();
745745
}
746746
"#####,
747747
r#####"
748748
mod m {
749749
$0pub(crate) fn frobnicate() {}
750750
}
751751
fn main() {
752-
m::frobnicate() {}
752+
m::frobnicate();
753753
}
754754
"#####,
755755
)

0 commit comments

Comments
 (0)