1use schemars::JsonSchema;
5use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
9pub struct Position2D {
10 pub line: u32,
12 pub character: u32,
14}
15
16#[derive(Debug, Clone, Copy, PartialEq, Eq)]
25pub struct Position {
26 pub line: u32,
28 pub character: u32,
30}
31
32#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
34pub struct Range {
35 pub start: Position2D,
37 pub end: Position2D,
39}
40
41#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
43pub struct Location {
44 pub uri: String,
46 pub range: Range,
48}
49
50#[derive(Debug, Clone, Serialize, Deserialize)]
52pub struct HoverResult {
53 pub contents: String,
55 pub range: Option<Range>,
57}
58
59#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
61pub struct DefinitionResult {
62 pub locations: Vec<Location>,
64}
65
66#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
68pub struct ReferencesResult {
69 pub locations: Vec<Location>,
71}
72
73#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
75#[serde(rename_all = "lowercase")]
76pub enum DiagnosticSeverity {
77 Error,
79 Warning,
81 Information,
83 Hint,
85}
86
87#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
89pub struct Diagnostic {
90 pub range: Range,
92 pub severity: DiagnosticSeverity,
94 pub message: String,
96 pub code: Option<String>,
98}
99
100#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
102pub struct DiagnosticsResult {
103 pub diagnostics: Vec<Diagnostic>,
105}
106
107#[derive(Debug, Clone, Serialize, Deserialize)]
109pub struct TextEdit {
110 pub range: Range,
112 pub new_text: String,
114}
115
116#[derive(Debug, Clone, Serialize, Deserialize)]
118pub struct DocumentChanges {
119 pub uri: String,
121 pub edits: Vec<TextEdit>,
123}
124
125#[derive(Debug, Clone, Serialize, Deserialize)]
127pub struct RenameResult {
128 pub changes: Vec<DocumentChanges>,
130}
131
132#[derive(Debug, Clone, Serialize, Deserialize)]
134pub struct Completion {
135 pub label: String,
137 pub kind: Option<String>,
139 pub detail: Option<String>,
141 pub documentation: Option<String>,
143}
144
145#[derive(Debug, Clone, Serialize, Deserialize)]
147pub struct CompletionsResult {
148 pub items: Vec<Completion>,
150}
151
152#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
154pub struct Symbol {
155 pub name: String,
157 pub kind: String,
159 pub range: Range,
161 pub selection_range: Range,
163 #[serde(skip_serializing_if = "Option::is_none")]
165 pub children: Option<Vec<Self>>,
166}
167
168#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
170pub struct DocumentSymbolsResult {
171 pub symbols: Vec<Symbol>,
173}
174
175#[derive(Debug, Clone, Serialize, Deserialize)]
177pub struct FormatDocumentResult {
178 pub edits: Vec<TextEdit>,
180}
181
182#[derive(Debug, Clone, Serialize, Deserialize)]
184pub struct WorkspaceSymbol {
185 pub name: String,
187 pub kind: String,
189 pub location: Location,
191 #[serde(skip_serializing_if = "Option::is_none")]
193 pub container_name: Option<String>,
194}
195
196#[derive(Debug, Clone, Serialize, Deserialize)]
198pub struct WorkspaceSymbolResult {
199 pub symbols: Vec<WorkspaceSymbol>,
201}
202
203#[derive(Debug, Clone, Serialize, Deserialize)]
205pub struct CodeAction {
206 pub title: String,
208 #[serde(skip_serializing_if = "Option::is_none")]
210 pub kind: Option<String>,
211 #[serde(skip_serializing_if = "Vec::is_empty", default)]
213 pub diagnostics: Vec<Diagnostic>,
214 #[serde(skip_serializing_if = "Option::is_none")]
216 pub edit: Option<WorkspaceEditDescription>,
217 #[serde(skip_serializing_if = "Option::is_none")]
219 pub command: Option<CommandDescription>,
220 #[serde(default)]
222 pub is_preferred: bool,
223}
224
225#[derive(Debug, Clone, Serialize, Deserialize)]
227pub struct WorkspaceEditDescription {
228 pub changes: Vec<DocumentChanges>,
230}
231
232#[derive(Debug, Clone, Serialize, Deserialize)]
234pub struct CommandDescription {
235 pub title: String,
237 pub command: String,
239 #[serde(skip_serializing_if = "Vec::is_empty", default)]
241 pub arguments: Vec<serde_json::Value>,
242}
243
244#[derive(Debug, Clone, Serialize, Deserialize)]
246pub struct CodeActionsResult {
247 pub actions: Vec<CodeAction>,
249}
250
251#[derive(Debug, Clone, Serialize, Deserialize)]
253pub struct CallHierarchyItemResult {
254 pub name: String,
256 pub kind: u32,
258 #[serde(skip_serializing_if = "Option::is_none")]
260 pub detail: Option<String>,
261 pub uri: String,
263 pub range: Range,
265 #[serde(rename = "selectionRange")]
272 pub selection_range: Range,
273 #[serde(skip_serializing_if = "Option::is_none")]
275 pub data: Option<serde_json::Value>,
276}
277
278#[derive(Debug, Clone, Serialize, Deserialize)]
280pub struct CallHierarchyPrepareResult {
281 pub items: Vec<CallHierarchyItemResult>,
283}
284
285#[derive(Debug, Clone, Serialize, Deserialize)]
287pub struct IncomingCall {
288 pub from: CallHierarchyItemResult,
290 pub from_ranges: Vec<Range>,
292}
293
294#[derive(Debug, Clone, Serialize, Deserialize)]
296pub struct IncomingCallsResult {
297 pub calls: Vec<IncomingCall>,
299}
300
301#[derive(Debug, Clone, Serialize, Deserialize)]
303pub struct OutgoingCall {
304 pub to: CallHierarchyItemResult,
306 pub from_ranges: Vec<Range>,
308}
309
310#[derive(Debug, Clone, Serialize, Deserialize)]
312pub struct OutgoingCallsResult {
313 pub calls: Vec<OutgoingCall>,
315}
316
317#[derive(Debug, Clone, Serialize, Deserialize)]
319pub struct ServerLogsResult {
320 pub logs: Vec<crate::bridge::notifications::LogEntry>,
322}
323
324#[derive(Debug, Clone, Serialize, Deserialize)]
326pub struct ServerMessagesResult {
327 pub messages: Vec<crate::bridge::notifications::ServerMessage>,
329}
330
331#[derive(Debug, Clone, Serialize, Deserialize)]
333pub struct SignatureParameter {
334 pub label: String,
336 #[serde(skip_serializing_if = "Option::is_none")]
338 pub documentation: Option<String>,
339}
340
341#[derive(Debug, Clone, Serialize, Deserialize)]
343pub struct SignatureInfo {
344 pub label: String,
346 #[serde(skip_serializing_if = "Option::is_none")]
348 pub documentation: Option<String>,
349 pub parameters: Vec<SignatureParameter>,
351}
352
353#[derive(Debug, Clone, Serialize, Deserialize)]
355pub struct SignatureHelpResult {
356 pub signatures: Vec<SignatureInfo>,
358 #[serde(skip_serializing_if = "Option::is_none")]
360 pub active_signature: Option<u32>,
361 #[serde(skip_serializing_if = "Option::is_none")]
363 pub active_parameter: Option<u32>,
364}
365
366#[derive(Debug, Clone, Serialize, Deserialize)]
368pub struct LocationsResult {
369 pub locations: Vec<Location>,
371}
372
373#[derive(Debug, Clone, Serialize, Deserialize)]
375pub struct InlayHintEntry {
376 pub position: Position2D,
378 pub label: String,
380 #[serde(skip_serializing_if = "Option::is_none")]
382 pub kind: Option<u8>,
383 #[serde(skip_serializing_if = "Option::is_none")]
385 pub padding_left: Option<bool>,
386 #[serde(skip_serializing_if = "Option::is_none")]
388 pub padding_right: Option<bool>,
389 #[serde(skip_serializing_if = "Option::is_none")]
391 pub tooltip: Option<String>,
392}
393
394#[derive(Debug, Clone, Serialize, Deserialize)]
396pub struct InlayHintsResult {
397 pub hints: Vec<InlayHintEntry>,
399}