sync_lsp/text_document/
did_change.rs1use crate::TypeProvider;
9use crate::{Server, connection::Endpoint};
10use crate::connection::Callback;
11use serde::Deserialize;
12use super::{VersionedTextDocumentIdentifier, Range};
13
14#[derive(Default, Clone)]
15pub(crate) struct DidChangeOptions;
16
17#[derive(Deserialize, Debug)]
19#[serde(rename_all = "camelCase")]
20pub struct TextDocumentContentChangeEvent {
21 pub range: Option<Range>,
23 pub range_length: Option<i32>,
25 pub text: String,
27}
28
29#[derive(Deserialize)]
30#[serde(rename_all = "camelCase")]
31struct DidChangeTextDocumentParams {
32 text_document: VersionedTextDocumentIdentifier,
33 content_changes: Vec<TextDocumentContentChangeEvent>
34}
35
36impl DidChangeOptions {
37
38 pub(crate) const METHOD: &'static str = "textDocument/didChange";
39
40 pub(super) fn endpoint<T: TypeProvider>() -> Endpoint<T, DidChangeOptions> {
41 Endpoint::new(Callback::notification(|_, _: DidChangeTextDocumentParams| ()))
42 }
43}
44
45impl<T: TypeProvider> Server<T> {
46
47 pub fn on_change(&mut self, callback: fn(&mut Server<T>, VersionedTextDocumentIdentifier, Vec<TextDocumentContentChangeEvent>)) {
56 self.text_document.did_change.set_callback(Callback::notification(move |server, params: DidChangeTextDocumentParams| {
57 callback(server, params.text_document, params.content_changes)
58 }));
59 }
60}