diff options
author | Jonas Schievink <[email protected]> | 2021-04-13 19:32:45 +0100 |
---|---|---|
committer | Jonas Schievink <[email protected]> | 2021-04-13 23:03:04 +0100 |
commit | 30aae2cefb9d068055ca8d250d04a288e3684394 (patch) | |
tree | 081a70d030c79437074e2d5ba15f7a9efd5d01cf /crates/rust-analyzer/src | |
parent | 10a243ea55565a0dd1de52f8f802c3e3a7bfef54 (diff) |
Move cursor position when using item movers
Diffstat (limited to 'crates/rust-analyzer/src')
-rw-r--r-- | crates/rust-analyzer/src/handlers.rs | 9 | ||||
-rw-r--r-- | crates/rust-analyzer/src/lsp_ext.rs | 2 | ||||
-rw-r--r-- | crates/rust-analyzer/src/to_proto.rs | 12 |
3 files changed, 7 insertions, 16 deletions
diff --git a/crates/rust-analyzer/src/handlers.rs b/crates/rust-analyzer/src/handlers.rs index 4f0c9d23c..1f59402e5 100644 --- a/crates/rust-analyzer/src/handlers.rs +++ b/crates/rust-analyzer/src/handlers.rs | |||
@@ -1410,7 +1410,7 @@ pub(crate) fn handle_open_cargo_toml( | |||
1410 | pub(crate) fn handle_move_item( | 1410 | pub(crate) fn handle_move_item( |
1411 | snap: GlobalStateSnapshot, | 1411 | snap: GlobalStateSnapshot, |
1412 | params: lsp_ext::MoveItemParams, | 1412 | params: lsp_ext::MoveItemParams, |
1413 | ) -> Result<Option<lsp_types::TextDocumentEdit>> { | 1413 | ) -> Result<Vec<lsp_ext::SnippetTextEdit>> { |
1414 | let _p = profile::span("handle_move_item"); | 1414 | let _p = profile::span("handle_move_item"); |
1415 | let file_id = from_proto::file_id(&snap, ¶ms.text_document.uri)?; | 1415 | let file_id = from_proto::file_id(&snap, ¶ms.text_document.uri)?; |
1416 | let range = from_proto::file_range(&snap, params.text_document, params.range)?; | 1416 | let range = from_proto::file_range(&snap, params.text_document, params.range)?; |
@@ -1421,8 +1421,11 @@ pub(crate) fn handle_move_item( | |||
1421 | }; | 1421 | }; |
1422 | 1422 | ||
1423 | match snap.analysis.move_item(range, direction)? { | 1423 | match snap.analysis.move_item(range, direction)? { |
1424 | Some(text_edit) => Ok(Some(to_proto::text_document_edit(&snap, file_id, text_edit)?)), | 1424 | Some(text_edit) => { |
1425 | None => Ok(None), | 1425 | let line_index = snap.file_line_index(file_id)?; |
1426 | Ok(to_proto::snippet_text_edit_vec(&line_index, true, text_edit)) | ||
1427 | } | ||
1428 | None => Ok(vec![]), | ||
1426 | } | 1429 | } |
1427 | } | 1430 | } |
1428 | 1431 | ||
diff --git a/crates/rust-analyzer/src/lsp_ext.rs b/crates/rust-analyzer/src/lsp_ext.rs index 81a6f22f1..d648cda32 100644 --- a/crates/rust-analyzer/src/lsp_ext.rs +++ b/crates/rust-analyzer/src/lsp_ext.rs | |||
@@ -407,7 +407,7 @@ pub enum MoveItem {} | |||
407 | 407 | ||
408 | impl Request for MoveItem { | 408 | impl Request for MoveItem { |
409 | type Params = MoveItemParams; | 409 | type Params = MoveItemParams; |
410 | type Result = Option<lsp_types::TextDocumentEdit>; | 410 | type Result = Vec<SnippetTextEdit>; |
411 | const METHOD: &'static str = "experimental/moveItem"; | 411 | const METHOD: &'static str = "experimental/moveItem"; |
412 | } | 412 | } |
413 | 413 | ||
diff --git a/crates/rust-analyzer/src/to_proto.rs b/crates/rust-analyzer/src/to_proto.rs index 8d7cb9b74..1a1f65f3b 100644 --- a/crates/rust-analyzer/src/to_proto.rs +++ b/crates/rust-analyzer/src/to_proto.rs | |||
@@ -688,18 +688,6 @@ pub(crate) fn goto_definition_response( | |||
688 | } | 688 | } |
689 | } | 689 | } |
690 | 690 | ||
691 | pub(crate) fn text_document_edit( | ||
692 | snap: &GlobalStateSnapshot, | ||
693 | file_id: FileId, | ||
694 | edit: TextEdit, | ||
695 | ) -> Result<lsp_types::TextDocumentEdit> { | ||
696 | let text_document = optional_versioned_text_document_identifier(snap, file_id); | ||
697 | let line_index = snap.file_line_index(file_id)?; | ||
698 | let edits = | ||
699 | edit.into_iter().map(|it| lsp_types::OneOf::Left(text_edit(&line_index, it))).collect(); | ||
700 | Ok(lsp_types::TextDocumentEdit { text_document, edits }) | ||
701 | } | ||
702 | |||
703 | pub(crate) fn snippet_text_document_edit( | 691 | pub(crate) fn snippet_text_document_edit( |
704 | snap: &GlobalStateSnapshot, | 692 | snap: &GlobalStateSnapshot, |
705 | is_snippet: bool, | 693 | is_snippet: bool, |