ls_types/
document_symbols.rs1use crate::{
2 Location, PartialResultParams, Range, SymbolKind, SymbolKindCapability, TextDocumentIdentifier,
3 WorkDoneProgressParams,
4};
5
6use crate::{SymbolTag, TagSupport};
7
8use serde::{Deserialize, Serialize};
9
10#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
11#[serde(rename_all = "camelCase")]
12pub struct DocumentSymbolClientCapabilities {
13 #[serde(skip_serializing_if = "Option::is_none")]
15 pub dynamic_registration: Option<bool>,
16
17 #[serde(skip_serializing_if = "Option::is_none")]
19 pub symbol_kind: Option<SymbolKindCapability>,
20
21 #[serde(skip_serializing_if = "Option::is_none")]
23 pub hierarchical_document_symbol_support: Option<bool>,
24
25 #[serde(
31 default,
32 skip_serializing_if = "Option::is_none",
33 deserialize_with = "TagSupport::deserialize_compat"
34 )]
35 pub tag_support: Option<TagSupport<SymbolTag>>,
36
37 #[serde(skip_serializing_if = "Option::is_none")]
42 pub label_support: Option<bool>,
43}
44
45#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
46#[serde(untagged)]
47pub enum DocumentSymbolResponse {
48 Flat(Vec<SymbolInformation>),
49 Nested(Vec<DocumentSymbol>),
50}
51
52impl From<Vec<SymbolInformation>> for DocumentSymbolResponse {
53 fn from(info: Vec<SymbolInformation>) -> Self {
54 Self::Flat(info)
55 }
56}
57
58impl From<Vec<DocumentSymbol>> for DocumentSymbolResponse {
59 fn from(symbols: Vec<DocumentSymbol>) -> Self {
60 Self::Nested(symbols)
61 }
62}
63
64#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
65#[serde(rename_all = "camelCase")]
66pub struct DocumentSymbolParams {
67 pub text_document: TextDocumentIdentifier,
69
70 #[serde(flatten)]
71 pub work_done_progress_params: WorkDoneProgressParams,
72
73 #[serde(flatten)]
74 pub partial_result_params: PartialResultParams,
75}
76
77#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
83#[serde(rename_all = "camelCase")]
84pub struct DocumentSymbol {
85 pub name: String,
87 #[serde(skip_serializing_if = "Option::is_none")]
90 pub detail: Option<String>,
91 pub kind: SymbolKind,
93 #[serde(skip_serializing_if = "Option::is_none")]
97 pub tags: Option<Vec<SymbolTag>>,
98 #[serde(skip_serializing_if = "Option::is_none")]
100 #[deprecated(note = "Use tags instead")]
101 pub deprecated: Option<bool>,
102 pub range: Range,
106 pub selection_range: Range,
109 #[serde(skip_serializing_if = "Option::is_none")]
111 pub children: Option<Vec<DocumentSymbol>>,
112}
113
114#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
117#[serde(rename_all = "camelCase")]
118pub struct SymbolInformation {
119 pub name: String,
121
122 pub kind: SymbolKind,
124
125 #[serde(skip_serializing_if = "Option::is_none")]
129 pub tags: Option<Vec<SymbolTag>>,
130
131 #[serde(skip_serializing_if = "Option::is_none")]
133 #[deprecated(note = "Use tags instead")]
134 pub deprecated: Option<bool>,
135
136 pub location: Location,
138
139 #[serde(skip_serializing_if = "Option::is_none")]
141 pub container_name: Option<String>,
142}