diff options
author | Ekaterina Babshukova <[email protected]> | 2019-10-14 12:59:02 +0100 |
---|---|---|
committer | Ekaterina Babshukova <[email protected]> | 2019-10-22 21:47:31 +0100 |
commit | 88ff88d3189de9dd9b0d88bdda3da769254c2b8e (patch) | |
tree | 080616bb7e00e028e8d561c828e48eb51956b635 /crates/ra_ide_api/src/references/classify.rs | |
parent | 19fbf2c16b5c1f39e23c720a2655cfdb49c25135 (diff) |
use Lazy, some fixes
Diffstat (limited to 'crates/ra_ide_api/src/references/classify.rs')
-rw-r--r-- | crates/ra_ide_api/src/references/classify.rs | 34 |
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 | |||
1 | use hir::{Either, FromSource, Module, ModuleSource, Path, PathResolution, Source, SourceAnalyzer}; | 3 | use hir::{Either, FromSource, Module, ModuleSource, Path, PathResolution, Source, SourceAnalyzer}; |
2 | use ra_db::FileId; | 4 | use ra_db::FileId; |
3 | use ra_syntax::{ast, match_ast, AstNode, AstPtr}; | 5 | use 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, ¯o_call) { | 135 | if let Some(macro_def) = analyzer.resolve_macro_call(db, ¯o_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 | } |