sync_lsp/text_document/
signature_help.rs1use crate::TypeProvider;
9use crate::{Server, connection::Endpoint};
10use crate::connection::Callback;
11use serde::Serialize;
12use super::{TextDocumentIdentifer, TextDocumentPositionParams, Position};
13
14#[derive(Serialize, Default, Clone)]
15#[serde(rename_all = "camelCase")]
16pub(crate) struct SignatureHelpOptions {
17 trigger_characters: Vec<String>
18}
19
20#[derive(Serialize, Debug, Default)]
22pub struct SignatureHelp {
23 pub signatures: Vec<SignatureInformation>,
25 pub active_signature: Option<u32>,
27 pub active_parameter: Option<u32>
29}
30
31#[derive(Serialize, Debug)]
33pub struct SignatureInformation {
34 pub label: String,
36 pub documentation: Option<String>,
38 #[serde(skip_serializing_if = "Vec::is_empty")]
40 pub parameters: Vec<ParameterInformation>
41}
42
43#[derive(Serialize, Debug)]
45pub struct ParameterInformation {
46 pub label: String,
48 pub documentation: Option<String>
50}
51
52impl SignatureHelpOptions {
53
54 pub(crate) const METHOD: &'static str = "textDocument/signatureHelp";
55
56 pub(super) fn endpoint<T: TypeProvider>() -> Endpoint<T, SignatureHelpOptions> {
57 Endpoint::new(Callback::request(|_, _: TextDocumentPositionParams| SignatureHelp::default()))
58 }
59}
60
61impl<T: TypeProvider> Server<T> {
62
63 pub fn on_signature_help(&mut self, callback: fn(&mut Server<T>, TextDocumentIdentifer, Position) -> SignatureHelp) {
73 self.text_document.signature_help.set_callback(Callback::request(move |server, params: TextDocumentPositionParams| {
74 callback(server, params.text_document, params.position)
75 }))
76 }
77
78 pub fn set_signature_help_trigger_characters(&mut self, value: Vec<String>) {
84 self.text_document.signature_help.options_mut().trigger_characters = value;
85 }
86}