diff options
Diffstat (limited to 'crates/ra_lsp_server/src/main_loop')
-rw-r--r-- | crates/ra_lsp_server/src/main_loop/handlers.rs | 27 |
1 files changed, 8 insertions, 19 deletions
diff --git a/crates/ra_lsp_server/src/main_loop/handlers.rs b/crates/ra_lsp_server/src/main_loop/handlers.rs index 62c8cbf71..8f07f5027 100644 --- a/crates/ra_lsp_server/src/main_loop/handlers.rs +++ b/crates/ra_lsp_server/src/main_loop/handlers.rs | |||
@@ -21,7 +21,7 @@ use url_serde::Ser; | |||
21 | 21 | ||
22 | use crate::{ | 22 | use crate::{ |
23 | cargo_target_spec::{runnable_args, CargoTargetSpec}, | 23 | cargo_target_spec::{runnable_args, CargoTargetSpec}, |
24 | conv::{to_location, to_location_link, Conv, ConvWith, MapConvWith, TryConvWith}, | 24 | conv::{to_location, Conv, ConvWith, MapConvWith, TryConvWith, TryConvWithToVec}, |
25 | req::{self, Decoration}, | 25 | req::{self, Decoration}, |
26 | world::WorldSnapshot, | 26 | world::WorldSnapshot, |
27 | LspError, Result, | 27 | LspError, Result, |
@@ -263,7 +263,6 @@ pub fn handle_goto_definition( | |||
263 | params: req::TextDocumentPositionParams, | 263 | params: req::TextDocumentPositionParams, |
264 | ) -> Result<Option<req::GotoDefinitionResponse>> { | 264 | ) -> Result<Option<req::GotoDefinitionResponse>> { |
265 | let position = params.try_conv_with(&world)?; | 265 | let position = params.try_conv_with(&world)?; |
266 | let line_index = world.analysis().file_line_index(position.file_id); | ||
267 | let nav_info = match world.analysis().goto_definition(position)? { | 266 | let nav_info = match world.analysis().goto_definition(position)? { |
268 | None => return Ok(None), | 267 | None => return Ok(None), |
269 | Some(it) => it, | 268 | Some(it) => it, |
@@ -272,9 +271,8 @@ pub fn handle_goto_definition( | |||
272 | let res = nav_info | 271 | let res = nav_info |
273 | .info | 272 | .info |
274 | .into_iter() | 273 | .into_iter() |
275 | .map(|nav| RangeInfo::new(nav_range, nav)) | 274 | .map(|nav| (position.file_id, RangeInfo::new(nav_range, nav))) |
276 | .map(|nav| to_location_link(&nav, &world, &line_index)) | 275 | .try_conv_with_to_vec(&world)?; |
277 | .collect::<Result<Vec<_>>>()?; | ||
278 | Ok(Some(res.into())) | 276 | Ok(Some(res.into())) |
279 | } | 277 | } |
280 | 278 | ||
@@ -283,7 +281,6 @@ pub fn handle_goto_implementation( | |||
283 | params: req::TextDocumentPositionParams, | 281 | params: req::TextDocumentPositionParams, |
284 | ) -> Result<Option<req::GotoImplementationResponse>> { | 282 | ) -> Result<Option<req::GotoImplementationResponse>> { |
285 | let position = params.try_conv_with(&world)?; | 283 | let position = params.try_conv_with(&world)?; |
286 | let line_index = world.analysis().file_line_index(position.file_id); | ||
287 | let nav_info = match world.analysis().goto_implementation(position)? { | 284 | let nav_info = match world.analysis().goto_implementation(position)? { |
288 | None => return Ok(None), | 285 | None => return Ok(None), |
289 | Some(it) => it, | 286 | Some(it) => it, |
@@ -292,9 +289,8 @@ pub fn handle_goto_implementation( | |||
292 | let res = nav_info | 289 | let res = nav_info |
293 | .info | 290 | .info |
294 | .into_iter() | 291 | .into_iter() |
295 | .map(|nav| RangeInfo::new(nav_range, nav)) | 292 | .map(|nav| (position.file_id, RangeInfo::new(nav_range, nav))) |
296 | .map(|nav| to_location_link(&nav, &world, &line_index)) | 293 | .try_conv_with_to_vec(&world)?; |
297 | .collect::<Result<Vec<_>>>()?; | ||
298 | Ok(Some(res.into())) | 294 | Ok(Some(res.into())) |
299 | } | 295 | } |
300 | 296 | ||
@@ -303,7 +299,6 @@ pub fn handle_goto_type_definition( | |||
303 | params: req::TextDocumentPositionParams, | 299 | params: req::TextDocumentPositionParams, |
304 | ) -> Result<Option<req::GotoTypeDefinitionResponse>> { | 300 | ) -> Result<Option<req::GotoTypeDefinitionResponse>> { |
305 | let position = params.try_conv_with(&world)?; | 301 | let position = params.try_conv_with(&world)?; |
306 | let line_index = world.analysis().file_line_index(position.file_id); | ||
307 | let nav_info = match world.analysis().goto_type_definition(position)? { | 302 | let nav_info = match world.analysis().goto_type_definition(position)? { |
308 | None => return Ok(None), | 303 | None => return Ok(None), |
309 | Some(it) => it, | 304 | Some(it) => it, |
@@ -312,9 +307,8 @@ pub fn handle_goto_type_definition( | |||
312 | let res = nav_info | 307 | let res = nav_info |
313 | .info | 308 | .info |
314 | .into_iter() | 309 | .into_iter() |
315 | .map(|nav| RangeInfo::new(nav_range, nav)) | 310 | .map(|nav| (position.file_id, RangeInfo::new(nav_range, nav))) |
316 | .map(|nav| to_location_link(&nav, &world, &line_index)) | 311 | .try_conv_with_to_vec(&world)?; |
317 | .collect::<Result<Vec<_>>>()?; | ||
318 | Ok(Some(res.into())) | 312 | Ok(Some(res.into())) |
319 | } | 313 | } |
320 | 314 | ||
@@ -323,12 +317,7 @@ pub fn handle_parent_module( | |||
323 | params: req::TextDocumentPositionParams, | 317 | params: req::TextDocumentPositionParams, |
324 | ) -> Result<Vec<Location>> { | 318 | ) -> Result<Vec<Location>> { |
325 | let position = params.try_conv_with(&world)?; | 319 | let position = params.try_conv_with(&world)?; |
326 | world | 320 | world.analysis().parent_module(position)?.iter().try_conv_with_to_vec(&world) |
327 | .analysis() | ||
328 | .parent_module(position)? | ||
329 | .into_iter() | ||
330 | .map(|nav| nav.try_conv_with(&world)) | ||
331 | .collect::<Result<Vec<_>>>() | ||
332 | } | 321 | } |
333 | 322 | ||
334 | pub fn handle_runnables( | 323 | pub fn handle_runnables( |