use std::ops::Range;
pub struct Tree;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct FoldRange {
pub start_line: usize,
pub end_line: usize,
}
impl FoldRange {
pub fn new(start_line: usize, end_line: usize) -> Self {
assert!(
start_line <= end_line,
"fold start_line must be <= end_line"
);
Self {
start_line,
end_line,
}
}
}
pub fn extract_fold_ranges_in_range(_tree: &Tree, _byte_range: Range<usize>) -> Vec<FoldRange> {
Vec::new()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_fold_range_ordering() {
let mut ranges = vec![
FoldRange {
start_line: 10,
end_line: 20,
},
FoldRange {
start_line: 5,
end_line: 15,
},
FoldRange {
start_line: 5,
end_line: 15,
},
FoldRange {
start_line: 1,
end_line: 30,
},
];
ranges.sort_by_key(|r| r.start_line);
ranges.dedup_by_key(|r| r.start_line);
assert_eq!(ranges.len(), 3);
assert_eq!(ranges[0].start_line, 1);
assert_eq!(ranges[1].start_line, 5);
assert_eq!(ranges[2].start_line, 10);
}
}