]> git.lizzy.rs Git - rust.git/blobdiff - crates/ide/src/syntax_highlighting/highlights.rs
Code blocks with tilde also works like code block
[rust.git] / crates / ide / src / syntax_highlighting / highlights.rs
index 11c11ed288700561d490500c14526f0e7055b321..340290eafedbe088c6d5902c0cd96c7a7a33bcbe 100644 (file)
@@ -1,5 +1,5 @@
 //! 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;
@@ -26,7 +26,7 @@ pub(super) fn add(&mut self, hl_range: HlRange) {
         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
@@ -51,18 +51,20 @@ fn add(&mut self, hl_range: HlRange) {
             }
         }
 
-        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>) {
@@ -88,13 +90,3 @@ 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
-    }
-}