From 064707c5a05e360d777b0b3ccbd8e30ad4acbda1 Mon Sep 17 00:00:00 2001 From: kjeremy Date: Wed, 6 Mar 2019 14:40:42 -0500 Subject: Use source map --- crates/ra_hir/src/lib.rs | 2 +- crates/ra_ide_api/src/goto_definition.rs | 23 +++++++++-------------- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/crates/ra_hir/src/lib.rs b/crates/ra_hir/src/lib.rs index 74c718e72..a6e744ea7 100644 --- a/crates/ra_hir/src/lib.rs +++ b/crates/ra_hir/src/lib.rs @@ -60,7 +60,7 @@ pub use self::{ impl_block::{ImplBlock, ImplItem}, docs::{Docs, Documentation}, adt::AdtDef, - expr::{ExprScopes, ScopesWithSourceMap, ScopeEntryWithSyntax, Pat}, + expr::{ExprScopes, ScopesWithSourceMap, ScopeEntryWithSyntax}, resolve::{Resolver, Resolution}, }; diff --git a/crates/ra_ide_api/src/goto_definition.rs b/crates/ra_ide_api/src/goto_definition.rs index 286ade0a4..dd5f9f31c 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::{ SyntaxNode, }; use test_utils::tested_by; -use hir::{Pat, Resolution}; +use hir::Resolution; use crate::{FilePosition, NavigationTarget, db::RootDatabase, RangeInfo}; @@ -149,20 +149,15 @@ pub(crate) fn reference_definition( name_ref.syntax().ancestors().find_map(ast::PathPat::cast) { let infer_result = function.infer(db); + let source_map = function.body_source_map(db); - if let Some(p) = path_pat.path().and_then(hir::Path::from_ast) { - if let Some(pat_id) = - function.body(db).pats().find_map(|(pat_id, pat)| match pat { - Pat::Path(ref path) if *path == p => Some(pat_id), - _ => None, - }) - { - if let Some(res) = - infer_result.assoc_resolutions_for_pat(pat_id.into()) - { - return Exact(NavigationTarget::from_impl_item(db, res)); - } - } + let pat: &ast::Pat = path_pat.into(); + + if let Some(res) = source_map + .node_pat(pat) + .and_then(|it| infer_result.assoc_resolutions_for_pat(it.into())) + { + return Exact(NavigationTarget::from_impl_item(db, res)); } } } -- cgit v1.2.3