sync_lsp/text_document/
document_highlight.rs1use crate::TypeProvider;
9use crate::{Server, connection::Endpoint};
10use crate::connection::Callback;
11use super::{TextDocumentIdentifer, Position, Range, TextDocumentPositionParams};
12use serde::Serialize;
13use serde_repr::Serialize_repr;
14
15#[derive(Default, Clone)]
16pub(crate) struct DocumentHighlightOptions;
17
18#[derive(Serialize, Debug)]
20#[serde(rename_all = "camelCase")]
21pub struct DocumentHighlight {
22 pub range: Range,
24 pub kind: Option<DocumentHighlightKind>
26}
27
28#[repr(i32)]
30#[derive(Serialize_repr, Debug)]
31pub enum DocumentHighlightKind {
32 Text = 1,
34 Read = 2,
36 Write = 3
38}
39
40impl DocumentHighlightOptions {
41
42 pub(crate) const METHOD: &'static str = "textDocument/documentHighlight";
43
44 pub(super) fn endpoint<T: TypeProvider>() -> Endpoint<T, DocumentHighlightOptions> {
45 Endpoint::new(Callback::request(|_, _: TextDocumentPositionParams| Vec::<DocumentHighlight>::new()))
46 }
47}
48
49impl<T: TypeProvider> Server<T> {
50
51 pub fn on_document_highlight(&mut self, callback: fn(&mut Server<T>, TextDocumentIdentifer, Position) -> Vec<DocumentHighlight>) {
61 self.text_document.document_highlight.set_callback(Callback::request(move |server, params: TextDocumentPositionParams| {
62 callback(server, params.text_document, params.position)
63 }))
64 }
65}