1 | use serde::{Deserialize, Serialize}; |
2 | |
3 | use crate::{ |
4 | Documentation, MarkupKind, TextDocumentPositionParams, TextDocumentRegistrationOptions, |
5 | WorkDoneProgressOptions, WorkDoneProgressParams, |
6 | }; |
7 | |
8 | #[derive (Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)] |
9 | #[serde(rename_all = "camelCase" )] |
10 | pub struct SignatureInformationSettings { |
11 | /// Client supports the follow content formats for the documentation |
12 | /// property. The order describes the preferred format of the client. |
13 | #[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 | /// The client support the `activeParameter` property on `SignatureInformation` |
20 | /// literal. |
21 | /// |
22 | /// @since 3.16.0 |
23 | #[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" )] |
29 | pub struct ParameterInformationSettings { |
30 | /// The client supports processing label offsets instead of a |
31 | /// simple label string. |
32 | /// |
33 | /// @since 3.14.0 |
34 | #[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" )] |
40 | pub struct SignatureHelpClientCapabilities { |
41 | /// Whether completion supports dynamic registration. |
42 | #[serde(skip_serializing_if = "Option::is_none" )] |
43 | pub dynamic_registration: Option<bool>, |
44 | |
45 | /// The client supports the following `SignatureInformation` |
46 | /// specific properties. |
47 | #[serde(skip_serializing_if = "Option::is_none" )] |
48 | pub signature_information: Option<SignatureInformationSettings>, |
49 | |
50 | /// The client supports to send additional context information for a |
51 | /// `textDocument/signatureHelp` request. A client that opts into |
52 | /// contextSupport will also support the `retriggerCharacters` on |
53 | /// `SignatureHelpOptions`. |
54 | /// |
55 | /// @since 3.15.0 |
56 | #[serde(skip_serializing_if = "Option::is_none" )] |
57 | pub context_support: Option<bool>, |
58 | } |
59 | |
60 | /// Signature help options. |
61 | #[derive (Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)] |
62 | #[serde(rename_all = "camelCase" )] |
63 | pub struct SignatureHelpOptions { |
64 | /// The characters that trigger signature help automatically. |
65 | #[serde(skip_serializing_if = "Option::is_none" )] |
66 | pub trigger_characters: Option<Vec<String>>, |
67 | |
68 | /// List of characters that re-trigger signature help. |
69 | /// These trigger characters are only active when signature help is already showing. All trigger characters |
70 | /// are also counted as re-trigger characters. |
71 | #[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 | /// Signature help options. |
79 | #[derive (Debug, Eq, PartialEq, Clone, Deserialize, Serialize)] |
80 | pub struct SignatureHelpRegistrationOptions { |
81 | #[serde(flatten)] |
82 | pub text_document_registration_options: TextDocumentRegistrationOptions, |
83 | } |
84 | |
85 | /// Signature help options. |
86 | #[derive (Eq, PartialEq, Clone, Deserialize, Serialize)] |
87 | #[serde(transparent)] |
88 | pub struct SignatureHelpTriggerKind(i32); |
89 | lsp_enum! { |
90 | impl SignatureHelpTriggerKind { |
91 | /// Signature help was invoked manually by the user or by a command. |
92 | pub const INVOKED: SignatureHelpTriggerKind = SignatureHelpTriggerKind(1); |
93 | /// Signature help was triggered by a trigger character. |
94 | pub const TRIGGER_CHARACTER: SignatureHelpTriggerKind = SignatureHelpTriggerKind(2); |
95 | /// Signature help was triggered by the cursor moving or by the document content changing. |
96 | pub const CONTENT_CHANGE: SignatureHelpTriggerKind = SignatureHelpTriggerKind(3); |
97 | } |
98 | } |
99 | |
100 | #[derive (Debug, Eq, PartialEq, Clone, Deserialize, Serialize)] |
101 | #[serde(rename_all = "camelCase" )] |
102 | pub struct SignatureHelpParams { |
103 | /// The signature help context. This is only available if the client specifies |
104 | /// to send this using the client capability `textDocument.signatureHelp.contextSupport === true` |
105 | #[serde(skip_serializing_if = "Option::is_none" )] |
106 | pub context: Option<SignatureHelpContext>, |
107 | |
108 | #[serde(flatten)] |
109 | pub text_document_position_params: TextDocumentPositionParams, |
110 | |
111 | #[serde(flatten)] |
112 | pub work_done_progress_params: WorkDoneProgressParams, |
113 | } |
114 | |
115 | #[derive (Debug, Eq, PartialEq, Clone, Deserialize, Serialize)] |
116 | #[serde(rename_all = "camelCase" )] |
117 | pub struct SignatureHelpContext { |
118 | /// Action that caused signature help to be triggered. |
119 | pub trigger_kind: SignatureHelpTriggerKind, |
120 | |
121 | /// Character that caused signature help to be triggered. |
122 | /// This is undefined when `triggerKind !== SignatureHelpTriggerKind.TriggerCharacter` |
123 | #[serde(skip_serializing_if = "Option::is_none" )] |
124 | pub trigger_character: Option<String>, |
125 | |
126 | /// `true` if signature help was already showing when it was triggered. |
127 | /// Retriggers occur when the signature help is already active and can be caused by actions such as |
128 | /// typing a trigger character, a cursor move, or document content changes. |
129 | pub is_retrigger: bool, |
130 | |
131 | /// The currently active `SignatureHelp`. |
132 | /// The `activeSignatureHelp` has its `SignatureHelp.activeSignature` field updated based on |
133 | /// the user navigating through available signatures. |
134 | #[serde(skip_serializing_if = "Option::is_none" )] |
135 | pub active_signature_help: Option<SignatureHelp>, |
136 | } |
137 | |
138 | /// Signature help represents the signature of something |
139 | /// callable. There can be multiple signature but only one |
140 | /// active and only one active parameter. |
141 | #[derive (Debug, Eq, PartialEq, Clone, Deserialize, Serialize)] |
142 | #[serde(rename_all = "camelCase" )] |
143 | pub struct SignatureHelp { |
144 | /// One or more signatures. |
145 | pub signatures: Vec<SignatureInformation>, |
146 | |
147 | /// The active signature. |
148 | #[serde(skip_serializing_if = "Option::is_none" )] |
149 | pub active_signature: Option<u32>, |
150 | |
151 | /// The active parameter of the active signature. |
152 | #[serde(skip_serializing_if = "Option::is_none" )] |
153 | pub active_parameter: Option<u32>, |
154 | } |
155 | |
156 | /// Represents the signature of something callable. A signature |
157 | /// can have a label, like a function-name, a doc-comment, and |
158 | /// a set of parameters. |
159 | #[derive (Debug, Eq, PartialEq, Clone, Deserialize, Serialize)] |
160 | #[serde(rename_all = "camelCase" )] |
161 | pub struct SignatureInformation { |
162 | /// The label of this signature. Will be shown in |
163 | /// the UI. |
164 | pub label: String, |
165 | |
166 | /// The human-readable doc-comment of this signature. Will be shown |
167 | /// in the UI but can be omitted. |
168 | #[serde(skip_serializing_if = "Option::is_none" )] |
169 | pub documentation: Option<Documentation>, |
170 | |
171 | /// The parameters of this signature. |
172 | #[serde(skip_serializing_if = "Option::is_none" )] |
173 | pub parameters: Option<Vec<ParameterInformation>>, |
174 | |
175 | /// The index of the active parameter. |
176 | /// |
177 | /// If provided, this is used in place of `SignatureHelp.activeParameter`. |
178 | /// |
179 | /// @since 3.16.0 |
180 | #[serde(skip_serializing_if = "Option::is_none" )] |
181 | pub active_parameter: Option<u32>, |
182 | } |
183 | |
184 | /// Represents a parameter of a callable-signature. A parameter can |
185 | /// have a label and a doc-comment. |
186 | #[derive (Debug, Eq, PartialEq, Clone, Deserialize, Serialize)] |
187 | #[serde(rename_all = "camelCase" )] |
188 | pub struct ParameterInformation { |
189 | /// The label of this parameter information. |
190 | /// |
191 | /// Either a string or an inclusive start and exclusive end offsets within its containing |
192 | /// signature label. (see SignatureInformation.label). *Note*: A label of type string must be |
193 | /// a substring of its containing signature label. |
194 | pub label: ParameterLabel, |
195 | |
196 | /// The human-readable doc-comment of this parameter. Will be shown |
197 | /// in the UI but can be omitted. |
198 | #[serde(skip_serializing_if = "Option::is_none" )] |
199 | pub documentation: Option<Documentation>, |
200 | } |
201 | |
202 | #[derive (Debug, Eq, PartialEq, Clone, Deserialize, Serialize)] |
203 | #[serde(untagged)] |
204 | pub enum ParameterLabel { |
205 | Simple(String), |
206 | LabelOffsets([u32; 2]), |
207 | } |
208 | |