diff options
author | Jeremy Kolb <[email protected]> | 2019-12-11 14:11:55 +0000 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2019-12-11 16:35:08 +0000 |
commit | 712700d8e027b108f9c4f8fa9acc2f25e453b6d1 (patch) | |
tree | 0d36b4b4d3f1f8f6d788c24a6b2089178619c81d /crates/ra_lsp_server | |
parent | 5202b0ecbaab2d44e886828f0e30dee67fad0c5c (diff) |
Support LSP 3.15
This merely upgrades our protocol support. It does not add any of the new features.
Diffstat (limited to 'crates/ra_lsp_server')
-rw-r--r-- | crates/ra_lsp_server/Cargo.toml | 2 | ||||
-rw-r--r-- | crates/ra_lsp_server/src/caps.rs | 7 | ||||
-rw-r--r-- | crates/ra_lsp_server/src/main_loop.rs | 3 | ||||
-rw-r--r-- | crates/ra_lsp_server/src/main_loop/handlers.rs | 5 | ||||
-rw-r--r-- | crates/ra_lsp_server/tests/heavy_tests/main.rs | 21 |
5 files changed, 33 insertions, 5 deletions
diff --git a/crates/ra_lsp_server/Cargo.toml b/crates/ra_lsp_server/Cargo.toml index 41672eaff..c50cb8031 100644 --- a/crates/ra_lsp_server/Cargo.toml +++ b/crates/ra_lsp_server/Cargo.toml | |||
@@ -14,7 +14,7 @@ serde_json = "1.0.34" | |||
14 | serde = { version = "1.0.83", features = ["derive"] } | 14 | serde = { version = "1.0.83", features = ["derive"] } |
15 | crossbeam-channel = "0.4" | 15 | crossbeam-channel = "0.4" |
16 | log = "0.4.3" | 16 | log = "0.4.3" |
17 | lsp-types = { version = "0.61.0", features = ["proposed"] } | 17 | lsp-types = { version = "0.63.0", features = ["proposed"] } |
18 | rustc-hash = "1.0" | 18 | rustc-hash = "1.0" |
19 | parking_lot = "0.10.0" | 19 | parking_lot = "0.10.0" |
20 | jod-thread = "0.1.0" | 20 | jod-thread = "0.1.0" |
diff --git a/crates/ra_lsp_server/src/caps.rs b/crates/ra_lsp_server/src/caps.rs index eea0965ed..4cb259360 100644 --- a/crates/ra_lsp_server/src/caps.rs +++ b/crates/ra_lsp_server/src/caps.rs | |||
@@ -5,7 +5,7 @@ use lsp_types::{ | |||
5 | DocumentOnTypeFormattingOptions, FoldingRangeProviderCapability, GenericCapability, | 5 | DocumentOnTypeFormattingOptions, FoldingRangeProviderCapability, GenericCapability, |
6 | ImplementationProviderCapability, RenameOptions, RenameProviderCapability, ServerCapabilities, | 6 | ImplementationProviderCapability, RenameOptions, RenameProviderCapability, ServerCapabilities, |
7 | SignatureHelpOptions, TextDocumentSyncCapability, TextDocumentSyncKind, | 7 | SignatureHelpOptions, TextDocumentSyncCapability, TextDocumentSyncKind, |
8 | TextDocumentSyncOptions, TypeDefinitionProviderCapability, | 8 | TextDocumentSyncOptions, TypeDefinitionProviderCapability, WorkDoneProgressOptions, |
9 | }; | 9 | }; |
10 | 10 | ||
11 | pub fn server_capabilities() -> ServerCapabilities { | 11 | pub fn server_capabilities() -> ServerCapabilities { |
@@ -21,10 +21,14 @@ pub fn server_capabilities() -> ServerCapabilities { | |||
21 | completion_provider: Some(CompletionOptions { | 21 | completion_provider: Some(CompletionOptions { |
22 | resolve_provider: None, | 22 | resolve_provider: None, |
23 | trigger_characters: Some(vec![":".to_string(), ".".to_string()]), | 23 | trigger_characters: Some(vec![":".to_string(), ".".to_string()]), |
24 | work_done_progress_options: WorkDoneProgressOptions { work_done_progress: None }, | ||
24 | }), | 25 | }), |
25 | signature_help_provider: Some(SignatureHelpOptions { | 26 | signature_help_provider: Some(SignatureHelpOptions { |
26 | trigger_characters: Some(vec!["(".to_string(), ",".to_string(), ")".to_string()]), | 27 | trigger_characters: Some(vec!["(".to_string(), ",".to_string(), ")".to_string()]), |
28 | retrigger_characters: None, | ||
29 | work_done_progress_options: WorkDoneProgressOptions { work_done_progress: None }, | ||
27 | }), | 30 | }), |
31 | declaration_provider: None, | ||
28 | definition_provider: Some(true), | 32 | definition_provider: Some(true), |
29 | type_definition_provider: Some(TypeDefinitionProviderCapability::Simple(true)), | 33 | type_definition_provider: Some(TypeDefinitionProviderCapability::Simple(true)), |
30 | implementation_provider: Some(ImplementationProviderCapability::Simple(true)), | 34 | implementation_provider: Some(ImplementationProviderCapability::Simple(true)), |
@@ -44,6 +48,7 @@ pub fn server_capabilities() -> ServerCapabilities { | |||
44 | folding_range_provider: Some(FoldingRangeProviderCapability::Simple(true)), | 48 | folding_range_provider: Some(FoldingRangeProviderCapability::Simple(true)), |
45 | rename_provider: Some(RenameProviderCapability::Options(RenameOptions { | 49 | rename_provider: Some(RenameProviderCapability::Options(RenameOptions { |
46 | prepare_provider: Some(true), | 50 | prepare_provider: Some(true), |
51 | work_done_progress_options: WorkDoneProgressOptions { work_done_progress: None }, | ||
47 | })), | 52 | })), |
48 | document_link_provider: None, | 53 | document_link_provider: None, |
49 | color_provider: None, | 54 | color_provider: None, |
diff --git a/crates/ra_lsp_server/src/main_loop.rs b/crates/ra_lsp_server/src/main_loop.rs index 83845f1e0..158cac0be 100644 --- a/crates/ra_lsp_server/src/main_loop.rs +++ b/crates/ra_lsp_server/src/main_loop.rs | |||
@@ -520,7 +520,8 @@ fn on_notification( | |||
520 | if let Some(file_id) = state.vfs.write().remove_file_overlay(path.as_path()) { | 520 | if let Some(file_id) = state.vfs.write().remove_file_overlay(path.as_path()) { |
521 | subs.remove_sub(FileId(file_id.0)); | 521 | subs.remove_sub(FileId(file_id.0)); |
522 | } | 522 | } |
523 | let params = req::PublishDiagnosticsParams { uri, diagnostics: Vec::new() }; | 523 | let params = |
524 | req::PublishDiagnosticsParams { uri, diagnostics: Vec::new(), version: None }; | ||
524 | let not = notification_new::<req::PublishDiagnostics>(params); | 525 | let not = notification_new::<req::PublishDiagnostics>(params); |
525 | msg_sender.send(not.into()).unwrap(); | 526 | msg_sender.send(not.into()).unwrap(); |
526 | return Ok(()); | 527 | return Ok(()); |
diff --git a/crates/ra_lsp_server/src/main_loop/handlers.rs b/crates/ra_lsp_server/src/main_loop/handlers.rs index 409583634..5b64b27cd 100644 --- a/crates/ra_lsp_server/src/main_loop/handlers.rs +++ b/crates/ra_lsp_server/src/main_loop/handlers.rs | |||
@@ -648,6 +648,7 @@ pub fn handle_code_action( | |||
648 | diagnostics: None, | 648 | diagnostics: None, |
649 | edit: None, | 649 | edit: None, |
650 | command: Some(command), | 650 | command: Some(command), |
651 | is_preferred: None, | ||
651 | }; | 652 | }; |
652 | res.push(action.into()); | 653 | res.push(action.into()); |
653 | } | 654 | } |
@@ -670,6 +671,7 @@ pub fn handle_code_action( | |||
670 | diagnostics: None, | 671 | diagnostics: None, |
671 | edit: None, | 672 | edit: None, |
672 | command: Some(command), | 673 | command: Some(command), |
674 | is_preferred: None, | ||
673 | }; | 675 | }; |
674 | res.push(action.into()); | 676 | res.push(action.into()); |
675 | } | 677 | } |
@@ -828,9 +830,10 @@ pub fn publish_diagnostics( | |||
828 | source: Some("rust-analyzer".to_string()), | 830 | source: Some("rust-analyzer".to_string()), |
829 | message: d.message, | 831 | message: d.message, |
830 | related_information: None, | 832 | related_information: None, |
833 | tags: None, | ||
831 | }) | 834 | }) |
832 | .collect(); | 835 | .collect(); |
833 | Ok(req::PublishDiagnosticsParams { uri, diagnostics }) | 836 | Ok(req::PublishDiagnosticsParams { uri, diagnostics, version: None }) |
834 | } | 837 | } |
835 | 838 | ||
836 | pub fn publish_decorations( | 839 | pub fn publish_decorations( |
diff --git a/crates/ra_lsp_server/tests/heavy_tests/main.rs b/crates/ra_lsp_server/tests/heavy_tests/main.rs index cfbf16ea5..dff63a12d 100644 --- a/crates/ra_lsp_server/tests/heavy_tests/main.rs +++ b/crates/ra_lsp_server/tests/heavy_tests/main.rs | |||
@@ -4,7 +4,8 @@ use std::{collections::HashMap, time::Instant}; | |||
4 | 4 | ||
5 | use lsp_types::{ | 5 | use lsp_types::{ |
6 | CodeActionContext, DidOpenTextDocumentParams, DocumentFormattingParams, FormattingOptions, | 6 | CodeActionContext, DidOpenTextDocumentParams, DocumentFormattingParams, FormattingOptions, |
7 | Position, Range, TextDocumentItem, TextDocumentPositionParams, | 7 | PartialResultParams, Position, Range, TextDocumentItem, TextDocumentPositionParams, |
8 | WorkDoneProgressParams, | ||
8 | }; | 9 | }; |
9 | use ra_lsp_server::req::{ | 10 | use ra_lsp_server::req::{ |
10 | CodeActionParams, CodeActionRequest, Completion, CompletionParams, DidOpenTextDocument, | 11 | CodeActionParams, CodeActionRequest, Completion, CompletionParams, DidOpenTextDocument, |
@@ -48,6 +49,8 @@ use std::collections::Spam; | |||
48 | Position::new(0, 23), | 49 | Position::new(0, 23), |
49 | ), | 50 | ), |
50 | context: None, | 51 | context: None, |
52 | partial_result_params: PartialResultParams::default(), | ||
53 | work_done_progress_params: WorkDoneProgressParams::default(), | ||
51 | }); | 54 | }); |
52 | assert!(format!("{}", res).contains("HashMap")); | 55 | assert!(format!("{}", res).contains("HashMap")); |
53 | eprintln!("completion took {:?}", completion_start.elapsed()); | 56 | eprintln!("completion took {:?}", completion_start.elapsed()); |
@@ -211,8 +214,12 @@ pub use std::collections::HashMap; | |||
211 | options: FormattingOptions { | 214 | options: FormattingOptions { |
212 | tab_size: 4, | 215 | tab_size: 4, |
213 | insert_spaces: false, | 216 | insert_spaces: false, |
217 | insert_final_newline: None, | ||
218 | trim_final_newlines: None, | ||
219 | trim_trailing_whitespace: None, | ||
214 | properties: HashMap::new(), | 220 | properties: HashMap::new(), |
215 | }, | 221 | }, |
222 | work_done_progress_params: WorkDoneProgressParams::default(), | ||
216 | }, | 223 | }, |
217 | json!([ | 224 | json!([ |
218 | { | 225 | { |
@@ -272,7 +279,11 @@ pub use std::collections::HashMap; | |||
272 | tab_size: 4, | 279 | tab_size: 4, |
273 | insert_spaces: false, | 280 | insert_spaces: false, |
274 | properties: HashMap::new(), | 281 | properties: HashMap::new(), |
282 | insert_final_newline: None, | ||
283 | trim_final_newlines: None, | ||
284 | trim_trailing_whitespace: None, | ||
275 | }, | 285 | }, |
286 | work_done_progress_params: WorkDoneProgressParams::default(), | ||
276 | }, | 287 | }, |
277 | json!([ | 288 | json!([ |
278 | { | 289 | { |
@@ -325,6 +336,8 @@ fn main() {} | |||
325 | text_document: server.doc_id("src/lib.rs"), | 336 | text_document: server.doc_id("src/lib.rs"), |
326 | range: Range::new(Position::new(0, 4), Position::new(0, 7)), | 337 | range: Range::new(Position::new(0, 4), Position::new(0, 7)), |
327 | context: empty_context(), | 338 | context: empty_context(), |
339 | partial_result_params: PartialResultParams::default(), | ||
340 | work_done_progress_params: WorkDoneProgressParams::default(), | ||
328 | }, | 341 | }, |
329 | json!([ | 342 | json!([ |
330 | { | 343 | { |
@@ -356,6 +369,8 @@ fn main() {} | |||
356 | text_document: server.doc_id("src/lib.rs"), | 369 | text_document: server.doc_id("src/lib.rs"), |
357 | range: Range::new(Position::new(2, 4), Position::new(2, 7)), | 370 | range: Range::new(Position::new(2, 4), Position::new(2, 7)), |
358 | context: empty_context(), | 371 | context: empty_context(), |
372 | partial_result_params: PartialResultParams::default(), | ||
373 | work_done_progress_params: WorkDoneProgressParams::default(), | ||
359 | }, | 374 | }, |
360 | json!([]), | 375 | json!([]), |
361 | ); | 376 | ); |
@@ -404,6 +419,8 @@ fn main() {{}} | |||
404 | text_document: server.doc_id("src/lib.rs"), | 419 | text_document: server.doc_id("src/lib.rs"), |
405 | range: Range::new(Position::new(0, 4), Position::new(0, 7)), | 420 | range: Range::new(Position::new(0, 4), Position::new(0, 7)), |
406 | context: empty_context(), | 421 | context: empty_context(), |
422 | partial_result_params: PartialResultParams::default(), | ||
423 | work_done_progress_params: WorkDoneProgressParams::default(), | ||
407 | }, | 424 | }, |
408 | json!([ | 425 | json!([ |
409 | { | 426 | { |
@@ -435,6 +452,8 @@ fn main() {{}} | |||
435 | text_document: server.doc_id("src/lib.rs"), | 452 | text_document: server.doc_id("src/lib.rs"), |
436 | range: Range::new(Position::new(2, 4), Position::new(2, 7)), | 453 | range: Range::new(Position::new(2, 4), Position::new(2, 7)), |
437 | context: empty_context(), | 454 | context: empty_context(), |
455 | partial_result_params: PartialResultParams::default(), | ||
456 | work_done_progress_params: WorkDoneProgressParams::default(), | ||
438 | }, | 457 | }, |
439 | json!([]), | 458 | json!([]), |
440 | ); | 459 | ); |