1use std::collections::HashMap;
2
3use serde::{Deserialize, Serialize};
4
5use crate::{
6 Diagnostic, PartialResultParams, StaticRegistrationOptions, TextDocumentIdentifier,
7 TextDocumentRegistrationOptions, Uri, WorkDoneProgressOptions, WorkDoneProgressParams,
8};
9
10#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
14#[serde(rename_all = "camelCase")]
15pub struct DiagnosticClientCapabilities {
16 #[serde(skip_serializing_if = "Option::is_none")]
21 pub dynamic_registration: Option<bool>,
22
23 #[serde(skip_serializing_if = "Option::is_none")]
25 pub related_document_support: Option<bool>,
26}
27
28#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
32#[serde(rename_all = "camelCase")]
33pub struct DiagnosticOptions {
34 #[serde(skip_serializing_if = "Option::is_none")]
37 pub identifier: Option<String>,
38
39 pub inter_file_dependencies: bool,
43
44 pub workspace_diagnostics: bool,
46
47 #[serde(flatten)]
48 pub work_done_progress_options: WorkDoneProgressOptions,
49}
50
51#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
55#[serde(rename_all = "camelCase")]
56pub struct DiagnosticRegistrationOptions {
57 #[serde(flatten)]
58 pub text_document_registration_options: TextDocumentRegistrationOptions,
59
60 #[serde(flatten)]
61 pub diagnostic_options: DiagnosticOptions,
62
63 #[serde(flatten)]
64 pub static_registration_options: StaticRegistrationOptions,
65}
66
67#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
68#[serde(untagged)]
69pub enum DiagnosticServerCapabilities {
70 Options(DiagnosticOptions),
71 RegistrationOptions(DiagnosticRegistrationOptions),
72}
73
74#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
78#[serde(rename_all = "camelCase")]
79pub struct DocumentDiagnosticParams {
80 pub text_document: TextDocumentIdentifier,
82
83 pub identifier: Option<String>,
85
86 pub previous_result_id: Option<String>,
88
89 #[serde(flatten)]
90 pub work_done_progress_params: WorkDoneProgressParams,
91
92 #[serde(flatten)]
93 pub partial_result_params: PartialResultParams,
94}
95
96#[derive(Debug, PartialEq, Default, Deserialize, Serialize, Clone)]
100#[serde(rename_all = "camelCase")]
101pub struct FullDocumentDiagnosticReport {
102 #[serde(skip_serializing_if = "Option::is_none")]
105 pub result_id: Option<String>,
106
107 pub items: Vec<Diagnostic>,
109}
110
111#[derive(Debug, PartialEq, Deserialize, Serialize, Clone)]
117#[serde(rename_all = "camelCase")]
118pub struct UnchangedDocumentDiagnosticReport {
119 pub result_id: String,
121}
122
123#[derive(Debug, PartialEq, Deserialize, Serialize, Clone)]
127#[serde(tag = "kind", rename_all = "lowercase")]
128pub enum DocumentDiagnosticReportKind {
129 Full(FullDocumentDiagnosticReport),
131 Unchanged(UnchangedDocumentDiagnosticReport),
133}
134
135impl From<FullDocumentDiagnosticReport> for DocumentDiagnosticReportKind {
136 fn from(from: FullDocumentDiagnosticReport) -> Self {
137 DocumentDiagnosticReportKind::Full(from)
138 }
139}
140
141impl From<UnchangedDocumentDiagnosticReport> for DocumentDiagnosticReportKind {
142 fn from(from: UnchangedDocumentDiagnosticReport) -> Self {
143 DocumentDiagnosticReportKind::Unchanged(from)
144 }
145}
146
147#[derive(Debug, PartialEq, Default, Deserialize, Serialize, Clone)]
151#[serde(rename_all = "camelCase")]
152pub struct RelatedFullDocumentDiagnosticReport {
153 #[serde(skip_serializing_if = "Option::is_none")]
161 #[serde(default)]
162 pub related_documents: Option<HashMap<Uri, DocumentDiagnosticReportKind>>,
163 #[serde(flatten)]
165 pub full_document_diagnostic_report: FullDocumentDiagnosticReport,
166}
167
168#[derive(Debug, PartialEq, Deserialize, Serialize, Clone)]
172#[serde(rename_all = "camelCase")]
173pub struct RelatedUnchangedDocumentDiagnosticReport {
174 #[serde(skip_serializing_if = "Option::is_none")]
182 #[serde(default)]
183 pub related_documents: Option<HashMap<Uri, DocumentDiagnosticReportKind>>,
184 #[serde(flatten)]
186 pub unchanged_document_diagnostic_report: UnchangedDocumentDiagnosticReport,
187}
188
189#[derive(Debug, PartialEq, Deserialize, Serialize, Clone)]
197#[serde(tag = "kind", rename_all = "lowercase")]
198pub enum DocumentDiagnosticReport {
199 Full(RelatedFullDocumentDiagnosticReport),
201 Unchanged(RelatedUnchangedDocumentDiagnosticReport),
203}
204
205impl From<RelatedFullDocumentDiagnosticReport> for DocumentDiagnosticReport {
206 fn from(from: RelatedFullDocumentDiagnosticReport) -> Self {
207 DocumentDiagnosticReport::Full(from)
208 }
209}
210
211impl From<RelatedUnchangedDocumentDiagnosticReport> for DocumentDiagnosticReport {
212 fn from(from: RelatedUnchangedDocumentDiagnosticReport) -> Self {
213 DocumentDiagnosticReport::Unchanged(from)
214 }
215}
216
217#[derive(Debug, PartialEq, Default, Deserialize, Serialize, Clone)]
221#[serde(rename_all = "camelCase")]
222pub struct DocumentDiagnosticReportPartialResult {
223 #[serde(skip_serializing_if = "Option::is_none")]
224 #[serde(default)]
225 pub related_documents: Option<HashMap<Uri, DocumentDiagnosticReportKind>>,
226 }
228
229#[derive(Debug, PartialEq, Deserialize, Serialize, Clone)]
230#[serde(untagged)]
231pub enum DocumentDiagnosticReportResult {
232 Report(DocumentDiagnosticReport),
233 Partial(DocumentDiagnosticReportPartialResult),
234}
235
236impl From<DocumentDiagnosticReport> for DocumentDiagnosticReportResult {
237 fn from(from: DocumentDiagnosticReport) -> Self {
238 DocumentDiagnosticReportResult::Report(from)
239 }
240}
241
242impl From<DocumentDiagnosticReportPartialResult> for DocumentDiagnosticReportResult {
243 fn from(from: DocumentDiagnosticReportPartialResult) -> Self {
244 DocumentDiagnosticReportResult::Partial(from)
245 }
246}
247
248#[derive(Debug, PartialEq, Deserialize, Serialize, Clone)]
254#[serde(rename_all = "camelCase")]
255pub struct DiagnosticServerCancellationData {
256 pub retrigger_request: bool,
257}
258
259impl Default for DiagnosticServerCancellationData {
260 fn default() -> Self {
261 DiagnosticServerCancellationData {
262 retrigger_request: true,
263 }
264 }
265}