1use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
8pub struct Position2D {
9 pub line: u32,
11 pub character: u32,
13}
14
15#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
17pub struct Range {
18 pub start: Position2D,
20 pub end: Position2D,
22}
23
24#[derive(Debug, Clone, Serialize, Deserialize)]
26pub struct Location {
27 pub uri: String,
29 pub range: Range,
31}
32
33#[derive(Debug, Clone, Serialize, Deserialize)]
35pub struct HoverResult {
36 pub contents: String,
38 pub range: Option<Range>,
40}
41
42#[derive(Debug, Clone, Serialize, Deserialize)]
44pub struct DefinitionResult {
45 pub locations: Vec<Location>,
47}
48
49#[derive(Debug, Clone, Serialize, Deserialize)]
51pub struct ReferencesResult {
52 pub locations: Vec<Location>,
54}
55
56#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
58#[serde(rename_all = "lowercase")]
59pub enum DiagnosticSeverity {
60 Error,
62 Warning,
64 Information,
66 Hint,
68}
69
70#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
72pub struct Diagnostic {
73 pub range: Range,
75 pub severity: DiagnosticSeverity,
77 pub message: String,
79 pub code: Option<String>,
81}
82
83#[derive(Debug, Clone, Serialize, Deserialize)]
85pub struct DiagnosticsResult {
86 pub diagnostics: Vec<Diagnostic>,
88}
89
90#[derive(Debug, Clone, Serialize, Deserialize)]
92pub struct TextEdit {
93 pub range: Range,
95 pub new_text: String,
97}
98
99#[derive(Debug, Clone, Serialize, Deserialize)]
101pub struct DocumentChanges {
102 pub uri: String,
104 pub edits: Vec<TextEdit>,
106}
107
108#[derive(Debug, Clone, Serialize, Deserialize)]
110pub struct RenameResult {
111 pub changes: Vec<DocumentChanges>,
113}
114
115#[derive(Debug, Clone, Serialize, Deserialize)]
117pub struct Completion {
118 pub label: String,
120 pub kind: Option<String>,
122 pub detail: Option<String>,
124 pub documentation: Option<String>,
126}
127
128#[derive(Debug, Clone, Serialize, Deserialize)]
130pub struct CompletionsResult {
131 pub items: Vec<Completion>,
133}
134
135#[derive(Debug, Clone, Serialize, Deserialize)]
137pub struct Symbol {
138 pub name: String,
140 pub kind: String,
142 pub range: Range,
144 pub selection_range: Range,
146 #[serde(skip_serializing_if = "Option::is_none")]
148 pub children: Option<Vec<Self>>,
149}
150
151#[derive(Debug, Clone, Serialize, Deserialize)]
153pub struct DocumentSymbolsResult {
154 pub symbols: Vec<Symbol>,
156}
157
158#[derive(Debug, Clone, Serialize, Deserialize)]
160pub struct FormatDocumentResult {
161 pub edits: Vec<TextEdit>,
163}
164
165#[derive(Debug, Clone, Serialize, Deserialize)]
167pub struct WorkspaceSymbol {
168 pub name: String,
170 pub kind: String,
172 pub location: Location,
174 #[serde(skip_serializing_if = "Option::is_none")]
176 pub container_name: Option<String>,
177}
178
179#[derive(Debug, Clone, Serialize, Deserialize)]
181pub struct WorkspaceSymbolResult {
182 pub symbols: Vec<WorkspaceSymbol>,
184}
185
186#[derive(Debug, Clone, Serialize, Deserialize)]
188pub struct CodeAction {
189 pub title: String,
191 #[serde(skip_serializing_if = "Option::is_none")]
193 pub kind: Option<String>,
194 #[serde(skip_serializing_if = "Vec::is_empty", default)]
196 pub diagnostics: Vec<Diagnostic>,
197 #[serde(skip_serializing_if = "Option::is_none")]
199 pub edit: Option<WorkspaceEditDescription>,
200 #[serde(skip_serializing_if = "Option::is_none")]
202 pub command: Option<CommandDescription>,
203 #[serde(default)]
205 pub is_preferred: bool,
206}
207
208#[derive(Debug, Clone, Serialize, Deserialize)]
210pub struct WorkspaceEditDescription {
211 pub changes: Vec<DocumentChanges>,
213}
214
215#[derive(Debug, Clone, Serialize, Deserialize)]
217pub struct CommandDescription {
218 pub title: String,
220 pub command: String,
222 #[serde(skip_serializing_if = "Vec::is_empty", default)]
224 pub arguments: Vec<serde_json::Value>,
225}
226
227#[derive(Debug, Clone, Serialize, Deserialize)]
229pub struct CodeActionsResult {
230 pub actions: Vec<CodeAction>,
232}
233
234#[derive(Debug, Clone, Serialize, Deserialize)]
236pub struct CallHierarchyItemResult {
237 pub name: String,
239 pub kind: u32,
241 #[serde(skip_serializing_if = "Option::is_none")]
243 pub detail: Option<String>,
244 pub uri: String,
246 pub range: Range,
248 #[serde(rename = "selectionRange")]
255 pub selection_range: Range,
256 #[serde(skip_serializing_if = "Option::is_none")]
258 pub data: Option<serde_json::Value>,
259}
260
261#[derive(Debug, Clone, Serialize, Deserialize)]
263pub struct CallHierarchyPrepareResult {
264 pub items: Vec<CallHierarchyItemResult>,
266}
267
268#[derive(Debug, Clone, Serialize, Deserialize)]
270pub struct IncomingCall {
271 pub from: CallHierarchyItemResult,
273 pub from_ranges: Vec<Range>,
275}
276
277#[derive(Debug, Clone, Serialize, Deserialize)]
279pub struct IncomingCallsResult {
280 pub calls: Vec<IncomingCall>,
282}
283
284#[derive(Debug, Clone, Serialize, Deserialize)]
286pub struct OutgoingCall {
287 pub to: CallHierarchyItemResult,
289 pub from_ranges: Vec<Range>,
291}
292
293#[derive(Debug, Clone, Serialize, Deserialize)]
295pub struct OutgoingCallsResult {
296 pub calls: Vec<OutgoingCall>,
298}
299
300#[derive(Debug, Clone, Serialize, Deserialize)]
302pub struct ServerLogsResult {
303 pub logs: Vec<crate::bridge::notifications::LogEntry>,
305}
306
307#[derive(Debug, Clone, Serialize, Deserialize)]
309pub struct ServerMessagesResult {
310 pub messages: Vec<crate::bridge::notifications::ServerMessage>,
312}
313
314#[derive(Debug, Clone, Serialize, Deserialize)]
316pub struct SignatureParameter {
317 pub label: String,
319 #[serde(skip_serializing_if = "Option::is_none")]
321 pub documentation: Option<String>,
322}
323
324#[derive(Debug, Clone, Serialize, Deserialize)]
326pub struct SignatureInfo {
327 pub label: String,
329 #[serde(skip_serializing_if = "Option::is_none")]
331 pub documentation: Option<String>,
332 pub parameters: Vec<SignatureParameter>,
334}
335
336#[derive(Debug, Clone, Serialize, Deserialize)]
338pub struct SignatureHelpResult {
339 pub signatures: Vec<SignatureInfo>,
341 #[serde(skip_serializing_if = "Option::is_none")]
343 pub active_signature: Option<u32>,
344 #[serde(skip_serializing_if = "Option::is_none")]
346 pub active_parameter: Option<u32>,
347}
348
349#[derive(Debug, Clone, Serialize, Deserialize)]
351pub struct LocationsResult {
352 pub locations: Vec<Location>,
354}
355
356#[derive(Debug, Clone, Serialize, Deserialize)]
358pub struct InlayHintEntry {
359 pub position: Position2D,
361 pub label: String,
363 #[serde(skip_serializing_if = "Option::is_none")]
365 pub kind: Option<u8>,
366 #[serde(skip_serializing_if = "Option::is_none")]
368 pub padding_left: Option<bool>,
369 #[serde(skip_serializing_if = "Option::is_none")]
371 pub padding_right: Option<bool>,
372 #[serde(skip_serializing_if = "Option::is_none")]
374 pub tooltip: Option<String>,
375}
376
377#[derive(Debug, Clone, Serialize, Deserialize)]
379pub struct InlayHintsResult {
380 pub hints: Vec<InlayHintEntry>,
382}