@@ -8,7 +8,7 @@ use test_utils::tested_by;
8
8
use super :: { NameDefinition , NameKind } ;
9
9
use ra_ide_db:: RootDatabase ;
10
10
11
- pub use ra_ide_db:: defs:: { classify_name, from_assoc_item , from_module_def, from_struct_field} ;
11
+ pub use ra_ide_db:: defs:: { classify_name, from_module_def, from_struct_field} ;
12
12
13
13
pub ( crate ) fn classify_name_ref (
14
14
sb : & mut SourceBinder < RootDatabase > ,
@@ -22,7 +22,7 @@ pub(crate) fn classify_name_ref(
22
22
if let Some ( method_call) = ast:: MethodCallExpr :: cast ( parent. clone ( ) ) {
23
23
tested_by ! ( goto_def_for_methods) ;
24
24
if let Some ( func) = analyzer. resolve_method_call ( & method_call) {
25
- return Some ( from_assoc_item ( sb. db , func. into ( ) ) ) ;
25
+ return Some ( from_module_def ( sb. db , func. into ( ) , None ) ) ;
26
26
}
27
27
}
28
28
@@ -57,27 +57,35 @@ pub(crate) fn classify_name_ref(
57
57
58
58
let path = name_ref. value . syntax ( ) . ancestors ( ) . find_map ( ast:: Path :: cast) ?;
59
59
let resolved = analyzer. resolve_path ( sb. db , & path) ?;
60
- match resolved {
61
- PathResolution :: Def ( def) => Some ( from_module_def ( sb. db , def, Some ( container) ) ) ,
62
- PathResolution :: AssocItem ( item) => Some ( from_assoc_item ( sb. db , item) ) ,
60
+ let res = match resolved {
61
+ PathResolution :: Def ( def) => from_module_def ( sb. db , def, Some ( container) ) ,
62
+ PathResolution :: AssocItem ( item) => {
63
+ let def = match item {
64
+ hir:: AssocItem :: Function ( it) => it. into ( ) ,
65
+ hir:: AssocItem :: Const ( it) => it. into ( ) ,
66
+ hir:: AssocItem :: TypeAlias ( it) => it. into ( ) ,
67
+ } ;
68
+ from_module_def ( sb. db , def, Some ( container) )
69
+ }
63
70
PathResolution :: Local ( local) => {
64
71
let kind = NameKind :: Local ( local) ;
65
72
let container = local. module ( sb. db ) ;
66
- Some ( NameDefinition { kind, container, visibility : None } )
73
+ NameDefinition { kind, container, visibility : None }
67
74
}
68
75
PathResolution :: TypeParam ( par) => {
69
76
let kind = NameKind :: TypeParam ( par) ;
70
77
let container = par. module ( sb. db ) ;
71
- Some ( NameDefinition { kind, container, visibility } )
78
+ NameDefinition { kind, container, visibility }
72
79
}
73
80
PathResolution :: Macro ( def) => {
74
81
let kind = NameKind :: Macro ( def) ;
75
- Some ( NameDefinition { kind, container, visibility } )
82
+ NameDefinition { kind, container, visibility }
76
83
}
77
84
PathResolution :: SelfType ( impl_block) => {
78
85
let kind = NameKind :: SelfType ( impl_block) ;
79
86
let container = impl_block. module ( sb. db ) ;
80
- Some ( NameDefinition { kind, container, visibility } )
87
+ NameDefinition { kind, container, visibility }
81
88
}
82
- }
89
+ } ;
90
+ Some ( res)
83
91
}
0 commit comments