]> git.lizzy.rs Git - rust.git/blobdiff - crates/ra_ide_db/src/defs.rs
add support of use alias semantic in definition #4202
[rust.git] / crates / ra_ide_db / src / defs.rs
index 54543e6e40e861327fb8c864b02e9e70dd03381f..d5d06962bb568ee0b2d2884db1e7fbe358751182 100644 (file)
@@ -11,7 +11,7 @@
 };
 use ra_prof::profile;
 use ra_syntax::{
-    ast::{self, AstNode, NameOwner},
+    ast::{self, AstNode},
     match_ast,
 };
 use test_utils::tested_by;
@@ -115,15 +115,19 @@ pub fn classify_name(sema: &Semantics<RootDatabase>, name: &ast::Name) -> Option
 }
 
 fn classify_name_inner(sema: &Semantics<RootDatabase>, name: &ast::Name) -> Option<Definition> {
-    println!("name : {} -- {:?}", name, name);
     let parent = name.syntax().parent()?;
-    println!("parent : {} -- {:?}", parent, parent);
 
     match_ast! {
         match parent {
             ast::Alias(it) => {
-                let def = sema.to_def(&it)?;
-                Some(Definition::ModuleDef(def.into()))
+                tested_by!(goto_def_for_use_alias; force);
+                let use_tree = it.syntax().ancestors().find_map(ast::UseTree::cast)?;
+                let path = use_tree.path()?;
+                let path_segment = path.segment()?;
+                let name_ref = path_segment.name_ref()?;
+                let name_ref_class = classify_name_ref(sema, &name_ref)?;
+
+                Some(name_ref_class.definition())
             },
             ast::BindPat(it) => {
                 let local = sema.to_def(&it)?;