use core::fmt;
use serde::{Deserialize, Serialize};
use crate::server::lsp::{
LspMessage,
rpc::NotificationMessageBase,
textdocument::{Range, VersionedTextDocumentIdentifier},
};
#[derive(Debug, Serialize, Deserialize, PartialEq)]
pub struct DidChangeTextDocumentNotification {
#[serde(flatten)]
base: NotificationMessageBase,
pub params: DidChangeTextDocumentParams,
}
impl LspMessage for DidChangeTextDocumentNotification {}
#[derive(Debug, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct DidChangeTextDocumentParams {
pub text_document: VersionedTextDocumentIdentifier,
pub content_changes: Vec<TextDocumentContentChangeEvent>,
}
#[derive(Debug, Serialize, Deserialize, PartialEq)]
pub struct TextDocumentContentChangeEvent {
pub range: Range,
pub text: String,
}
impl fmt::Display for TextDocumentContentChangeEvent {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(
f,
"{:?}; [{}-{}]",
self.text, self.range.start, self.range.end
)
}
}