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