aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide_api/src/navigation_target.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_ide_api/src/navigation_target.rs')
-rw-r--r--crates/ra_ide_api/src/navigation_target.rs59
1 files changed, 28 insertions, 31 deletions
diff --git a/crates/ra_ide_api/src/navigation_target.rs b/crates/ra_ide_api/src/navigation_target.rs
index 8406fee31..2e11d2de3 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::{
3 SyntaxNode, AstNode, SmolStr, TextRange, ast, 3 SyntaxNode, AstNode, SmolStr, TextRange, ast,
4 SyntaxKind::{self, NAME}, 4 SyntaxKind::{self, NAME},
5}; 5};
6use hir::{Def, ModuleSource}; 6use hir::{ModuleSource};
7 7
8use crate::{FileSymbol, db::RootDatabase}; 8use crate::{FileSymbol, db::RootDatabase};
9 9
@@ -106,63 +106,60 @@ impl NavigationTarget {
106 db: &RootDatabase, 106 db: &RootDatabase,
107 module_def: hir::ModuleDef, 107 module_def: hir::ModuleDef,
108 ) -> Option<NavigationTarget> { 108 ) -> Option<NavigationTarget> {
109 let def = match module_def { 109 match module_def {
110 hir::ModuleDef::Def(def_id) => def_id.resolve(db), 110 hir::ModuleDef::Def(_) => return None,
111 hir::ModuleDef::Module(module) => { 111 hir::ModuleDef::Module(module) => Some(NavigationTarget::from_module(db, module)),
112 return Some(NavigationTarget::from_module(db, module)); 112 hir::ModuleDef::Function(func) => Some(NavigationTarget::from_function(db, func)),
113 }
114 hir::ModuleDef::Function(func) => {
115 return Some(NavigationTarget::from_function(db, func));
116 }
117 hir::ModuleDef::Struct(s) => { 113 hir::ModuleDef::Struct(s) => {
118 let (file_id, node) = s.source(db); 114 let (file_id, node) = s.source(db);
119 return Some(NavigationTarget::from_named( 115 Some(NavigationTarget::from_named(
120 file_id.original_file(db), 116 file_id.original_file(db),
121 &*node, 117 &*node,
122 )); 118 ))
123 } 119 }
124 hir::ModuleDef::Const(s) => { 120 hir::ModuleDef::Const(s) => {
125 let (file_id, node) = s.source(db); 121 let (file_id, node) = s.source(db);
126 return Some(NavigationTarget::from_named( 122 Some(NavigationTarget::from_named(
127 file_id.original_file(db), 123 file_id.original_file(db),
128 &*node, 124 &*node,
129 )); 125 ))
130 } 126 }
131 hir::ModuleDef::Static(s) => { 127 hir::ModuleDef::Static(s) => {
132 let (file_id, node) = s.source(db); 128 let (file_id, node) = s.source(db);
133 return Some(NavigationTarget::from_named( 129 Some(NavigationTarget::from_named(
134 file_id.original_file(db), 130 file_id.original_file(db),
135 &*node, 131 &*node,
136 )); 132 ))
137 } 133 }
138 hir::ModuleDef::Enum(e) => { 134 hir::ModuleDef::Enum(e) => {
139 let (file_id, node) = e.source(db); 135 let (file_id, node) = e.source(db);
140 return Some(NavigationTarget::from_named( 136 Some(NavigationTarget::from_named(
141 file_id.original_file(db), 137 file_id.original_file(db),
142 &*node, 138 &*node,
143 )); 139 ))
144 } 140 }
145 hir::ModuleDef::EnumVariant(var) => { 141 hir::ModuleDef::EnumVariant(var) => {
146 let (file_id, node) = var.source(db); 142 let (file_id, node) = var.source(db);
147 return Some(NavigationTarget::from_named( 143 Some(NavigationTarget::from_named(
148 file_id.original_file(db), 144 file_id.original_file(db),
149 &*node, 145 &*node,
150 )); 146 ))
151 } 147 }
152 }; 148 hir::ModuleDef::Trait(e) => {
153 149 let (file_id, node) = e.source(db);
154 let res = match def { 150 Some(NavigationTarget::from_named(
155 Def::Trait(f) => { 151 file_id.original_file(db),
156 let (file_id, node) = f.source(db); 152 &*node,
157 NavigationTarget::from_named(file_id.original_file(db), &*node) 153 ))
158 } 154 }
159 Def::Type(f) => { 155 hir::ModuleDef::Type(e) => {
160 let (file_id, node) = f.source(db); 156 let (file_id, node) = e.source(db);
161 NavigationTarget::from_named(file_id.original_file(db), &*node) 157 Some(NavigationTarget::from_named(
158 file_id.original_file(db),
159 &*node,
160 ))
162 } 161 }
163 Def::Item => return None, 162 }
164 };
165 Some(res)
166 } 163 }
167 164
168 #[cfg(test)] 165 #[cfg(test)]