sync_lsp/text_document/
publish_diagnostics.rs1use serde::{Serialize, Deserialize};
8use serde_repr::{Serialize_repr, Deserialize_repr};
9
10use crate::{Connection, TypeProvider};
11use crate::connection::RpcConnection;
12
13use super::{DocumentUri, Range};
14
15#[derive(Default, Clone)]
16pub(super) struct PublishDiagnostics;
17
18#[derive(Deserialize, Serialize, Debug)]
20pub struct Diagnostic {
21 pub range: Range,
23 pub severity: Option<DiagnosticSeverity>,
25 pub code: Option<String>,
27 pub source: Option<String>,
29 pub message: String,
31}
32
33#[repr(i32)]
35#[derive(Deserialize_repr, Serialize_repr, Debug)]
36pub enum DiagnosticSeverity {
37 Error = 1,
38 Warning = 2,
39 Information = 3,
40 Hint = 4
41}
42
43#[derive(Serialize)]
44struct PublishDiagnosticsParams {
45 uri: DocumentUri,
46 diagnostics: Vec<Diagnostic>
47}
48
49impl PublishDiagnostics {
50 const METHOD: &'static str = "textDocument/publishDiagnostics";
51}
52
53impl<T: TypeProvider> Connection<T> {
54
55 pub fn publish_diagnostics(&mut self, uri: DocumentUri, diagnostics: Vec<Diagnostic>) {
62 self.notify(
63 PublishDiagnostics::METHOD,
64 PublishDiagnosticsParams {
65 uri,
66 diagnostics
67 }
68 );
69 }
70}