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/main_loop/handlers.rs35
1 files changed, 12 insertions, 23 deletions
diff --git a/crates/ra_lsp_server/src/main_loop/handlers.rs b/crates/ra_lsp_server/src/main_loop/handlers.rs
index a8d6f7c23..6b407cb0c 100644
--- a/crates/ra_lsp_server/src/main_loop/handlers.rs
+++ b/crates/ra_lsp_server/src/main_loop/handlers.rs
@@ -153,14 +153,12 @@ pub fn handle_on_type_formatting(
153 params: req::DocumentOnTypeFormattingParams, 153 params: req::DocumentOnTypeFormattingParams,
154) -> Result<Option<Vec<TextEdit>>> { 154) -> Result<Option<Vec<TextEdit>>> {
155 let _p = profile("handle_on_type_formatting"); 155 let _p = profile("handle_on_type_formatting");
156 let file_id = params.text_document.try_conv_with(&world)?; 156 let mut position = params.text_document_position.try_conv_with(&world)?;
157 let line_index = world.analysis().file_line_index(file_id); 157 let line_index = world.analysis().file_line_index(position.file_id);
158 let position = FilePosition { 158
159 file_id, 159 // in `ra_ide_api`, the `on_type` invariant is that
160 /// in `ra_ide_api`, the `on_type` invariant is that 160 // `text.char_at(position) == typed_char`.
161 /// `text.char_at(position) == typed_char`. 161 position.offset = position.offset - TextUnit::of_char('.');
162 offset: params.position.conv_with(&line_index) - TextUnit::of_char('.'),
163 };
164 162
165 let edit = match params.ch.as_str() { 163 let edit = match params.ch.as_str() {
166 "=" => world.analysis().on_eq_typed(position), 164 "=" => world.analysis().on_eq_typed(position),
@@ -407,12 +405,7 @@ pub fn handle_completion(
407 params: req::CompletionParams, 405 params: req::CompletionParams,
408) -> Result<Option<req::CompletionResponse>> { 406) -> Result<Option<req::CompletionResponse>> {
409 let _p = profile("handle_completion"); 407 let _p = profile("handle_completion");
410 let position = { 408 let position = params.text_document_position.try_conv_with(&world)?;
411 let file_id = params.text_document.try_conv_with(&world)?;
412 let line_index = world.analysis().file_line_index(file_id);
413 let offset = params.position.conv_with(&line_index);
414 FilePosition { file_id, offset }
415 };
416 let completion_triggered_after_single_colon = { 409 let completion_triggered_after_single_colon = {
417 let mut res = false; 410 let mut res = false;
418 if let Some(ctx) = params.context { 411 if let Some(ctx) = params.context {
@@ -543,9 +536,7 @@ pub fn handle_prepare_rename(
543} 536}
544 537
545pub fn handle_rename(world: WorldSnapshot, params: RenameParams) -> Result<Option<WorkspaceEdit>> { 538pub fn handle_rename(world: WorldSnapshot, params: RenameParams) -> Result<Option<WorkspaceEdit>> {
546 let file_id = params.text_document.try_conv_with(&world)?; 539 let position = params.text_document_position.try_conv_with(&world)?;
547 let line_index = world.analysis().file_line_index(file_id);
548 let offset = params.position.conv_with(&line_index);
549 540
550 if params.new_name.is_empty() { 541 if params.new_name.is_empty() {
551 return Err(LspError::new( 542 return Err(LspError::new(
@@ -555,8 +546,7 @@ pub fn handle_rename(world: WorldSnapshot, params: RenameParams) -> Result<Optio
555 .into()); 546 .into());
556 } 547 }
557 548
558 let optional_change = 549 let optional_change = world.analysis().rename(position, &*params.new_name)?;
559 world.analysis().rename(FilePosition { file_id, offset }, &*params.new_name)?;
560 let change = match optional_change { 550 let change = match optional_change {
561 None => return Ok(None), 551 None => return Ok(None),
562 Some(it) => it, 552 Some(it) => it,
@@ -571,11 +561,10 @@ pub fn handle_references(
571 world: WorldSnapshot, 561 world: WorldSnapshot,
572 params: req::ReferenceParams, 562 params: req::ReferenceParams,
573) -> Result<Option<Vec<Location>>> { 563) -> Result<Option<Vec<Location>>> {
574 let file_id = params.text_document.try_conv_with(&world)?; 564 let position = params.text_document_position.try_conv_with(&world)?;
575 let line_index = world.analysis().file_line_index(file_id); 565 let line_index = world.analysis().file_line_index(position.file_id);
576 let offset = params.position.conv_with(&line_index);
577 566
578 let refs = match world.analysis().find_all_refs(FilePosition { file_id, offset })? { 567 let refs = match world.analysis().find_all_refs(position)? {
579 None => return Ok(None), 568 None => return Ok(None),
580 Some(refs) => refs, 569 Some(refs) => refs,
581 }; 570 };