aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide_api/src/references/classify.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_ide_api/src/references/classify.rs')
-rw-r--r--crates/ra_ide_api/src/references/classify.rs34
1 files changed, 16 insertions, 18 deletions
diff --git a/crates/ra_ide_api/src/references/classify.rs b/crates/ra_ide_api/src/references/classify.rs
index 5cb194c0e..93e079ccc 100644
--- a/crates/ra_ide_api/src/references/classify.rs
+++ b/crates/ra_ide_api/src/references/classify.rs
@@ -1,3 +1,5 @@
1//! FIXME: write short doc here
2
1use hir::{Either, FromSource, Module, ModuleSource, Path, PathResolution, Source, SourceAnalyzer}; 3use hir::{Either, FromSource, Module, ModuleSource, Path, PathResolution, Source, SourceAnalyzer};
2use ra_db::FileId; 4use ra_db::FileId;
3use ra_syntax::{ast, match_ast, AstNode, AstPtr}; 5use ra_syntax::{ast, match_ast, AstNode, AstPtr};
@@ -102,8 +104,9 @@ pub(crate) fn classify_name_ref(
102 let analyzer = SourceAnalyzer::new(db, file_id, name_ref.syntax(), None); 104 let analyzer = SourceAnalyzer::new(db, file_id, name_ref.syntax(), None);
103 105
104 if let Some(method_call) = ast::MethodCallExpr::cast(parent.clone()) { 106 if let Some(method_call) = ast::MethodCallExpr::cast(parent.clone()) {
105 let func = analyzer.resolve_method_call(&method_call)?; 107 if let Some(func) = analyzer.resolve_method_call(&method_call) {
106 return Some(from_assoc_item(db, func.into())); 108 return Some(from_assoc_item(db, func.into()));
109 }
107 } 110 }
108 111
109 if let Some(field_expr) = ast::FieldExpr::cast(parent.clone()) { 112 if let Some(field_expr) = ast::FieldExpr::cast(parent.clone()) {
@@ -128,15 +131,10 @@ pub(crate) fn classify_name_ref(
128 let container = Module::from_definition(db, Source { file_id, ast })?; 131 let container = Module::from_definition(db, Source { file_id, ast })?;
129 let visibility = None; 132 let visibility = None;
130 133
131 if let Some(macro_call) = 134 if let Some(macro_call) = parent.ancestors().find_map(ast::MacroCall::cast) {
132 parent.parent().and_then(|node| node.parent()).and_then(ast::MacroCall::cast)
133 {
134 if let Some(macro_def) = analyzer.resolve_macro_call(db, &macro_call) { 135 if let Some(macro_def) = analyzer.resolve_macro_call(db, &macro_call) {
135 return Some(NameDefinition { 136 let kind = NameKind::Macro(macro_def);
136 item: NameKind::Macro(macro_def), 137 return Some(NameDefinition { kind, container, visibility });
137 container,
138 visibility,
139 });
140 } 138 }
141 } 139 }
142 140
@@ -147,23 +145,23 @@ pub(crate) fn classify_name_ref(
147 AssocItem(item) => Some(from_assoc_item(db, item)), 145 AssocItem(item) => Some(from_assoc_item(db, item)),
148 LocalBinding(Either::A(pat)) => from_pat(db, file_id, pat), 146 LocalBinding(Either::A(pat)) => from_pat(db, file_id, pat),
149 LocalBinding(Either::B(par)) => { 147 LocalBinding(Either::B(par)) => {
150 let item = NameKind::SelfParam(par); 148 let kind = NameKind::SelfParam(par);
151 Some(NameDefinition { item, container, visibility }) 149 Some(NameDefinition { kind, container, visibility })
152 } 150 }
153 GenericParam(par) => { 151 GenericParam(par) => {
154 // FIXME: get generic param def 152 // FIXME: get generic param def
155 let item = NameKind::GenericParam(par); 153 let kind = NameKind::GenericParam(par);
156 Some(NameDefinition { item, container, visibility }) 154 Some(NameDefinition { kind, container, visibility })
157 } 155 }
158 Macro(def) => { 156 Macro(def) => {
159 let item = NameKind::Macro(def); 157 let kind = NameKind::Macro(def);
160 Some(NameDefinition { item, container, visibility }) 158 Some(NameDefinition { kind, container, visibility })
161 } 159 }
162 SelfType(impl_block) => { 160 SelfType(impl_block) => {
163 let ty = impl_block.target_ty(db); 161 let ty = impl_block.target_ty(db);
164 let item = NameKind::SelfType(ty); 162 let kind = NameKind::SelfType(ty);
165 let container = impl_block.module(); 163 let container = impl_block.module();
166 Some(NameDefinition { item, container, visibility }) 164 Some(NameDefinition { kind, container, visibility })
167 } 165 }
168 } 166 }
169} 167}