diff options
Diffstat (limited to 'crates/ra_ide_api/src/navigation_target.rs')
-rw-r--r-- | crates/ra_ide_api/src/navigation_target.rs | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/crates/ra_ide_api/src/navigation_target.rs b/crates/ra_ide_api/src/navigation_target.rs index 1eb177665..19cea2fd6 100644 --- a/crates/ra_ide_api/src/navigation_target.rs +++ b/crates/ra_ide_api/src/navigation_target.rs | |||
@@ -96,6 +96,11 @@ impl NavigationTarget { | |||
96 | NavigationTarget::from_module(db, module) | 96 | NavigationTarget::from_module(db, module) |
97 | } | 97 | } |
98 | 98 | ||
99 | pub(crate) fn from_function(db: &RootDatabase, func: hir::Function) -> NavigationTarget { | ||
100 | let (file_id, fn_def) = func.source(db); | ||
101 | NavigationTarget::from_named(file_id.original_file(db), &*fn_def) | ||
102 | } | ||
103 | |||
99 | // TODO once Def::Item is gone, this should be able to always return a NavigationTarget | 104 | // TODO once Def::Item is gone, this should be able to always return a NavigationTarget |
100 | pub(crate) fn from_def( | 105 | pub(crate) fn from_def( |
101 | db: &RootDatabase, | 106 | db: &RootDatabase, |
@@ -106,6 +111,9 @@ impl NavigationTarget { | |||
106 | hir::ModuleDef::Module(module) => { | 111 | hir::ModuleDef::Module(module) => { |
107 | return Some(NavigationTarget::from_module(db, module)); | 112 | return Some(NavigationTarget::from_module(db, module)); |
108 | } | 113 | } |
114 | hir::ModuleDef::Function(func) => { | ||
115 | return Some(NavigationTarget::from_function(db, func)); | ||
116 | } | ||
109 | }; | 117 | }; |
110 | 118 | ||
111 | let res = match def { | 119 | let res = match def { |
@@ -121,10 +129,6 @@ impl NavigationTarget { | |||
121 | let (file_id, node) = ev.source(db); | 129 | let (file_id, node) = ev.source(db); |
122 | NavigationTarget::from_named(file_id.original_file(db), &*node) | 130 | NavigationTarget::from_named(file_id.original_file(db), &*node) |
123 | } | 131 | } |
124 | Def::Function(f) => { | ||
125 | let (file_id, node) = f.source(db); | ||
126 | NavigationTarget::from_named(file_id.original_file(db), &*node) | ||
127 | } | ||
128 | Def::Trait(f) => { | 132 | Def::Trait(f) => { |
129 | let (file_id, node) = f.source(db); | 133 | let (file_id, node) = f.source(db); |
130 | NavigationTarget::from_named(file_id.original_file(db), &*node) | 134 | NavigationTarget::from_named(file_id.original_file(db), &*node) |