1use serde::{Deserialize, Serialize};
2
3use crate::{
4 DynamicRegistrationClientCapabilities, PartialResultParams, Range, TextDocumentPositionParams,
5 WorkDoneProgressParams,
6};
7
8pub type DocumentHighlightClientCapabilities = DynamicRegistrationClientCapabilities;
9
10#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
11#[serde(rename_all = "camelCase")]
12pub struct DocumentHighlightParams {
13 #[serde(flatten)]
14 pub text_document_position_params: TextDocumentPositionParams,
15
16 #[serde(flatten)]
17 pub work_done_progress_params: WorkDoneProgressParams,
18
19 #[serde(flatten)]
20 pub partial_result_params: PartialResultParams,
21}
22
23/// A document highlight is a range inside a text document which deserves
24/// special attention. Usually a document highlight is visualized by changing
25/// the background color of its range.
26#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
27pub struct DocumentHighlight {
28 /// The range this highlight applies to.
29 pub range: Range,
30
31 /// The highlight kind, default is DocumentHighlightKind.Text.
32 #[serde(skip_serializing_if = "Option::is_none")]
33 pub kind: Option<DocumentHighlightKind>,
34}
35
36/// A document highlight kind.
37#[derive(Eq, PartialEq, Copy, Clone, Deserialize, Serialize)]
38#[serde(transparent)]
39pub struct DocumentHighlightKind(i32);
40lsp_enum! {
41impl DocumentHighlightKind {
42 /// A textual occurrence.
43 pub const TEXT: DocumentHighlightKind = DocumentHighlightKind(1);
44
45 /// Read-access of a symbol, like reading a variable.
46 pub const READ: DocumentHighlightKind = DocumentHighlightKind(2);
47
48 /// Write-access of a symbol, like writing to a variable.
49 pub const WRITE: DocumentHighlightKind = DocumentHighlightKind(3);
50}
51}
52