aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--crates/ra_ide_api/src/display/navigation_target.rs40
-rw-r--r--crates/ra_ide_api/src/goto_definition.rs33
2 files changed, 32 insertions, 41 deletions
diff --git a/crates/ra_ide_api/src/display/navigation_target.rs b/crates/ra_ide_api/src/display/navigation_target.rs
index 291b5ee40..b30ef8e05 100644
--- a/crates/ra_ide_api/src/display/navigation_target.rs
+++ b/crates/ra_ide_api/src/display/navigation_target.rs
@@ -6,7 +6,7 @@ use ra_syntax::{
6 ast::{self, DocCommentsOwner, NameOwner}, 6 ast::{self, DocCommentsOwner, NameOwner},
7 match_ast, AstNode, SmolStr, 7 match_ast, AstNode, SmolStr,
8 SyntaxKind::{self, BIND_PAT}, 8 SyntaxKind::{self, BIND_PAT},
9 SyntaxNode, TextRange, 9 TextRange,
10}; 10};
11 11
12use crate::{db::RootDatabase, expand::original_range, FileSymbol}; 12use crate::{db::RootDatabase, expand::original_range, FileSymbol};
@@ -86,7 +86,7 @@ impl NavigationTarget {
86 name, 86 name,
87 None, 87 None,
88 frange.range, 88 frange.range,
89 src.ast.syntax(), 89 src.ast.syntax().kind(),
90 src.ast.doc_comment_text(), 90 src.ast.doc_comment_text(),
91 src.ast.short_label(), 91 src.ast.short_label(),
92 ); 92 );
@@ -141,23 +141,22 @@ impl NavigationTarget {
141 /// Allows `NavigationTarget` to be created from a `NameOwner` 141 /// Allows `NavigationTarget` to be created from a `NameOwner`
142 pub(crate) fn from_named( 142 pub(crate) fn from_named(
143 db: &RootDatabase, 143 db: &RootDatabase,
144 file_id: hir::HirFileId, 144 node: Source<&dyn ast::NameOwner>,
145 node: &impl ast::NameOwner,
146 docs: Option<String>, 145 docs: Option<String>,
147 description: Option<String>, 146 description: Option<String>,
148 ) -> NavigationTarget { 147 ) -> NavigationTarget {
149 //FIXME: use `_` instead of empty string 148 //FIXME: use `_` instead of empty string
150 let name = node.name().map(|it| it.text().clone()).unwrap_or_default(); 149 let name = node.ast.name().map(|it| it.text().clone()).unwrap_or_default();
151 let focus_range = 150 let focus_range =
152 node.name().map(|it| original_range(db, Source::new(file_id, it.syntax())).range); 151 node.ast.name().map(|it| original_range(db, node.with_ast(it.syntax())).range);
153 let frange = original_range(db, Source::new(file_id, node.syntax())); 152 let frange = original_range(db, node.map(|it| it.syntax()));
154 153
155 NavigationTarget::from_syntax( 154 NavigationTarget::from_syntax(
156 frange.file_id, 155 frange.file_id,
157 name, 156 name,
158 focus_range, 157 focus_range,
159 frange.range, 158 frange.range,
160 node.syntax(), 159 node.ast.syntax().kind(),
161 docs, 160 docs,
162 description, 161 description,
163 ) 162 )
@@ -168,14 +167,14 @@ impl NavigationTarget {
168 name: SmolStr, 167 name: SmolStr,
169 focus_range: Option<TextRange>, 168 focus_range: Option<TextRange>,
170 full_range: TextRange, 169 full_range: TextRange,
171 node: &SyntaxNode, 170 kind: SyntaxKind,
172 docs: Option<String>, 171 docs: Option<String>,
173 description: Option<String>, 172 description: Option<String>,
174 ) -> NavigationTarget { 173 ) -> NavigationTarget {
175 NavigationTarget { 174 NavigationTarget {
176 file_id, 175 file_id,
177 name, 176 name,
178 kind: node.kind(), 177 kind,
179 full_range, 178 full_range,
180 focus_range, 179 focus_range,
181 container_name: None, 180 container_name: None,
@@ -220,8 +219,7 @@ where
220 let src = self.source(db); 219 let src = self.source(db);
221 NavigationTarget::from_named( 220 NavigationTarget::from_named(
222 db, 221 db,
223 src.file_id, 222 src.as_ref().map(|it| it as &dyn ast::NameOwner),
224 &src.ast,
225 src.ast.doc_comment_text(), 223 src.ast.doc_comment_text(),
226 src.ast.short_label(), 224 src.ast.short_label(),
227 ) 225 )
@@ -241,7 +239,7 @@ impl ToNav for hir::Module {
241 name, 239 name,
242 None, 240 None,
243 frange.range, 241 frange.range,
244 node.syntax(), 242 node.syntax().kind(),
245 None, 243 None,
246 None, 244 None,
247 ) 245 )
@@ -254,7 +252,7 @@ impl ToNav for hir::Module {
254 name, 252 name,
255 None, 253 None,
256 frange.range, 254 frange.range,
257 node.syntax(), 255 node.syntax().kind(),
258 node.doc_comment_text(), 256 node.doc_comment_text(),
259 node.short_label(), 257 node.short_label(),
260 ) 258 )
@@ -273,7 +271,7 @@ impl ToNav for hir::ImplBlock {
273 "impl".into(), 271 "impl".into(),
274 None, 272 None,
275 frange.range, 273 frange.range,
276 src.ast.syntax(), 274 src.ast.syntax().kind(),
277 None, 275 None,
278 None, 276 None,
279 ) 277 )
@@ -287,8 +285,7 @@ impl ToNav for hir::StructField {
287 match &src.ast { 285 match &src.ast {
288 FieldSource::Named(it) => NavigationTarget::from_named( 286 FieldSource::Named(it) => NavigationTarget::from_named(
289 db, 287 db,
290 src.file_id, 288 src.with_ast(it),
291 it,
292 it.doc_comment_text(), 289 it.doc_comment_text(),
293 it.short_label(), 290 it.short_label(),
294 ), 291 ),
@@ -299,7 +296,7 @@ impl ToNav for hir::StructField {
299 "".into(), 296 "".into(),
300 None, 297 None,
301 frange.range, 298 frange.range,
302 it.syntax(), 299 it.syntax().kind(),
303 None, 300 None,
304 None, 301 None,
305 ) 302 )
@@ -312,7 +309,12 @@ impl ToNav for hir::MacroDef {
312 fn to_nav(&self, db: &RootDatabase) -> NavigationTarget { 309 fn to_nav(&self, db: &RootDatabase) -> NavigationTarget {
313 let src = self.source(db); 310 let src = self.source(db);
314 log::debug!("nav target {:#?}", src.ast.syntax()); 311 log::debug!("nav target {:#?}", src.ast.syntax());
315 NavigationTarget::from_named(db, src.file_id, &src.ast, src.ast.doc_comment_text(), None) 312 NavigationTarget::from_named(
313 db,
314 src.as_ref().map(|it| it as &dyn ast::NameOwner),
315 src.ast.doc_comment_text(),
316 None,
317 )
316 } 318 }
317} 319}
318 320
diff --git a/crates/ra_ide_api/src/goto_definition.rs b/crates/ra_ide_api/src/goto_definition.rs
index 1a8db0ea0..3f16e9566 100644
--- a/crates/ra_ide_api/src/goto_definition.rs
+++ b/crates/ra_ide_api/src/goto_definition.rs
@@ -120,8 +120,7 @@ fn named_target(db: &RootDatabase, node: Source<&SyntaxNode>) -> Option<Navigati
120 ast::StructDef(it) => { 120 ast::StructDef(it) => {
121 Some(NavigationTarget::from_named( 121 Some(NavigationTarget::from_named(
122 db, 122 db,
123 node.file_id, 123 node.with_ast(&it),
124 &it,
125 it.doc_comment_text(), 124 it.doc_comment_text(),
126 it.short_label(), 125 it.short_label(),
127 )) 126 ))
@@ -129,8 +128,7 @@ fn named_target(db: &RootDatabase, node: Source<&SyntaxNode>) -> Option<Navigati
129 ast::EnumDef(it) => { 128 ast::EnumDef(it) => {
130 Some(NavigationTarget::from_named( 129 Some(NavigationTarget::from_named(
131 db, 130 db,
132 node.file_id, 131 node.with_ast(&it),
133 &it,
134 it.doc_comment_text(), 132 it.doc_comment_text(),
135 it.short_label(), 133 it.short_label(),
136 )) 134 ))
@@ -138,8 +136,7 @@ fn named_target(db: &RootDatabase, node: Source<&SyntaxNode>) -> Option<Navigati
138 ast::EnumVariant(it) => { 136 ast::EnumVariant(it) => {
139 Some(NavigationTarget::from_named( 137 Some(NavigationTarget::from_named(
140 db, 138 db,
141 node.file_id, 139 node.with_ast(&it),
142 &it,
143 it.doc_comment_text(), 140 it.doc_comment_text(),
144 it.short_label(), 141 it.short_label(),
145 )) 142 ))
@@ -147,8 +144,7 @@ fn named_target(db: &RootDatabase, node: Source<&SyntaxNode>) -> Option<Navigati
147 ast::FnDef(it) => { 144 ast::FnDef(it) => {
148 Some(NavigationTarget::from_named( 145 Some(NavigationTarget::from_named(
149 db, 146 db,
150 node.file_id, 147 node.with_ast(&it),
151 &it,
152 it.doc_comment_text(), 148 it.doc_comment_text(),
153 it.short_label(), 149 it.short_label(),
154 )) 150 ))
@@ -156,8 +152,7 @@ fn named_target(db: &RootDatabase, node: Source<&SyntaxNode>) -> Option<Navigati
156 ast::TypeAliasDef(it) => { 152 ast::TypeAliasDef(it) => {
157 Some(NavigationTarget::from_named( 153 Some(NavigationTarget::from_named(
158 db, 154 db,
159 node.file_id, 155 node.with_ast(&it),
160 &it,
161 it.doc_comment_text(), 156 it.doc_comment_text(),
162 it.short_label(), 157 it.short_label(),
163 )) 158 ))
@@ -165,8 +160,7 @@ fn named_target(db: &RootDatabase, node: Source<&SyntaxNode>) -> Option<Navigati
165 ast::ConstDef(it) => { 160 ast::ConstDef(it) => {
166 Some(NavigationTarget::from_named( 161 Some(NavigationTarget::from_named(
167 db, 162 db,
168 node.file_id, 163 node.with_ast(&it),
169 &it,
170 it.doc_comment_text(), 164 it.doc_comment_text(),
171 it.short_label(), 165 it.short_label(),
172 )) 166 ))
@@ -174,8 +168,7 @@ fn named_target(db: &RootDatabase, node: Source<&SyntaxNode>) -> Option<Navigati
174 ast::StaticDef(it) => { 168 ast::StaticDef(it) => {
175 Some(NavigationTarget::from_named( 169 Some(NavigationTarget::from_named(
176 db, 170 db,
177 node.file_id, 171 node.with_ast(&it),
178 &it,
179 it.doc_comment_text(), 172 it.doc_comment_text(),
180 it.short_label(), 173 it.short_label(),
181 )) 174 ))
@@ -183,8 +176,7 @@ fn named_target(db: &RootDatabase, node: Source<&SyntaxNode>) -> Option<Navigati
183 ast::TraitDef(it) => { 176 ast::TraitDef(it) => {
184 Some(NavigationTarget::from_named( 177 Some(NavigationTarget::from_named(
185 db, 178 db,
186 node.file_id, 179 node.with_ast(&it),
187 &it,
188 it.doc_comment_text(), 180 it.doc_comment_text(),
189 it.short_label(), 181 it.short_label(),
190 )) 182 ))
@@ -192,8 +184,7 @@ fn named_target(db: &RootDatabase, node: Source<&SyntaxNode>) -> Option<Navigati
192 ast::RecordFieldDef(it) => { 184 ast::RecordFieldDef(it) => {
193 Some(NavigationTarget::from_named( 185 Some(NavigationTarget::from_named(
194 db, 186 db,
195 node.file_id, 187 node.with_ast(&it),
196 &it,
197 it.doc_comment_text(), 188 it.doc_comment_text(),
198 it.short_label(), 189 it.short_label(),
199 )) 190 ))
@@ -201,8 +192,7 @@ fn named_target(db: &RootDatabase, node: Source<&SyntaxNode>) -> Option<Navigati
201 ast::Module(it) => { 192 ast::Module(it) => {
202 Some(NavigationTarget::from_named( 193 Some(NavigationTarget::from_named(
203 db, 194 db,
204 node.file_id, 195 node.with_ast(&it),
205 &it,
206 it.doc_comment_text(), 196 it.doc_comment_text(),
207 it.short_label(), 197 it.short_label(),
208 )) 198 ))
@@ -210,8 +200,7 @@ fn named_target(db: &RootDatabase, node: Source<&SyntaxNode>) -> Option<Navigati
210 ast::MacroCall(it) => { 200 ast::MacroCall(it) => {
211 Some(NavigationTarget::from_named( 201 Some(NavigationTarget::from_named(
212 db, 202 db,
213 node.file_id, 203 node.with_ast(&it),
214 &it,
215 it.doc_comment_text(), 204 it.doc_comment_text(),
216 None, 205 None,
217 )) 206 ))