diff options
Diffstat (limited to 'crates/ra_ide/src/references/classify.rs')
-rw-r--r-- | crates/ra_ide/src/references/classify.rs | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/crates/ra_ide/src/references/classify.rs b/crates/ra_ide/src/references/classify.rs index 0326fd379..d0f03d8a8 100644 --- a/crates/ra_ide/src/references/classify.rs +++ b/crates/ra_ide/src/references/classify.rs | |||
@@ -8,7 +8,7 @@ use test_utils::tested_by; | |||
8 | use super::{NameDefinition, NameKind}; | 8 | use super::{NameDefinition, NameKind}; |
9 | use ra_ide_db::RootDatabase; | 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 | pub(crate) fn classify_name_ref( | 13 | pub(crate) fn classify_name_ref( |
14 | sb: &mut SourceBinder<RootDatabase>, | 14 | sb: &mut SourceBinder<RootDatabase>, |
@@ -22,7 +22,7 @@ pub(crate) fn classify_name_ref( | |||
22 | if let Some(method_call) = ast::MethodCallExpr::cast(parent.clone()) { | 22 | if let Some(method_call) = ast::MethodCallExpr::cast(parent.clone()) { |
23 | tested_by!(goto_def_for_methods); | 23 | tested_by!(goto_def_for_methods); |
24 | if let Some(func) = analyzer.resolve_method_call(&method_call) { | 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 | let path = name_ref.value.syntax().ancestors().find_map(ast::Path::cast)?; | 58 | let path = name_ref.value.syntax().ancestors().find_map(ast::Path::cast)?; |
59 | let resolved = analyzer.resolve_path(sb.db, &path)?; | 59 | let resolved = analyzer.resolve_path(sb.db, &path)?; |
60 | match resolved { | 60 | let res = match resolved { |
61 | PathResolution::Def(def) => Some(from_module_def(sb.db, def, Some(container))), | 61 | PathResolution::Def(def) => from_module_def(sb.db, def, Some(container)), |
62 | PathResolution::AssocItem(item) => Some(from_assoc_item(sb.db, item)), | 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 | PathResolution::Local(local) => { | 70 | PathResolution::Local(local) => { |
64 | let kind = NameKind::Local(local); | 71 | let kind = NameKind::Local(local); |
65 | let container = local.module(sb.db); | 72 | let container = local.module(sb.db); |
66 | Some(NameDefinition { kind, container, visibility: None }) | 73 | NameDefinition { kind, container, visibility: None } |
67 | } | 74 | } |
68 | PathResolution::TypeParam(par) => { | 75 | PathResolution::TypeParam(par) => { |
69 | let kind = NameKind::TypeParam(par); | 76 | let kind = NameKind::TypeParam(par); |
70 | let container = par.module(sb.db); | 77 | let container = par.module(sb.db); |
71 | Some(NameDefinition { kind, container, visibility }) | 78 | NameDefinition { kind, container, visibility } |
72 | } | 79 | } |
73 | PathResolution::Macro(def) => { | 80 | PathResolution::Macro(def) => { |
74 | let kind = NameKind::Macro(def); | 81 | let kind = NameKind::Macro(def); |
75 | Some(NameDefinition { kind, container, visibility }) | 82 | NameDefinition { kind, container, visibility } |
76 | } | 83 | } |
77 | PathResolution::SelfType(impl_block) => { | 84 | PathResolution::SelfType(impl_block) => { |
78 | let kind = NameKind::SelfType(impl_block); | 85 | let kind = NameKind::SelfType(impl_block); |
79 | let container = impl_block.module(sb.db); | 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 | } |