1use std::collections::HashMap;
2
3use serde::{Deserialize, Serialize};
4
5use crate::{
6 Diagnostic, DiagnosticTag, PartialResultParams, StaticRegistrationOptions,
7 TextDocumentIdentifier, TextDocumentRegistrationOptions, Uri, WorkDoneProgressOptions,
8 WorkDoneProgressParams,
9};
10
11#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
15#[serde(rename_all = "camelCase")]
16pub struct DiagnosticClientCapabilities {
17 #[serde(skip_serializing_if = "Option::is_none")]
22 pub dynamic_registration: Option<bool>,
23
24 #[serde(skip_serializing_if = "Option::is_none")]
26 pub related_document_support: Option<bool>,
27
28 #[serde(skip_serializing_if = "Option::is_none")]
30 pub related_information: Option<bool>,
31
32 #[serde(skip_serializing_if = "Option::is_none")]
35 pub tag_support: Option<ClientDiagnosticsTagOptions>,
36
37 #[serde(skip_serializing_if = "Option::is_none")]
39 pub code_description_support: Option<bool>,
40
41 #[serde(skip_serializing_if = "Option::is_none")]
44 pub data_support: Option<bool>,
45}
46
47#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
49#[serde(rename_all = "camelCase")]
50pub struct ClientDiagnosticsTagOptions {
51 value_set: Vec<DiagnosticTag>,
53}
54
55#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
59#[serde(rename_all = "camelCase")]
60pub struct DiagnosticOptions {
61 #[serde(skip_serializing_if = "Option::is_none")]
64 pub identifier: Option<String>,
65
66 pub inter_file_dependencies: bool,
70
71 pub workspace_diagnostics: bool,
73
74 #[serde(flatten)]
75 pub work_done_progress_options: WorkDoneProgressOptions,
76}
77
78#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
82#[serde(rename_all = "camelCase")]
83pub struct DiagnosticRegistrationOptions {
84 #[serde(flatten)]
85 pub text_document_registration_options: TextDocumentRegistrationOptions,
86
87 #[serde(flatten)]
88 pub diagnostic_options: DiagnosticOptions,
89
90 #[serde(flatten)]
91 pub static_registration_options: StaticRegistrationOptions,
92}
93
94#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
95#[serde(untagged)]
96pub enum DiagnosticServerCapabilities {
97 Options(DiagnosticOptions),
98 RegistrationOptions(DiagnosticRegistrationOptions),
99}
100
101#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
105#[serde(rename_all = "camelCase")]
106pub struct DocumentDiagnosticParams {
107 pub text_document: TextDocumentIdentifier,
109
110 pub identifier: Option<String>,
112
113 pub previous_result_id: Option<String>,
115
116 #[serde(flatten)]
117 pub work_done_progress_params: WorkDoneProgressParams,
118
119 #[serde(flatten)]
120 pub partial_result_params: PartialResultParams,
121}
122
123#[derive(Debug, PartialEq, Eq, Default, Deserialize, Serialize, Clone)]
127#[serde(rename_all = "camelCase")]
128pub struct FullDocumentDiagnosticReport {
129 #[serde(skip_serializing_if = "Option::is_none")]
132 pub result_id: Option<String>,
133
134 pub items: Vec<Diagnostic>,
136}
137
138#[derive(Debug, PartialEq, Eq, Deserialize, Serialize, Clone)]
144#[serde(rename_all = "camelCase")]
145pub struct UnchangedDocumentDiagnosticReport {
146 pub result_id: String,
148}
149
150#[derive(Debug, PartialEq, Eq, Deserialize, Serialize, Clone)]
154#[serde(tag = "kind", rename_all = "lowercase")]
155pub enum DocumentDiagnosticReportKind {
156 Full(FullDocumentDiagnosticReport),
158 Unchanged(UnchangedDocumentDiagnosticReport),
160}
161
162impl From<FullDocumentDiagnosticReport> for DocumentDiagnosticReportKind {
163 fn from(from: FullDocumentDiagnosticReport) -> Self {
164 Self::Full(from)
165 }
166}
167
168impl From<UnchangedDocumentDiagnosticReport> for DocumentDiagnosticReportKind {
169 fn from(from: UnchangedDocumentDiagnosticReport) -> Self {
170 Self::Unchanged(from)
171 }
172}
173
174#[derive(Debug, PartialEq, Eq, Default, Deserialize, Serialize, Clone)]
178#[serde(rename_all = "camelCase")]
179pub struct RelatedFullDocumentDiagnosticReport {
180 #[serde(skip_serializing_if = "Option::is_none")]
188 #[serde(default)]
189 pub related_documents: Option<HashMap<Uri, DocumentDiagnosticReportKind>>,
190 #[serde(flatten)]
192 pub full_document_diagnostic_report: FullDocumentDiagnosticReport,
193}
194
195#[derive(Debug, PartialEq, Eq, Deserialize, Serialize, Clone)]
199#[serde(rename_all = "camelCase")]
200pub struct RelatedUnchangedDocumentDiagnosticReport {
201 #[serde(skip_serializing_if = "Option::is_none")]
209 #[serde(default)]
210 pub related_documents: Option<HashMap<Uri, DocumentDiagnosticReportKind>>,
211 #[serde(flatten)]
213 pub unchanged_document_diagnostic_report: UnchangedDocumentDiagnosticReport,
214}
215
216#[derive(Debug, PartialEq, Eq, Deserialize, Serialize, Clone)]
224#[serde(tag = "kind", rename_all = "lowercase")]
225pub enum DocumentDiagnosticReport {
226 Full(RelatedFullDocumentDiagnosticReport),
228 Unchanged(RelatedUnchangedDocumentDiagnosticReport),
230}
231
232impl From<RelatedFullDocumentDiagnosticReport> for DocumentDiagnosticReport {
233 fn from(from: RelatedFullDocumentDiagnosticReport) -> Self {
234 Self::Full(from)
235 }
236}
237
238impl From<RelatedUnchangedDocumentDiagnosticReport> for DocumentDiagnosticReport {
239 fn from(from: RelatedUnchangedDocumentDiagnosticReport) -> Self {
240 Self::Unchanged(from)
241 }
242}
243
244#[derive(Debug, PartialEq, Eq, Default, Deserialize, Serialize, Clone)]
248#[serde(rename_all = "camelCase")]
249pub struct DocumentDiagnosticReportPartialResult {
250 #[serde(skip_serializing_if = "Option::is_none")]
251 #[serde(default)]
252 pub related_documents: Option<HashMap<Uri, DocumentDiagnosticReportKind>>,
253 }
255
256#[derive(Debug, PartialEq, Eq, Deserialize, Serialize, Clone)]
257#[serde(untagged)]
258pub enum DocumentDiagnosticReportResult {
259 Report(DocumentDiagnosticReport),
260 Partial(DocumentDiagnosticReportPartialResult),
261}
262
263impl From<DocumentDiagnosticReport> for DocumentDiagnosticReportResult {
264 fn from(from: DocumentDiagnosticReport) -> Self {
265 Self::Report(from)
266 }
267}
268
269impl From<DocumentDiagnosticReportPartialResult> for DocumentDiagnosticReportResult {
270 fn from(from: DocumentDiagnosticReportPartialResult) -> Self {
271 Self::Partial(from)
272 }
273}
274
275#[derive(Debug, PartialEq, Eq, Deserialize, Serialize, Clone)]
281#[serde(rename_all = "camelCase")]
282pub struct DiagnosticServerCancellationData {
283 pub retrigger_request: bool,
284}
285
286impl Default for DiagnosticServerCancellationData {
287 fn default() -> Self {
288 Self {
289 retrigger_request: true,
290 }
291 }
292}