1use serde::{Deserialize, Serialize};
2
3use crate::{
4 Documentation, MarkupKind, TextDocumentPositionParams, TextDocumentRegistrationOptions,
5 WorkDoneProgressOptions, WorkDoneProgressParams, macros::lsp_enum,
6};
7
8#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
9#[serde(rename_all = "camelCase")]
10pub struct SignatureInformationSettings {
11 #[serde(skip_serializing_if = "Option::is_none")]
14 pub documentation_format: Option<Vec<MarkupKind>>,
15
16 #[serde(skip_serializing_if = "Option::is_none")]
17 pub parameter_information: Option<ParameterInformationSettings>,
18
19 #[serde(skip_serializing_if = "Option::is_none")]
24 pub active_parameter_support: Option<bool>,
25}
26
27#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
28#[serde(rename_all = "camelCase")]
29pub struct ParameterInformationSettings {
30 #[serde(skip_serializing_if = "Option::is_none")]
35 pub label_offset_support: Option<bool>,
36}
37
38#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
39#[serde(rename_all = "camelCase")]
40pub struct SignatureHelpClientCapabilities {
41 #[serde(skip_serializing_if = "Option::is_none")]
43 pub dynamic_registration: Option<bool>,
44
45 #[serde(skip_serializing_if = "Option::is_none")]
48 pub signature_information: Option<SignatureInformationSettings>,
49
50 #[serde(skip_serializing_if = "Option::is_none")]
57 pub context_support: Option<bool>,
58}
59
60#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
62#[serde(rename_all = "camelCase")]
63pub struct SignatureHelpOptions {
64 #[serde(skip_serializing_if = "Option::is_none")]
66 pub trigger_characters: Option<Vec<String>>,
67
68 #[serde(skip_serializing_if = "Option::is_none")]
72 pub retrigger_characters: Option<Vec<String>>,
73
74 #[serde(flatten)]
75 pub work_done_progress_options: WorkDoneProgressOptions,
76}
77
78#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
80pub struct SignatureHelpRegistrationOptions {
81 #[serde(flatten)]
82 pub text_document_registration_options: TextDocumentRegistrationOptions,
83}
84
85#[derive(Clone, PartialEq, Eq, Deserialize, Serialize)]
87#[serde(transparent)]
88pub struct SignatureHelpTriggerKind(i32);
89
90lsp_enum! {
91 impl SignatureHelpTriggerKind {
92 const INVOKED = 1;
94 const TRIGGER_CHARACTER = 2;
96 const CONTENT_CHANGE = 3;
98 }
99}
100
101#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
102#[serde(rename_all = "camelCase")]
103pub struct SignatureHelpParams {
104 #[serde(skip_serializing_if = "Option::is_none")]
107 pub context: Option<SignatureHelpContext>,
108
109 #[serde(flatten)]
110 pub text_document_position_params: TextDocumentPositionParams,
111
112 #[serde(flatten)]
113 pub work_done_progress_params: WorkDoneProgressParams,
114}
115
116#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
117#[serde(rename_all = "camelCase")]
118pub struct SignatureHelpContext {
119 pub trigger_kind: SignatureHelpTriggerKind,
121
122 #[serde(skip_serializing_if = "Option::is_none")]
125 pub trigger_character: Option<String>,
126
127 pub is_retrigger: bool,
131
132 #[serde(skip_serializing_if = "Option::is_none")]
136 pub active_signature_help: Option<SignatureHelp>,
137}
138
139#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
143#[serde(rename_all = "camelCase")]
144pub struct SignatureHelp {
145 pub signatures: Vec<SignatureInformation>,
147
148 #[serde(skip_serializing_if = "Option::is_none")]
150 pub active_signature: Option<u32>,
151
152 #[serde(skip_serializing_if = "Option::is_none")]
154 pub active_parameter: Option<u32>,
155}
156
157#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
161#[serde(rename_all = "camelCase")]
162pub struct SignatureInformation {
163 pub label: String,
166
167 #[serde(skip_serializing_if = "Option::is_none")]
170 pub documentation: Option<Documentation>,
171
172 #[serde(skip_serializing_if = "Option::is_none")]
174 pub parameters: Option<Vec<ParameterInformation>>,
175
176 #[serde(skip_serializing_if = "Option::is_none")]
182 pub active_parameter: Option<u32>,
183}
184
185#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
188#[serde(rename_all = "camelCase")]
189pub struct ParameterInformation {
190 pub label: ParameterLabel,
196
197 #[serde(skip_serializing_if = "Option::is_none")]
200 pub documentation: Option<Documentation>,
201}
202
203#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
204#[serde(untagged)]
205pub enum ParameterLabel {
206 Simple(String),
207 LabelOffsets([u32; 2]),
208}