ls_types/
folding_range.rs1use crate::{
2 PartialResultParams, StaticTextDocumentColorProviderOptions, TextDocumentIdentifier,
3 WorkDoneProgressParams,
4};
5use serde::{Deserialize, Serialize};
6#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
7#[serde(rename_all = "camelCase")]
8pub struct FoldingRangeParams {
9 pub text_document: TextDocumentIdentifier,
11
12 #[serde(flatten)]
13 pub work_done_progress_params: WorkDoneProgressParams,
14
15 #[serde(flatten)]
16 pub partial_result_params: PartialResultParams,
17}
18
19#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
20#[serde(untagged)]
21pub enum FoldingRangeProviderCapability {
22 Simple(bool),
23 FoldingProvider(FoldingProviderOptions),
24 Options(StaticTextDocumentColorProviderOptions),
25}
26
27impl From<StaticTextDocumentColorProviderOptions> for FoldingRangeProviderCapability {
28 fn from(from: StaticTextDocumentColorProviderOptions) -> Self {
29 Self::Options(from)
30 }
31}
32
33impl From<FoldingProviderOptions> for FoldingRangeProviderCapability {
34 fn from(from: FoldingProviderOptions) -> Self {
35 Self::FoldingProvider(from)
36 }
37}
38
39impl From<bool> for FoldingRangeProviderCapability {
40 fn from(from: bool) -> Self {
41 Self::Simple(from)
42 }
43}
44
45#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
46pub struct FoldingProviderOptions {}
47
48#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
49#[serde(rename_all = "camelCase")]
50pub struct FoldingRangeKindCapability {
51 #[serde(skip_serializing_if = "Option::is_none")]
55 pub value_set: Option<Vec<FoldingRangeKind>>,
56}
57
58#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
59#[serde(rename_all = "camelCase")]
60pub struct FoldingRangeCapability {
61 #[serde(skip_serializing_if = "Option::is_none")]
66 pub collapsed_text: Option<bool>,
67}
68
69#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
70#[serde(rename_all = "camelCase")]
71pub struct FoldingRangeClientCapabilities {
72 #[serde(skip_serializing_if = "Option::is_none")]
78 pub dynamic_registration: Option<bool>,
79
80 #[serde(skip_serializing_if = "Option::is_none")]
84 pub range_limit: Option<u32>,
85
86 #[serde(skip_serializing_if = "Option::is_none")]
90 pub line_folding_only: Option<bool>,
91
92 #[serde(skip_serializing_if = "Option::is_none")]
96 pub folding_range_kind: Option<FoldingRangeKindCapability>,
97
98 #[serde(skip_serializing_if = "Option::is_none")]
102 pub folding_range: Option<FoldingRangeCapability>,
103}
104
105#[derive(Debug, Eq, PartialEq, Deserialize, Serialize, Clone)]
107#[serde(rename_all = "lowercase")]
108pub enum FoldingRangeKind {
109 Comment,
111 Imports,
113 Region,
115}
116
117#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
119#[serde(rename_all = "camelCase")]
120pub struct FoldingRange {
121 pub start_line: u32,
125
126 #[serde(skip_serializing_if = "Option::is_none")]
129 pub start_character: Option<u32>,
130
131 pub end_line: u32,
135
136 #[serde(skip_serializing_if = "Option::is_none")]
139 pub end_character: Option<u32>,
140
141 #[serde(skip_serializing_if = "Option::is_none")]
146 pub kind: Option<FoldingRangeKind>,
147
148 #[serde(skip_serializing_if = "Option::is_none")]
154 pub collapsed_text: Option<String>,
155}