summaryrefslogtreecommitdiff
path: root/support/texlab/crates/texlab/src/features/folding.rs
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab/crates/texlab/src/features/folding.rs')
-rw-r--r--support/texlab/crates/texlab/src/features/folding.rs44
1 files changed, 9 insertions, 35 deletions
diff --git a/support/texlab/crates/texlab/src/features/folding.rs b/support/texlab/crates/texlab/src/features/folding.rs
index 6bdfc3a309..b19fa8a4da 100644
--- a/support/texlab/crates/texlab/src/features/folding.rs
+++ b/support/texlab/crates/texlab/src/features/folding.rs
@@ -1,46 +1,20 @@
use base_db::Workspace;
-use folding::FoldingRangeKind;
-use lsp_types::{ClientCapabilities, Url};
-use crate::util::line_index_ext::LineIndexExt;
+use crate::util::{from_proto, to_proto, ClientFlags};
pub fn find_all(
workspace: &Workspace,
- uri: &Url,
- capabilities: &ClientCapabilities,
+ params: lsp_types::FoldingRangeParams,
+ client_flags: &ClientFlags,
) -> Option<Vec<serde_json::Value>> {
- let custom_kinds = capabilities
- .text_document
- .as_ref()
- .and_then(|cap| cap.folding_range.as_ref())
- .and_then(|cap| cap.folding_range_kind.as_ref())
- .and_then(|cap| cap.value_set.as_ref())
- .is_some();
+ let params = from_proto::feature_params(workspace, params.text_document)?;
- let document = workspace.lookup(uri)?;
- let foldings = folding::find_all(document)
+ let foldings = folding::find_all(&params.document)
.into_iter()
.filter_map(|folding| {
- let range = document.line_index.line_col_lsp_range(folding.range)?;
+ to_proto::folding_range(folding, &params.document.line_index, client_flags)
+ })
+ .collect();
- let kind = if custom_kinds {
- Some(match folding.kind {
- FoldingRangeKind::Section => "section",
- FoldingRangeKind::Environment => "environment",
- FoldingRangeKind::Entry => "entry",
- })
- } else {
- None
- };
-
- Some(serde_json::json!({
- "startLine": range.start.line,
- "startCharacter": range.start.character,
- "endLine": range.end.line,
- "endCharacter": range.end.character,
- "kind": kind,
- }))
- });
-
- Some(foldings.collect())
+ Some(foldings)
}