aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_lsp_server/src
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_lsp_server/src')
-rw-r--r--crates/ra_lsp_server/src/conv.rs13
-rw-r--r--crates/ra_lsp_server/src/main_loop/handlers.rs30
2 files changed, 20 insertions, 23 deletions
diff --git a/crates/ra_lsp_server/src/conv.rs b/crates/ra_lsp_server/src/conv.rs
index fc01b1c0e..d0bdc94aa 100644
--- a/crates/ra_lsp_server/src/conv.rs
+++ b/crates/ra_lsp_server/src/conv.rs
@@ -412,6 +412,19 @@ impl TryConvWith for (FileId, RangeInfo<NavigationTarget>) {
412 } 412 }
413} 413}
414 414
415impl TryConvWith for (FileId, RangeInfo<Vec<NavigationTarget>>) {
416 type Ctx = WorldSnapshot;
417 type Output = req::GotoDefinitionResponse;
418 fn try_conv_with(self, world: &WorldSnapshot) -> Result<req::GotoTypeDefinitionResponse> {
419 let (file_id, RangeInfo { range, info: navs }) = self;
420 let links = navs
421 .into_iter()
422 .map(|nav| (file_id, RangeInfo::new(range, nav)))
423 .try_conv_with_to_vec(world)?;
424 Ok(links.into())
425 }
426}
427
415pub fn to_location( 428pub fn to_location(
416 file_id: FileId, 429 file_id: FileId,
417 range: TextRange, 430 range: TextRange,
diff --git a/crates/ra_lsp_server/src/main_loop/handlers.rs b/crates/ra_lsp_server/src/main_loop/handlers.rs
index 8f07f5027..ab9ed5080 100644
--- a/crates/ra_lsp_server/src/main_loop/handlers.rs
+++ b/crates/ra_lsp_server/src/main_loop/handlers.rs
@@ -9,8 +9,7 @@ use lsp_types::{
9 TextDocumentIdentifier, TextEdit, WorkspaceEdit, 9 TextDocumentIdentifier, TextEdit, WorkspaceEdit,
10}; 10};
11use ra_ide_api::{ 11use ra_ide_api::{
12 AssistId, Cancelable, FileId, FilePosition, FileRange, FoldKind, Query, RangeInfo, 12 AssistId, Cancelable, FileId, FilePosition, FileRange, FoldKind, Query, RunnableKind, Severity,
13 RunnableKind, Severity,
14}; 13};
15use ra_prof::profile; 14use ra_prof::profile;
16use ra_syntax::{AstNode, SyntaxKind, TextRange, TextUnit}; 15use ra_syntax::{AstNode, SyntaxKind, TextRange, TextUnit};
@@ -267,13 +266,8 @@ pub fn handle_goto_definition(
267 None => return Ok(None), 266 None => return Ok(None),
268 Some(it) => it, 267 Some(it) => it,
269 }; 268 };
270 let nav_range = nav_info.range; 269 let res = (position.file_id, nav_info).try_conv_with(&world)?;
271 let res = nav_info 270 Ok(Some(res))
272 .info
273 .into_iter()
274 .map(|nav| (position.file_id, RangeInfo::new(nav_range, nav)))
275 .try_conv_with_to_vec(&world)?;
276 Ok(Some(res.into()))
277} 271}
278 272
279pub fn handle_goto_implementation( 273pub fn handle_goto_implementation(
@@ -285,13 +279,8 @@ pub fn handle_goto_implementation(
285 None => return Ok(None), 279 None => return Ok(None),
286 Some(it) => it, 280 Some(it) => it,
287 }; 281 };
288 let nav_range = nav_info.range; 282 let res = (position.file_id, nav_info).try_conv_with(&world)?;
289 let res = nav_info 283 Ok(Some(res))
290 .info
291 .into_iter()
292 .map(|nav| (position.file_id, RangeInfo::new(nav_range, nav)))
293 .try_conv_with_to_vec(&world)?;
294 Ok(Some(res.into()))
295} 284}
296 285
297pub fn handle_goto_type_definition( 286pub fn handle_goto_type_definition(
@@ -303,13 +292,8 @@ pub fn handle_goto_type_definition(
303 None => return Ok(None), 292 None => return Ok(None),
304 Some(it) => it, 293 Some(it) => it,
305 }; 294 };
306 let nav_range = nav_info.range; 295 let res = (position.file_id, nav_info).try_conv_with(&world)?;
307 let res = nav_info 296 Ok(Some(res))
308 .info
309 .into_iter()
310 .map(|nav| (position.file_id, RangeInfo::new(nav_range, nav)))
311 .try_conv_with_to_vec(&world)?;
312 Ok(Some(res.into()))
313} 297}
314 298
315pub fn handle_parent_module( 299pub fn handle_parent_module(