From e1b59bfe0b00157a97f167b4857418b914ec1fd3 Mon Sep 17 00:00:00 2001 From: Jeremy Kolb Date: Sat, 2 Mar 2019 14:57:40 -0500 Subject: Add NavigationTarget::from_impl_item --- crates/ra_ide_api/src/navigation_target.rs | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'crates/ra_ide_api/src/navigation_target.rs') diff --git a/crates/ra_ide_api/src/navigation_target.rs b/crates/ra_ide_api/src/navigation_target.rs index 6538081ac..ff8d2f15b 100644 --- a/crates/ra_ide_api/src/navigation_target.rs +++ b/crates/ra_ide_api/src/navigation_target.rs @@ -3,7 +3,7 @@ use ra_syntax::{ SyntaxNode, SyntaxNodePtr, AstNode, SmolStr, TextRange, ast, SyntaxKind::{self, NAME}, }; -use hir::{ModuleSource, FieldSource, Name}; +use hir::{ModuleSource, FieldSource, Name, ImplItem}; use crate::{FileSymbol, db::RootDatabase}; @@ -174,6 +174,25 @@ impl NavigationTarget { ) } + pub(crate) fn from_impl_item( + db: &RootDatabase, + impl_item: hir::ImplItem, + ) -> NavigationTarget { + match impl_item { + ImplItem::Method(f) => { + NavigationTarget::from_function(db, f) + } + ImplItem::Const(c) => { + let (file_id, node) = c.source(db); + NavigationTarget::from_named(file_id.original_file(db), &*node) + } + ImplItem::TypeAlias(a) => { + let (file_id, node) = a.source(db); + NavigationTarget::from_named(file_id.original_file(db), &*node) + } + } + } + #[cfg(test)] pub(crate) fn assert_match(&self, expected: &str) { let actual = self.debug_render(); -- cgit v1.2.3