1#![feature(new_range_api)]
2#![warn(missing_docs)]
3use core::range::Range;
8use oak_core::{language::Language, tree::RedNode};
9use serde::{Deserialize, Serialize};
10
11#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
13#[serde(rename_all = "lowercase")]
14pub enum FoldingRangeKind {
15 Comment,
17 Imports,
19 Region,
21}
22
23#[derive(Debug, Clone, Serialize, Deserialize)]
25pub struct FoldingRange {
26 #[serde(with = "oak_core::serde_range", bound(serialize = "", deserialize = ""))]
28 pub range: Range<usize>,
29 pub kind: Option<FoldingRangeKind>,
31}
32
33pub trait FoldingProvider<L: Language> {
35 fn folding_ranges(&self, root: &RedNode<L>) -> Vec<FoldingRange> {
37 let _ = root;
38 Vec::new()
39 }
40}