aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_lsp_server
diff options
context:
space:
mode:
authorJeremy Kolb <[email protected]>2019-12-11 14:11:55 +0000
committerJeremy Kolb <[email protected]>2019-12-11 14:11:55 +0000
commitfcccf8ec59420d20edc53f7d787f2412e297f5fe (patch)
tree0d36b4b4d3f1f8f6d788c24a6b2089178619c81d /crates/ra_lsp_server
parent5202b0ecbaab2d44e886828f0e30dee67fad0c5c (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.toml2
-rw-r--r--crates/ra_lsp_server/src/caps.rs7
-rw-r--r--crates/ra_lsp_server/src/main_loop.rs3
-rw-r--r--crates/ra_lsp_server/src/main_loop/handlers.rs5
-rw-r--r--crates/ra_lsp_server/tests/heavy_tests/main.rs21
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"
14serde = { version = "1.0.83", features = ["derive"] } 14serde = { version = "1.0.83", features = ["derive"] }
15crossbeam-channel = "0.4" 15crossbeam-channel = "0.4"
16log = "0.4.3" 16log = "0.4.3"
17lsp-types = { version = "0.61.0", features = ["proposed"] } 17lsp-types = { version = "0.63.0", features = ["proposed"] }
18rustc-hash = "1.0" 18rustc-hash = "1.0"
19parking_lot = "0.10.0" 19parking_lot = "0.10.0"
20jod-thread = "0.1.0" 20jod-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
11pub fn server_capabilities() -> ServerCapabilities { 11pub 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
836pub fn publish_decorations( 839pub 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
5use lsp_types::{ 5use 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};
9use ra_lsp_server::req::{ 10use 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 );