module; export module lsp.protocol.text_document.diagnostics; import std; import lsp.protocol.common.basic_types; import lsp.protocol.text_document.document_sync; import lsp.protocol.window.progress; import lsp.protocol.common.registration; export namespace lsp::protocol { enum class DiagnosticSeverity { Error = 1, Warning = 2, Information = 3, Hint = 4 }; enum class DiagnosticTag { Unnecessary = 1, Deprecated = 2 }; struct DiagnosticRelatedInformation { Location location; string message; }; struct CodeDescription { string href; }; struct Diagnostic { Range range; std::optional severity; std::optional code; std::optional codeDescription; std::optional source; std::variant message; std::optional> tags; std::optional> relatedInformation; std::optional data; }; struct ClientDiagnosticsTagOptions { std::vector valueSet; }; struct DiagnosticClientCapabilities { std::optional dynamicRegistration; std::optional relatedDocumentSupport; std::optional relatedInformation; std::optional tagSupport; std::optional codeDescriptionSupport; std::optional markupMessageSupport; std::optional dataSupport; }; struct DiagnosticOptions : WorkDoneProgressOptions { std::optional identifier; boolean interFileDependencies; boolean workspaceDiagnostics; }; struct DiagnosticRegistrationOptions : TextDocumentRegistrationOptions, DiagnosticOptions, StaticRegistrationOptions { }; struct DiagnosticParams : WorkDoneProgressParams, PartialResultParams { TextDocumentIdentifier textDocument; std::optional identifier; std::optional previousResultId; }; struct PublishDiagnosticsClientCapabilities : DiagnosticClientCapabilities { std::optional versionSupport; }; struct PublishDiagnosticsParams { DocumentUri uri; std::optional version; std::vector diagnostics; }; using DocumentDiagnosticReportKind = std::string_view; namespace DocumentDiagnosticReportKindLiterals { inline constexpr DocumentDiagnosticReportKind Full = "full"; inline constexpr DocumentDiagnosticReportKind Unchanged = "unchanged"; } struct FullDocumentDiagnosticReport { DocumentDiagnosticReportKind kind = DocumentDiagnosticReportKindLiterals::Full; std::optional resultId; std::vector items; }; struct UnchangedDocumentDiagnosticReport { DocumentDiagnosticReportKind kind = DocumentDiagnosticReportKindLiterals::Unchanged; std::optional resultId; }; struct RelatedFullDocumentDiagnosticReport : FullDocumentDiagnosticReport { std::optional>> relatedDocuments; }; struct RelatedUnchangedDocumentDiagnosticReport : UnchangedDocumentDiagnosticReport { std::optional>> relatedDocuments; }; struct DocumentDiagnosticReportPartialResult { std::optional>> relatedDocuments; }; using DocumentDiagnosticReport = std::variant; struct DiagnosticServerCancellationData { std::optional retriggerRequest; }; struct PreviousResultId { DocumentUri uri; string value; }; struct WorkspaceDiagnosticParams : WorkDoneProgressParams, PartialResultParams { std::optional identifier; std::vector previousResultIds; }; struct WorkspaceFullDocumentDiagnosticReport : FullDocumentDiagnosticReport { DocumentUri uri; std::optional version; }; struct WorkspaceUnchangedDocumentDiagnosticReport : UnchangedDocumentDiagnosticReport { DocumentUri uri; std::optional version; }; using WorkspaceDocumentDiagnosticReport = std::variant; struct WorkspaceDiagnosticReport { std::vector items; }; struct WorkspaceDiagnosticReportPartialResult { std::vector items; }; struct DiagnosticWorkspaceClientCapabilities { std::optional refreshSupport; }; }