]> git.lizzy.rs Git - rust.git/commitdiff
Cleaner API
authorAleksey Kladov <aleksey.kladov@gmail.com>
Sun, 10 Jan 2021 11:36:15 +0000 (14:36 +0300)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Sun, 10 Jan 2021 11:36:15 +0000 (14:36 +0300)
crates/ide/src/syntax_highlighting/highlights.rs
crates/ide/src/syntax_highlighting/injector.rs
crates/stdx/src/lib.rs

index 11c11ed288700561d490500c14526f0e7055b321..c6f0417ecbfa80f507472809a87179d36d737a16 100644 (file)
@@ -51,18 +51,20 @@ fn add(&mut self, hl_range: HlRange) {
             }
         }
 
-        let (start, len) =
+        let overlapping =
             equal_range_by(&self.nested, |n| 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>) {
index e8f17eb69f6087c8b7938e9fdad6ce12951df9a9..fd402569423a95c113250bb9036407135cf9411b 100644 (file)
@@ -33,8 +33,7 @@ pub(super) fn text(&self) -> &str {
         &self.buf
     }
     pub(super) fn map_range_up(&self, range: TextRange) -> impl Iterator<Item = TextRange> + '_ {
-        let (start, len) = equal_range_by(&self.ranges, |&(r, _)| ordering(r, range));
-        (start..start + len).filter_map(move |i| {
+        equal_range_by(&self.ranges, |&(r, _)| ordering(r, range)).filter_map(move |i| {
             let (target_range, delta) = self.ranges[i];
             let intersection = target_range.intersect(range).unwrap();
             Some(intersection + delta?)
index 5aacdb16edb6365c14e86b521d07be497bd845c0..13aab1451ec0b22d332e12082c7b69ef2bf4acbb 100644 (file)
@@ -152,13 +152,13 @@ pub fn partition_point<T, P>(slice: &[T], mut pred: P) -> usize
     left
 }
 
-pub fn equal_range_by<T, F>(slice: &[T], mut key: F) -> (usize, usize)
+pub fn equal_range_by<T, F>(slice: &[T], mut key: F) -> ops::Range<usize>
 where
     F: FnMut(&T) -> Ordering,
 {
     let start = partition_point(slice, |it| key(it) == Ordering::Less);
     let len = partition_point(&slice[start..], |it| key(it) == Ordering::Equal);
-    (start, len)
+    start..start + len
 }
 
 pub struct JodChild(pub process::Child);