diff options
author | Seivan Heidari <[email protected]> | 2019-11-11 13:31:09 +0000 |
---|---|---|
committer | Seivan Heidari <[email protected]> | 2019-11-11 13:31:09 +0000 |
commit | 68a5ff050faf514e9d122212a66703ca8ce66ab7 (patch) | |
tree | 0c389d2680aae82c1805a52f8315312724134341 /crates/ra_ide_api/src/goto_definition.rs | |
parent | 7cd075ff0beb97039cd1d1c6c021abf89339731b (diff) | |
parent | a599147b4232c0d4f6b071a3a96e86f903f4cf52 (diff) |
Merge branch 'master' of https://github.com/rust-analyzer/rust-analyzer into feature/themes
Diffstat (limited to 'crates/ra_ide_api/src/goto_definition.rs')
-rw-r--r-- | crates/ra_ide_api/src/goto_definition.rs | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/crates/ra_ide_api/src/goto_definition.rs b/crates/ra_ide_api/src/goto_definition.rs index afa59cbe3..6c8387f6c 100644 --- a/crates/ra_ide_api/src/goto_definition.rs +++ b/crates/ra_ide_api/src/goto_definition.rs | |||
@@ -9,7 +9,7 @@ use ra_syntax::{ | |||
9 | 9 | ||
10 | use crate::{ | 10 | use crate::{ |
11 | db::RootDatabase, | 11 | db::RootDatabase, |
12 | display::ShortLabel, | 12 | display::{ShortLabel, ToNav}, |
13 | references::{classify_name_ref, NameKind::*}, | 13 | references::{classify_name_ref, NameKind::*}, |
14 | FilePosition, NavigationTarget, RangeInfo, | 14 | FilePosition, NavigationTarget, RangeInfo, |
15 | }; | 15 | }; |
@@ -56,20 +56,19 @@ pub(crate) fn reference_definition( | |||
56 | 56 | ||
57 | let name_kind = classify_name_ref(db, file_id, &name_ref).map(|d| d.kind); | 57 | let name_kind = classify_name_ref(db, file_id, &name_ref).map(|d| d.kind); |
58 | match name_kind { | 58 | match name_kind { |
59 | Some(Macro(mac)) => return Exact(NavigationTarget::from_macro_def(db, mac)), | 59 | Some(Macro(mac)) => return Exact(mac.to_nav(db)), |
60 | Some(Field(field)) => return Exact(NavigationTarget::from_field(db, field)), | 60 | Some(Field(field)) => return Exact(field.to_nav(db)), |
61 | Some(AssocItem(assoc)) => return Exact(NavigationTarget::from_assoc_item(db, assoc)), | 61 | Some(AssocItem(assoc)) => return Exact(assoc.to_nav(db)), |
62 | Some(Def(def)) => match NavigationTarget::from_def(db, def) { | 62 | Some(Def(def)) => match NavigationTarget::from_def(db, def) { |
63 | Some(nav) => return Exact(nav), | 63 | Some(nav) => return Exact(nav), |
64 | None => return Approximate(vec![]), | 64 | None => return Approximate(vec![]), |
65 | }, | 65 | }, |
66 | Some(SelfType(ty)) => { | 66 | Some(SelfType(ty)) => { |
67 | if let Some((def_id, _)) = ty.as_adt() { | 67 | if let Some((adt, _)) = ty.as_adt() { |
68 | return Exact(NavigationTarget::from_adt_def(db, def_id)); | 68 | return Exact(adt.to_nav(db)); |
69 | } | 69 | } |
70 | } | 70 | } |
71 | Some(Pat((_, pat))) => return Exact(NavigationTarget::from_pat(db, file_id, pat)), | 71 | Some(Local(local)) => return Exact(local.to_nav(db)), |
72 | Some(SelfParam(par)) => return Exact(NavigationTarget::from_self_param(file_id, par)), | ||
73 | Some(GenericParam(_)) => { | 72 | Some(GenericParam(_)) => { |
74 | // FIXME: go to the generic param def | 73 | // FIXME: go to the generic param def |
75 | } | 74 | } |
@@ -79,7 +78,7 @@ pub(crate) fn reference_definition( | |||
79 | // Fallback index based approach: | 78 | // Fallback index based approach: |
80 | let navs = crate::symbol_index::index_resolve(db, name_ref) | 79 | let navs = crate::symbol_index::index_resolve(db, name_ref) |
81 | .into_iter() | 80 | .into_iter() |
82 | .map(|s| NavigationTarget::from_symbol(db, s)) | 81 | .map(|s| s.to_nav(db)) |
83 | .collect(); | 82 | .collect(); |
84 | Approximate(navs) | 83 | Approximate(navs) |
85 | } | 84 | } |
@@ -95,7 +94,7 @@ pub(crate) fn name_definition( | |||
95 | if module.has_semi() { | 94 | if module.has_semi() { |
96 | let src = hir::Source { file_id: file_id.into(), ast: module }; | 95 | let src = hir::Source { file_id: file_id.into(), ast: module }; |
97 | if let Some(child_module) = hir::Module::from_declaration(db, src) { | 96 | if let Some(child_module) = hir::Module::from_declaration(db, src) { |
98 | let nav = NavigationTarget::from_module(db, child_module); | 97 | let nav = child_module.to_nav(db); |
99 | return Some(vec![nav]); | 98 | return Some(vec![nav]); |
100 | } | 99 | } |
101 | } | 100 | } |