diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2021-03-22 13:08:45 +0000 |
---|---|---|
committer | GitHub <[email protected]> | 2021-03-22 13:08:45 +0000 |
commit | d4fa6721afacec78a750df1bb1f0e7e950eaf73c (patch) | |
tree | efabf84f708868484e0dac7893f77ddfba6d9c21 /crates/rust-analyzer/src/handlers.rs | |
parent | 3af1885bd2c4d3470d203a216488946ee8572970 (diff) | |
parent | d331155f8db056a0f7a406498c96f759f620d2c7 (diff) |
Merge #8054
8054: Item movers r=matklad a=ivan770
Closes #6823
https://user-images.githubusercontent.com/14003886/111331579-b4f43480-8679-11eb-9af0-e4dabacc4923.mp4
Implementation issues:
- [ ] Most of items are non-movable, since _movability_ of any item has to be determined manually. Common ones are movable though
- [x] Cursor should move with the item
Co-authored-by: ivan770 <[email protected]>
Diffstat (limited to 'crates/rust-analyzer/src/handlers.rs')
-rw-r--r-- | crates/rust-analyzer/src/handlers.rs | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/crates/rust-analyzer/src/handlers.rs b/crates/rust-analyzer/src/handlers.rs index 880fea622..85e67554c 100644 --- a/crates/rust-analyzer/src/handlers.rs +++ b/crates/rust-analyzer/src/handlers.rs | |||
@@ -1427,6 +1427,25 @@ pub(crate) fn handle_open_cargo_toml( | |||
1427 | Ok(Some(res)) | 1427 | Ok(Some(res)) |
1428 | } | 1428 | } |
1429 | 1429 | ||
1430 | pub(crate) fn handle_move_item( | ||
1431 | snap: GlobalStateSnapshot, | ||
1432 | params: lsp_ext::MoveItemParams, | ||
1433 | ) -> Result<Option<lsp_types::TextDocumentEdit>> { | ||
1434 | let _p = profile::span("handle_move_item"); | ||
1435 | let file_id = from_proto::file_id(&snap, ¶ms.text_document.uri)?; | ||
1436 | let range = from_proto::file_range(&snap, params.text_document, params.range)?; | ||
1437 | |||
1438 | let direction = match params.direction { | ||
1439 | lsp_ext::MoveItemDirection::Up => ide::Direction::Up, | ||
1440 | lsp_ext::MoveItemDirection::Down => ide::Direction::Down, | ||
1441 | }; | ||
1442 | |||
1443 | match snap.analysis.move_item(range, direction)? { | ||
1444 | Some(text_edit) => Ok(Some(to_proto::text_document_edit(&snap, file_id, text_edit)?)), | ||
1445 | None => Ok(None), | ||
1446 | } | ||
1447 | } | ||
1448 | |||
1430 | fn to_command_link(command: lsp_types::Command, tooltip: String) -> lsp_ext::CommandLink { | 1449 | fn to_command_link(command: lsp_types::Command, tooltip: String) -> lsp_ext::CommandLink { |
1431 | lsp_ext::CommandLink { tooltip: Some(tooltip), command } | 1450 | lsp_ext::CommandLink { tooltip: Some(tooltip), command } |
1432 | } | 1451 | } |