aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide_api/src/goto_definition.rs
diff options
context:
space:
mode:
authorbors[bot] <bors[bot]@users.noreply.github.com>2019-01-24 22:56:13 +0000
committerbors[bot] <bors[bot]@users.noreply.github.com>2019-01-24 22:56:13 +0000
commitc42db0bbd750fae19a91f0a0354240ea6c3bafce (patch)
treebeb7030248280fd8c67eb2b2c9cc4b19c6074c17 /crates/ra_ide_api/src/goto_definition.rs
parentb308375b82a33687f93468d75c7cc628b83a1351 (diff)
parent31d3a56b1865c33ef54e5d76e606965c87676695 (diff)
Merge #623
623: WIP: module id is not def id r=matklad a=matklad This achieves two things: * makes module_tree & item_map per crate, not per source_root * begins the refactoring to remove universal `DefId` in favor of having separate ids for each kind of `Def`. Currently, only modules get a differnt ID though. Co-authored-by: Aleksey Kladov <[email protected]>
Diffstat (limited to 'crates/ra_ide_api/src/goto_definition.rs')
-rw-r--r--crates/ra_ide_api/src/goto_definition.rs8
1 files changed, 3 insertions, 5 deletions
diff --git a/crates/ra_ide_api/src/goto_definition.rs b/crates/ra_ide_api/src/goto_definition.rs
index b1becca03..46bdde00d 100644
--- a/crates/ra_ide_api/src/goto_definition.rs
+++ b/crates/ra_ide_api/src/goto_definition.rs
@@ -63,13 +63,11 @@ pub(crate) fn reference_definition(
63 let infer_result = function.infer(db); 63 let infer_result = function.infer(db);
64 let syntax_mapping = function.body_syntax_mapping(db); 64 let syntax_mapping = function.body_syntax_mapping(db);
65 let expr = ast::Expr::cast(method_call.syntax()).unwrap(); 65 let expr = ast::Expr::cast(method_call.syntax()).unwrap();
66 if let Some(def_id) = syntax_mapping 66 if let Some(func) = syntax_mapping
67 .node_expr(expr) 67 .node_expr(expr)
68 .and_then(|it| infer_result.method_resolution(it)) 68 .and_then(|it| infer_result.method_resolution(it))
69 { 69 {
70 if let Some(target) = NavigationTarget::from_def(db, def_id.resolve(db)) { 70 return Exact(NavigationTarget::from_function(db, func));
71 return Exact(target);
72 }
73 }; 71 };
74 } 72 }
75 } 73 }
@@ -84,7 +82,7 @@ pub(crate) fn reference_definition(
84 { 82 {
85 let resolved = module.resolve_path(db, &path); 83 let resolved = module.resolve_path(db, &path);
86 if let Some(def_id) = resolved.take_types().or(resolved.take_values()) { 84 if let Some(def_id) = resolved.take_types().or(resolved.take_values()) {
87 if let Some(target) = NavigationTarget::from_def(db, def_id.resolve(db)) { 85 if let Some(target) = NavigationTarget::from_def(db, def_id) {
88 return Exact(target); 86 return Exact(target);
89 } 87 }
90 } 88 }