diff options
Diffstat (limited to 'crates/ra_lsp_server/src/main_loop')
-rw-r--r-- | crates/ra_lsp_server/src/main_loop/handlers.rs | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/crates/ra_lsp_server/src/main_loop/handlers.rs b/crates/ra_lsp_server/src/main_loop/handlers.rs index a2c12a4c1..3b7a14a5c 100644 --- a/crates/ra_lsp_server/src/main_loop/handlers.rs +++ b/crates/ra_lsp_server/src/main_loop/handlers.rs | |||
@@ -557,24 +557,19 @@ pub fn handle_rename(world: ServerWorld, params: RenameParams) -> Result<Option< | |||
557 | .into()); | 557 | .into()); |
558 | } | 558 | } |
559 | 559 | ||
560 | let refs = world | 560 | let renames = world |
561 | .analysis() | 561 | .analysis() |
562 | .find_all_refs(FilePosition { file_id, offset })?; | 562 | .rename(FilePosition { file_id, offset }, &*params.new_name)?; |
563 | if refs.is_empty() { | 563 | if renames.is_empty() { |
564 | return Ok(None); | 564 | return Ok(None); |
565 | } | 565 | } |
566 | 566 | ||
567 | let mut changes = HashMap::new(); | 567 | let mut changes = HashMap::new(); |
568 | for r in refs { | 568 | for edit in renames { |
569 | if let Ok(loc) = to_location(r.0, r.1, &world, &line_index) { | 569 | changes |
570 | changes | 570 | .entry(file_id.try_conv_with(&world)?) |
571 | .entry(loc.uri) | 571 | .or_insert_with(Vec::new) |
572 | .or_insert_with(Vec::new) | 572 | .extend(edit.edit.conv_with(&line_index)); |
573 | .push(TextEdit { | ||
574 | range: loc.range, | ||
575 | new_text: params.new_name.clone(), | ||
576 | }); | ||
577 | } | ||
578 | } | 573 | } |
579 | 574 | ||
580 | Ok(Some(WorkspaceEdit { | 575 | Ok(Some(WorkspaceEdit { |