diff --git a/crates/ra_ide/src/goto_definition.rs b/crates/ra_ide/src/goto_definition.rs
index 31f567541d7..5b9b3eef89d 100644
--- a/crates/ra_ide/src/goto_definition.rs
+++ b/crates/ra_ide/src/goto_definition.rs
@@ -249,9 +249,24 @@ mod tests {
         check_goto(
             "
             //- /lib.rs
-            use foo as <|>bar;
+            use foo as bar<|>;
 
 
+            //- /foo/lib.rs
+            #[macro_export]
+            macro_rules! foo { () => { () } }",
+            "SOURCE_FILE FileId(2) 0..50",
+            "#[macro_export]\nmacro_rules! foo { () => { () } }\n",
+        );
+    }
+
+    #[test]
+    fn goto_def_for_use_alias_foo_macro() {
+        check_goto(
+            "
+            //- /lib.rs
+            use foo::foo as bar<|>;
+
             //- /foo/lib.rs
             #[macro_export]
             macro_rules! foo { () => { () } }
diff --git a/crates/ra_ide_db/src/defs.rs b/crates/ra_ide_db/src/defs.rs
index 54543e6e40e..d5d06962bb5 100644
--- a/crates/ra_ide_db/src/defs.rs
+++ b/crates/ra_ide_db/src/defs.rs
@@ -11,7 +11,7 @@ use hir::{
 };
 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)?;