diff options
author | bors[bot] <bors[bot]@users.noreply.github.com> | 2018-10-15 17:41:57 +0100 |
---|---|---|
committer | bors[bot] <bors[bot]@users.noreply.github.com> | 2018-10-15 17:41:57 +0100 |
commit | e031b65f93f73164a5729cf81ff60299708bc931 (patch) | |
tree | 1a891b75af3b436549381e8726c48ec5028a8341 /crates/ra_lsp_server | |
parent | 8cec1d986161298dbe9cc53f5477e87bfe5d0f47 (diff) | |
parent | c9909f42ba4adf55b1e73e7118b48f1b10c80ac6 (diff) |
Merge #110
110: Signature help r=matklad a=kjeremy
@matklad Once this is in shape I would like to add tests. I think a separate PR should be done for returning documentation information and markdown.
Fixes #102
Co-authored-by: Jeremy A. Kolb <[email protected]>
Diffstat (limited to 'crates/ra_lsp_server')
-rw-r--r-- | crates/ra_lsp_server/src/caps.rs | 5 | ||||
-rw-r--r-- | crates/ra_lsp_server/src/main_loop/handlers.rs | 36 | ||||
-rw-r--r-- | crates/ra_lsp_server/src/main_loop/mod.rs | 1 | ||||
-rw-r--r-- | crates/ra_lsp_server/src/req.rs | 1 |
4 files changed, 42 insertions, 1 deletions
diff --git a/crates/ra_lsp_server/src/caps.rs b/crates/ra_lsp_server/src/caps.rs index 3c628f29c..5598ec75f 100644 --- a/crates/ra_lsp_server/src/caps.rs +++ b/crates/ra_lsp_server/src/caps.rs | |||
@@ -7,6 +7,7 @@ use languageserver_types::{ | |||
7 | TextDocumentSyncKind, | 7 | TextDocumentSyncKind, |
8 | ExecuteCommandOptions, | 8 | ExecuteCommandOptions, |
9 | CompletionOptions, | 9 | CompletionOptions, |
10 | SignatureHelpOptions, | ||
10 | DocumentOnTypeFormattingOptions, | 11 | DocumentOnTypeFormattingOptions, |
11 | }; | 12 | }; |
12 | 13 | ||
@@ -26,7 +27,9 @@ pub fn server_capabilities() -> ServerCapabilities { | |||
26 | resolve_provider: None, | 27 | resolve_provider: None, |
27 | trigger_characters: None, | 28 | trigger_characters: None, |
28 | }), | 29 | }), |
29 | signature_help_provider: None, | 30 | signature_help_provider: Some(SignatureHelpOptions { |
31 | trigger_characters: Some(vec!["(".to_string(), ",".to_string()]) | ||
32 | }), | ||
30 | definition_provider: Some(true), | 33 | definition_provider: Some(true), |
31 | type_definition_provider: None, | 34 | type_definition_provider: None, |
32 | implementation_provider: None, | 35 | implementation_provider: None, |
diff --git a/crates/ra_lsp_server/src/main_loop/handlers.rs b/crates/ra_lsp_server/src/main_loop/handlers.rs index ab8be15e9..f65e2a889 100644 --- a/crates/ra_lsp_server/src/main_loop/handlers.rs +++ b/crates/ra_lsp_server/src/main_loop/handlers.rs | |||
@@ -411,6 +411,42 @@ pub fn handle_folding_range( | |||
411 | Ok(res) | 411 | Ok(res) |
412 | } | 412 | } |
413 | 413 | ||
414 | pub fn handle_signature_help( | ||
415 | world: ServerWorld, | ||
416 | params: req::TextDocumentPositionParams, | ||
417 | token: JobToken, | ||
418 | ) -> Result<Option<req::SignatureHelp>> { | ||
419 | use languageserver_types::{ParameterInformation, SignatureInformation}; | ||
420 | |||
421 | let file_id = params.text_document.try_conv_with(&world)?; | ||
422 | let line_index = world.analysis().file_line_index(file_id); | ||
423 | let offset = params.position.conv_with(&line_index); | ||
424 | |||
425 | if let Some((descriptor, active_param)) = world.analysis().resolve_callable(file_id, offset, &token) { | ||
426 | let parameters : Vec<ParameterInformation> = | ||
427 | descriptor.params.iter().map(|param| | ||
428 | ParameterInformation { | ||
429 | label: param.clone(), | ||
430 | documentation: None | ||
431 | } | ||
432 | ).collect(); | ||
433 | |||
434 | let sig_info = SignatureInformation { | ||
435 | label: descriptor.label, | ||
436 | documentation: None, | ||
437 | parameters: Some(parameters) | ||
438 | }; | ||
439 | |||
440 | Ok(Some(req::SignatureHelp { | ||
441 | signatures: vec![sig_info], | ||
442 | active_signature: Some(0), | ||
443 | active_parameter: active_param.map(|a| a as u64) | ||
444 | })) | ||
445 | } else { | ||
446 | Ok(None) | ||
447 | } | ||
448 | } | ||
449 | |||
414 | pub fn handle_code_action( | 450 | pub fn handle_code_action( |
415 | world: ServerWorld, | 451 | world: ServerWorld, |
416 | params: req::CodeActionParams, | 452 | params: req::CodeActionParams, |
diff --git a/crates/ra_lsp_server/src/main_loop/mod.rs b/crates/ra_lsp_server/src/main_loop/mod.rs index 402615e42..f4e7cfc33 100644 --- a/crates/ra_lsp_server/src/main_loop/mod.rs +++ b/crates/ra_lsp_server/src/main_loop/mod.rs | |||
@@ -255,6 +255,7 @@ fn on_request( | |||
255 | .on::<req::Completion>(handlers::handle_completion)? | 255 | .on::<req::Completion>(handlers::handle_completion)? |
256 | .on::<req::CodeActionRequest>(handlers::handle_code_action)? | 256 | .on::<req::CodeActionRequest>(handlers::handle_code_action)? |
257 | .on::<req::FoldingRangeRequest>(handlers::handle_folding_range)? | 257 | .on::<req::FoldingRangeRequest>(handlers::handle_folding_range)? |
258 | .on::<req::SignatureHelpRequest>(handlers::handle_signature_help)? | ||
258 | .finish(); | 259 | .finish(); |
259 | match req { | 260 | match req { |
260 | Ok((id, handle)) => { | 261 | Ok((id, handle)) => { |
diff --git a/crates/ra_lsp_server/src/req.rs b/crates/ra_lsp_server/src/req.rs index f80957589..1630edf7f 100644 --- a/crates/ra_lsp_server/src/req.rs +++ b/crates/ra_lsp_server/src/req.rs | |||
@@ -14,6 +14,7 @@ pub use languageserver_types::{ | |||
14 | CompletionParams, CompletionResponse, | 14 | CompletionParams, CompletionResponse, |
15 | DocumentOnTypeFormattingParams, | 15 | DocumentOnTypeFormattingParams, |
16 | TextDocumentEdit, | 16 | TextDocumentEdit, |
17 | SignatureHelp, Hover | ||
17 | }; | 18 | }; |
18 | 19 | ||
19 | pub enum SyntaxTree {} | 20 | pub enum SyntaxTree {} |