From 99c2ca84945cb12d51ca4353ac20f844e7b40eaa Mon Sep 17 00:00:00 2001 From: Benjamin Coenen <5719034+bnjjj@users.noreply.github.com> Date: Sat, 2 May 2020 21:42:27 +0200 Subject: add support of use alias semantic in definition #4202 Signed-off-by: Benjamin Coenen <5719034+bnjjj@users.noreply.github.com> --- crates/ra_ide_db/src/defs.rs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'crates/ra_ide_db/src') 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::{ }; 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, name: &ast::Name) -> Option } fn classify_name_inner(sema: &Semantics, name: &ast::Name) -> Option { - 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)?; -- cgit v1.2.3