1
- use hir:: { db:: HirDatabase , HasSource , HasVisibility , PathResolution } ;
1
+ use hir:: { db:: HirDatabase , HasSource , HasVisibility , ModuleDef , PathResolution , ScopeDef } ;
2
2
use ide_db:: base_db:: FileId ;
3
3
use syntax:: {
4
4
ast:: { self , HasVisibility as _} ,
@@ -18,7 +18,7 @@ use crate::{utils::vis_offset, AssistContext, AssistId, AssistKind, Assists};
18
18
// fn frobnicate() {}
19
19
// }
20
20
// fn main() {
21
- // m::frobnicate$0() {}
21
+ // m::frobnicate$0();
22
22
// }
23
23
// ```
24
24
// ->
@@ -27,7 +27,7 @@ use crate::{utils::vis_offset, AssistContext, AssistId, AssistKind, Assists};
27
27
// $0pub(crate) fn frobnicate() {}
28
28
// }
29
29
// fn main() {
30
- // m::frobnicate() {}
30
+ // m::frobnicate();
31
31
// }
32
32
// ```
33
33
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
37
37
38
38
fn add_vis_to_referenced_module_def ( acc : & mut Assists , ctx : & AssistContext < ' _ > ) -> Option < ( ) > {
39
39
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 ; } ;
45
49
46
50
let current_module = ctx. sema . scope ( path. syntax ( ) ) ?. module ( ) ;
47
51
let target_module = def. module ( ctx. db ( ) ) ?;
0 commit comments