diff options
Diffstat (limited to 'crates/ra_ide_api/src')
-rw-r--r-- | crates/ra_ide_api/src/goto_definition.rs | 15 | ||||
-rw-r--r-- | crates/ra_ide_api/src/navigation_target.rs | 21 |
2 files changed, 22 insertions, 14 deletions
diff --git a/crates/ra_ide_api/src/goto_definition.rs b/crates/ra_ide_api/src/goto_definition.rs index 3b66483cb..f16c3bda4 100644 --- a/crates/ra_ide_api/src/goto_definition.rs +++ b/crates/ra_ide_api/src/goto_definition.rs | |||
@@ -5,7 +5,7 @@ use ra_syntax::{ | |||
5 | SyntaxNode, | 5 | SyntaxNode, |
6 | }; | 6 | }; |
7 | use test_utils::tested_by; | 7 | use test_utils::tested_by; |
8 | use hir::{ImplItem, Resolution}; | 8 | use hir::Resolution; |
9 | 9 | ||
10 | use crate::{FilePosition, NavigationTarget, db::RootDatabase, RangeInfo}; | 10 | use crate::{FilePosition, NavigationTarget, db::RootDatabase, RangeInfo}; |
11 | 11 | ||
@@ -138,18 +138,7 @@ pub(crate) fn reference_definition( | |||
138 | .node_expr(expr) | 138 | .node_expr(expr) |
139 | .and_then(|it| infer_result.assoc_resolutions(it.into())) | 139 | .and_then(|it| infer_result.assoc_resolutions(it.into())) |
140 | { | 140 | { |
141 | match res { | 141 | return Exact(NavigationTarget::from_impl_item(db, res)); |
142 | ImplItem::Method(f) => { | ||
143 | return Exact(NavigationTarget::from_function(db, f)); | ||
144 | } | ||
145 | ImplItem::Const(c) => { | ||
146 | let (file, node) = c.source(db); | ||
147 | let file = file.original_file(db); | ||
148 | let node = &*node; | ||
149 | return Exact(NavigationTarget::from_named(file, node)); | ||
150 | } | ||
151 | _ => {} | ||
152 | } | ||
153 | } | 142 | } |
154 | } | 143 | } |
155 | } | 144 | } |
diff --git a/crates/ra_ide_api/src/navigation_target.rs b/crates/ra_ide_api/src/navigation_target.rs index 6538081ac..ff8d2f15b 100644 --- a/crates/ra_ide_api/src/navigation_target.rs +++ b/crates/ra_ide_api/src/navigation_target.rs | |||
@@ -3,7 +3,7 @@ use ra_syntax::{ | |||
3 | SyntaxNode, SyntaxNodePtr, AstNode, SmolStr, TextRange, ast, | 3 | SyntaxNode, SyntaxNodePtr, AstNode, SmolStr, TextRange, ast, |
4 | SyntaxKind::{self, NAME}, | 4 | SyntaxKind::{self, NAME}, |
5 | }; | 5 | }; |
6 | use hir::{ModuleSource, FieldSource, Name}; | 6 | use hir::{ModuleSource, FieldSource, Name, ImplItem}; |
7 | 7 | ||
8 | use crate::{FileSymbol, db::RootDatabase}; | 8 | use crate::{FileSymbol, db::RootDatabase}; |
9 | 9 | ||
@@ -174,6 +174,25 @@ impl NavigationTarget { | |||
174 | ) | 174 | ) |
175 | } | 175 | } |
176 | 176 | ||
177 | pub(crate) fn from_impl_item( | ||
178 | db: &RootDatabase, | ||
179 | impl_item: hir::ImplItem, | ||
180 | ) -> NavigationTarget { | ||
181 | match impl_item { | ||
182 | ImplItem::Method(f) => { | ||
183 | NavigationTarget::from_function(db, f) | ||
184 | } | ||
185 | ImplItem::Const(c) => { | ||
186 | let (file_id, node) = c.source(db); | ||
187 | NavigationTarget::from_named(file_id.original_file(db), &*node) | ||
188 | } | ||
189 | ImplItem::TypeAlias(a) => { | ||
190 | let (file_id, node) = a.source(db); | ||
191 | NavigationTarget::from_named(file_id.original_file(db), &*node) | ||
192 | } | ||
193 | } | ||
194 | } | ||
195 | |||
177 | #[cfg(test)] | 196 | #[cfg(test)] |
178 | pub(crate) fn assert_match(&self, expected: &str) { | 197 | pub(crate) fn assert_match(&self, expected: &str) { |
179 | let actual = self.debug_render(); | 198 | let actual = self.debug_render(); |