bbnf_analysis/features/
folding.rs1use ls_types::*;
2
3use crate::state::DocumentState;
4
5pub fn folding_ranges(state: &DocumentState) -> Vec<FoldingRange> {
6 state
7 .info
8 .rules
9 .iter()
10 .filter_map(|rule| {
11 let start = state.line_index.offset_to_position(rule.full_span.0);
12 let end = state.line_index.offset_to_position(rule.full_span.1);
13
14 if end.line > start.line {
16 Some(FoldingRange {
17 start_line: start.line,
18 start_character: Some(start.character),
19 end_line: end.line,
20 end_character: Some(end.character),
21 kind: Some(FoldingRangeKind::Region),
22 collapsed_text: Some(format!("{} = ...", rule.name)),
23 })
24 } else {
25 None
26 }
27 })
28 .collect()
29}