aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide_db/src/defs.rs
diff options
context:
space:
mode:
authorBenjamin Coenen <[email protected]>2020-05-02 20:42:27 +0100
committerBenjamin Coenen <[email protected]>2020-05-02 20:42:27 +0100
commit99c2ca84945cb12d51ca4353ac20f844e7b40eaa (patch)
treefa21a4c951157891b8afc82526abb557a4287ceb /crates/ra_ide_db/src/defs.rs
parent4613497a7714c6cd87166e6525d764d75f8acefd (diff)
add support of use alias semantic in definition #4202
Signed-off-by: Benjamin Coenen <[email protected]>
Diffstat (limited to 'crates/ra_ide_db/src/defs.rs')
-rw-r--r--crates/ra_ide_db/src/defs.rs14
1 files changed, 9 insertions, 5 deletions
diff --git a/crates/ra_ide_db/src/defs.rs b/crates/ra_ide_db/src/defs.rs
index 54543e6e4..d5d06962b 100644
--- a/crates/ra_ide_db/src/defs.rs
+++ b/crates/ra_ide_db/src/defs.rs
@@ -11,7 +11,7 @@ use hir::{
11}; 11};
12use ra_prof::profile; 12use ra_prof::profile;
13use ra_syntax::{ 13use ra_syntax::{
14 ast::{self, AstNode, NameOwner}, 14 ast::{self, AstNode},
15 match_ast, 15 match_ast,
16}; 16};
17use test_utils::tested_by; 17use test_utils::tested_by;
@@ -115,15 +115,19 @@ pub fn classify_name(sema: &Semantics<RootDatabase>, name: &ast::Name) -> Option
115} 115}
116 116
117fn classify_name_inner(sema: &Semantics<RootDatabase>, name: &ast::Name) -> Option<Definition> { 117fn classify_name_inner(sema: &Semantics<RootDatabase>, name: &ast::Name) -> Option<Definition> {
118 println!("name : {} -- {:?}", name, name);
119 let parent = name.syntax().parent()?; 118 let parent = name.syntax().parent()?;
120 println!("parent : {} -- {:?}", parent, parent);
121 119
122 match_ast! { 120 match_ast! {
123 match parent { 121 match parent {
124 ast::Alias(it) => { 122 ast::Alias(it) => {
125 let def = sema.to_def(&it)?; 123 tested_by!(goto_def_for_use_alias; force);
126 Some(Definition::ModuleDef(def.into())) 124 let use_tree = it.syntax().ancestors().find_map(ast::UseTree::cast)?;
125 let path = use_tree.path()?;
126 let path_segment = path.segment()?;
127 let name_ref = path_segment.name_ref()?;
128 let name_ref_class = classify_name_ref(sema, &name_ref)?;
129
130 Some(name_ref_class.definition())
127 }, 131 },
128 ast::BindPat(it) => { 132 ast::BindPat(it) => {
129 let local = sema.to_def(&it)?; 133 let local = sema.to_def(&it)?;