//! Collects a tree of highlighted ranges and flattens it.
-use std::{cmp::Ordering, iter};
+use std::iter;
use stdx::equal_range_by;
use syntax::TextRange;
self.root.add(hl_range);
}
- pub(super) fn to_vec(self) -> Vec<HlRange> {
+ pub(super) fn to_vec(&self) -> Vec<HlRange> {
let mut res = Vec::new();
self.root.flatten(&mut res);
res
}
}
- let (start, len) =
- equal_range_by(&self.nested, |n| ordering(n.hl_range.range, hl_range.range));
+ let overlapping =
+ equal_range_by(&self.nested, |n| TextRange::ordering(n.hl_range.range, hl_range.range));
- if len == 1 && self.nested[start].hl_range.range.contains_range(hl_range.range) {
- return self.nested[start].add(hl_range);
+ if overlapping.len() == 1
+ && self.nested[overlapping.start].hl_range.range.contains_range(hl_range.range)
+ {
+ return self.nested[overlapping.start].add(hl_range);
}
let nested = self
.nested
- .splice(start..start + len, iter::once(Node::new(hl_range)))
+ .splice(overlapping.clone(), iter::once(Node::new(hl_range)))
.collect::<Vec<_>>();
- self.nested[start].nested = nested;
+ self.nested[overlapping.start].nested = nested;
}
fn flatten(&self, acc: &mut Vec<HlRange>) {
}
}
}
-
-pub(super) fn ordering(r1: TextRange, r2: TextRange) -> Ordering {
- if r1.end() <= r2.start() {
- Ordering::Less
- } else if r2.end() <= r1.start() {
- Ordering::Greater
- } else {
- Ordering::Equal
- }
-}