aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2019-08-12 11:12:45 +0100
committerAleksey Kladov <[email protected]>2019-08-12 11:49:28 +0100
commit13eddd7c499388e956e47aae6a7210e43eb40d55 (patch)
tree07e031193619aaee5b691e22f9e82361fdbbd1b7
parentcce31580e1ec1770b7a5bf4e6fd3441df2c74533 (diff)
Drop support for old extendSelection API
Emacs now handles this via native LSP request https://github.com/emacs-lsp/lsp-mode/commit/dc86bbb227147aa8141e690ad5648fdbd2ebdb9f
-rw-r--r--crates/ra_lsp_server/src/main_loop.rs1
-rw-r--r--crates/ra_lsp_server/src/main_loop/handlers.rs23
-rw-r--r--crates/ra_lsp_server/src/req.rs21
-rw-r--r--editors/emacs/ra-emacs-lsp.el32
4 files changed, 4 insertions, 73 deletions
diff --git a/crates/ra_lsp_server/src/main_loop.rs b/crates/ra_lsp_server/src/main_loop.rs
index 9d540a87e..b9c99a223 100644
--- a/crates/ra_lsp_server/src/main_loop.rs
+++ b/crates/ra_lsp_server/src/main_loop.rs
@@ -346,7 +346,6 @@ fn on_request(
346 })? 346 })?
347 .on::<req::AnalyzerStatus>(handlers::handle_analyzer_status)? 347 .on::<req::AnalyzerStatus>(handlers::handle_analyzer_status)?
348 .on::<req::SyntaxTree>(handlers::handle_syntax_tree)? 348 .on::<req::SyntaxTree>(handlers::handle_syntax_tree)?
349 .on::<req::ExtendSelection>(handlers::handle_extend_selection)?
350 .on::<req::OnTypeFormatting>(handlers::handle_on_type_formatting)? 349 .on::<req::OnTypeFormatting>(handlers::handle_on_type_formatting)?
351 .on::<req::DocumentSymbolRequest>(handlers::handle_document_symbol)? 350 .on::<req::DocumentSymbolRequest>(handlers::handle_document_symbol)?
352 .on::<req::WorkspaceSymbol>(handlers::handle_workspace_symbol)? 351 .on::<req::WorkspaceSymbol>(handlers::handle_workspace_symbol)?
diff --git a/crates/ra_lsp_server/src/main_loop/handlers.rs b/crates/ra_lsp_server/src/main_loop/handlers.rs
index 4ac051c96..a3d3f167c 100644
--- a/crates/ra_lsp_server/src/main_loop/handlers.rs
+++ b/crates/ra_lsp_server/src/main_loop/handlers.rs
@@ -9,7 +9,7 @@ use lsp_types::{
9 TextEdit, WorkspaceEdit, 9 TextEdit, WorkspaceEdit,
10}; 10};
11use ra_ide_api::{ 11use ra_ide_api::{
12 AssistId, Cancelable, FileId, FilePosition, FileRange, FoldKind, Query, Runnable, RunnableKind, 12 AssistId, FileId, FilePosition, FileRange, FoldKind, Query, Runnable, RunnableKind,
13}; 13};
14use ra_prof::profile; 14use ra_prof::profile;
15use ra_syntax::{AstNode, SyntaxKind, TextRange, TextUnit}; 15use ra_syntax::{AstNode, SyntaxKind, TextRange, TextUnit};
@@ -45,27 +45,6 @@ pub fn handle_syntax_tree(world: WorldSnapshot, params: req::SyntaxTreeParams) -
45 Ok(res) 45 Ok(res)
46} 46}
47 47
48// FIXME: drop this API
49pub fn handle_extend_selection(
50 world: WorldSnapshot,
51 params: req::ExtendSelectionParams,
52) -> Result<req::ExtendSelectionResult> {
53 log::error!(
54 "extend selection is deprecated and will be removed soon,
55 use the new selection range API in LSP",
56 );
57 let file_id = params.text_document.try_conv_with(&world)?;
58 let line_index = world.analysis().file_line_index(file_id)?;
59 let selections = params
60 .selections
61 .into_iter()
62 .map_conv_with(&line_index)
63 .map(|range| FileRange { file_id, range })
64 .map(|frange| world.analysis().extend_selection(frange).map(|it| it.conv_with(&line_index)))
65 .collect::<Cancelable<Vec<_>>>()?;
66 Ok(req::ExtendSelectionResult { selections })
67}
68
69pub fn handle_selection_range( 48pub fn handle_selection_range(
70 world: WorldSnapshot, 49 world: WorldSnapshot,
71 params: req::SelectionRangeParams, 50 params: req::SelectionRangeParams,
diff --git a/crates/ra_lsp_server/src/req.rs b/crates/ra_lsp_server/src/req.rs
index 6b986bcc9..b2f3c509d 100644
--- a/crates/ra_lsp_server/src/req.rs
+++ b/crates/ra_lsp_server/src/req.rs
@@ -43,27 +43,6 @@ pub struct SyntaxTreeParams {
43 pub range: Option<Range>, 43 pub range: Option<Range>,
44} 44}
45 45
46pub enum ExtendSelection {}
47
48impl Request for ExtendSelection {
49 type Params = ExtendSelectionParams;
50 type Result = ExtendSelectionResult;
51 const METHOD: &'static str = "rust-analyzer/extendSelection";
52}
53
54#[derive(Deserialize, Debug)]
55#[serde(rename_all = "camelCase")]
56pub struct ExtendSelectionParams {
57 pub text_document: TextDocumentIdentifier,
58 pub selections: Vec<Range>,
59}
60
61#[derive(Serialize, Debug)]
62#[serde(rename_all = "camelCase")]
63pub struct ExtendSelectionResult {
64 pub selections: Vec<Range>,
65}
66
67pub enum SelectionRangeRequest {} 46pub enum SelectionRangeRequest {}
68 47
69impl Request for SelectionRangeRequest { 48impl Request for SelectionRangeRequest {
diff --git a/editors/emacs/ra-emacs-lsp.el b/editors/emacs/ra-emacs-lsp.el
index 075cbd82d..79822c8ce 100644
--- a/editors/emacs/ra-emacs-lsp.el
+++ b/editors/emacs/ra-emacs-lsp.el
@@ -14,7 +14,7 @@
14;; - 'hover' type information & documentation (with lsp-ui) 14;; - 'hover' type information & documentation (with lsp-ui)
15;; - implements source changes (for code actions etc.), except for file system changes 15;; - implements source changes (for code actions etc.), except for file system changes
16;; - implements joinLines (you need to bind rust-analyzer-join-lines to a key) 16;; - implements joinLines (you need to bind rust-analyzer-join-lines to a key)
17;; - implements extendSelection (either bind rust-analyzer-extend-selection to a key, or use expand-region) 17;; - implements selectionRanges (either bind lsp-extend-selection to a key, or use expand-region)
18;; - provides rust-analyzer-inlay-hints-mode for inline type hints 18;; - provides rust-analyzer-inlay-hints-mode for inline type hints
19 19
20;; What's missing: 20;; What's missing:
@@ -103,39 +103,13 @@
103 (rust-analyzer--join-lines-params))) 103 (rust-analyzer--join-lines-params)))
104 (rust-analyzer--apply-source-change))) 104 (rust-analyzer--apply-source-change)))
105 105
106;; extend selection 106;; selection ranges
107
108(defun rust-analyzer-extend-selection ()
109 (interactive)
110 (-let (((&hash "start" "end") (rust-analyzer--extend-selection)))
111 (rust-analyzer--goto-lsp-loc start)
112 (set-mark (point))
113 (rust-analyzer--goto-lsp-loc end)
114 (exchange-point-and-mark)))
115
116(defun rust-analyzer--extend-selection-params ()
117 "Extend selection params."
118 (list :textDocument (lsp--text-document-identifier)
119 :selections
120 (vector
121 (if (use-region-p)
122 (lsp--region-to-range (region-beginning) (region-end))
123 (lsp--region-to-range (point) (point))))))
124
125(defun rust-analyzer--extend-selection ()
126 (->
127 (lsp-send-request
128 (lsp-make-request
129 "rust-analyzer/extendSelection"
130 (rust-analyzer--extend-selection-params)))
131 (ht-get "selections")
132 (seq-first)))
133 107
134(defun rust-analyzer--add-er-expansion () 108(defun rust-analyzer--add-er-expansion ()
135 (make-variable-buffer-local 'er/try-expand-list) 109 (make-variable-buffer-local 'er/try-expand-list)
136 (setq er/try-expand-list (append 110 (setq er/try-expand-list (append
137 er/try-expand-list 111 er/try-expand-list
138 '(rust-analyzer-extend-selection)))) 112 '(lsp-extend-selection))))
139 113
140(with-eval-after-load 'expand-region 114(with-eval-after-load 'expand-region
141 ;; add the expansion for all existing rust-mode buffers. If expand-region is 115 ;; add the expansion for all existing rust-mode buffers. If expand-region is