diff options
Diffstat (limited to 'crates/ra_lsp_server/src/main_loop')
-rw-r--r-- | crates/ra_lsp_server/src/main_loop/handlers.rs | 44 | ||||
-rw-r--r-- | crates/ra_lsp_server/src/main_loop/mod.rs | 1 |
2 files changed, 39 insertions, 6 deletions
diff --git a/crates/ra_lsp_server/src/main_loop/handlers.rs b/crates/ra_lsp_server/src/main_loop/handlers.rs index b2ebc9cdc..51061543c 100644 --- a/crates/ra_lsp_server/src/main_loop/handlers.rs +++ b/crates/ra_lsp_server/src/main_loop/handlers.rs | |||
@@ -1,15 +1,16 @@ | |||
1 | use std::collections::HashMap; | 1 | use std::collections::{HashMap}; |
2 | 2 | ||
3 | use languageserver_types::{ | 3 | use languageserver_types::{ |
4 | Diagnostic, DiagnosticSeverity, DocumentSymbol, | 4 | Diagnostic, DiagnosticSeverity, DocumentSymbol, |
5 | Command, TextDocumentIdentifier, | 5 | CodeActionResponse, Command, TextDocumentIdentifier, |
6 | SymbolInformation, Position, Location, TextEdit, | 6 | SymbolInformation, Position, Location, TextEdit, |
7 | CompletionItem, InsertTextFormat, CompletionItemKind, | 7 | CompletionItem, InsertTextFormat, CompletionItemKind, |
8 | FoldingRange, FoldingRangeParams, FoldingRangeKind | ||
8 | }; | 9 | }; |
9 | use serde_json::to_value; | 10 | use serde_json::to_value; |
10 | use ra_analysis::{Query, FileId, RunnableKind, JobToken}; | 11 | use ra_analysis::{Query, FileId, RunnableKind, JobToken, FoldKind}; |
11 | use ra_syntax::{ | 12 | use ra_syntax::{ |
12 | text_utils::contains_offset_nonstrict, | 13 | text_utils::contains_offset_nonstrict |
13 | }; | 14 | }; |
14 | 15 | ||
15 | use ::{ | 16 | use ::{ |
@@ -177,6 +178,7 @@ pub fn handle_workspace_symbol( | |||
177 | world, &line_index | 178 | world, &line_index |
178 | )?, | 179 | )?, |
179 | container_name: None, | 180 | container_name: None, |
181 | deprecated: None, | ||
180 | }; | 182 | }; |
181 | res.push(info); | 183 | res.push(info); |
182 | }; | 184 | }; |
@@ -365,11 +367,41 @@ pub fn handle_completion( | |||
365 | Ok(Some(req::CompletionResponse::Array(items))) | 367 | Ok(Some(req::CompletionResponse::Array(items))) |
366 | } | 368 | } |
367 | 369 | ||
370 | pub fn handle_folding_range( | ||
371 | world: ServerWorld, | ||
372 | params: FoldingRangeParams, | ||
373 | _token: JobToken, | ||
374 | ) -> Result<Option<Vec<FoldingRange>>> { | ||
375 | let file_id = params.text_document.try_conv_with(&world)?; | ||
376 | let line_index = world.analysis().file_line_index(file_id); | ||
377 | |||
378 | let res = Some(world.analysis() | ||
379 | .folding_ranges(file_id) | ||
380 | .into_iter() | ||
381 | .map(|fold| { | ||
382 | let kind = match fold.kind { | ||
383 | FoldKind::Comment => FoldingRangeKind::Comment, | ||
384 | FoldKind::Imports => FoldingRangeKind::Imports | ||
385 | }; | ||
386 | let range = fold.range.conv_with(&line_index); | ||
387 | FoldingRange { | ||
388 | start_line: range.start.line, | ||
389 | start_character: Some(range.start.character), | ||
390 | end_line: range.end.line, | ||
391 | end_character: Some(range.start.character), | ||
392 | kind: Some(kind) | ||
393 | } | ||
394 | }) | ||
395 | .collect()); | ||
396 | |||
397 | Ok(res) | ||
398 | } | ||
399 | |||
368 | pub fn handle_code_action( | 400 | pub fn handle_code_action( |
369 | world: ServerWorld, | 401 | world: ServerWorld, |
370 | params: req::CodeActionParams, | 402 | params: req::CodeActionParams, |
371 | _token: JobToken, | 403 | _token: JobToken, |
372 | ) -> Result<Option<Vec<Command>>> { | 404 | ) -> Result<Option<CodeActionResponse>> { |
373 | let file_id = params.text_document.try_conv_with(&world)?; | 405 | let file_id = params.text_document.try_conv_with(&world)?; |
374 | let line_index = world.analysis().file_line_index(file_id); | 406 | let line_index = world.analysis().file_line_index(file_id); |
375 | let range = params.range.conv_with(&line_index); | 407 | let range = params.range.conv_with(&line_index); |
@@ -392,7 +424,7 @@ pub fn handle_code_action( | |||
392 | res.push(cmd); | 424 | res.push(cmd); |
393 | } | 425 | } |
394 | 426 | ||
395 | Ok(Some(res)) | 427 | Ok(Some(CodeActionResponse::Commands(res))) |
396 | } | 428 | } |
397 | 429 | ||
398 | pub fn publish_diagnostics( | 430 | pub fn publish_diagnostics( |
diff --git a/crates/ra_lsp_server/src/main_loop/mod.rs b/crates/ra_lsp_server/src/main_loop/mod.rs index 2b2279e97..abc58b70e 100644 --- a/crates/ra_lsp_server/src/main_loop/mod.rs +++ b/crates/ra_lsp_server/src/main_loop/mod.rs | |||
@@ -253,6 +253,7 @@ fn on_request( | |||
253 | .on::<req::DecorationsRequest>(handlers::handle_decorations)? | 253 | .on::<req::DecorationsRequest>(handlers::handle_decorations)? |
254 | .on::<req::Completion>(handlers::handle_completion)? | 254 | .on::<req::Completion>(handlers::handle_completion)? |
255 | .on::<req::CodeActionRequest>(handlers::handle_code_action)? | 255 | .on::<req::CodeActionRequest>(handlers::handle_code_action)? |
256 | .on::<req::FoldingRangeRequest>(handlers::handle_folding_range)? | ||
256 | .finish(); | 257 | .finish(); |
257 | match req { | 258 | match req { |
258 | Ok((id, handle)) => { | 259 | Ok((id, handle)) => { |