mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-26 11:59:49 +00:00
Cleaner API
This commit is contained in:
parent
3a6ae42eac
commit
fc3fc571d2
3 changed files with 10 additions and 9 deletions
|
@ -51,18 +51,20 @@ impl Node {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let (start, len) =
|
let overlapping =
|
||||||
equal_range_by(&self.nested, |n| ordering(n.hl_range.range, hl_range.range));
|
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) {
|
if overlapping.len() == 1
|
||||||
return self.nested[start].add(hl_range);
|
&& self.nested[overlapping.start].hl_range.range.contains_range(hl_range.range)
|
||||||
|
{
|
||||||
|
return self.nested[overlapping.start].add(hl_range);
|
||||||
}
|
}
|
||||||
|
|
||||||
let nested = self
|
let nested = self
|
||||||
.nested
|
.nested
|
||||||
.splice(start..start + len, iter::once(Node::new(hl_range)))
|
.splice(overlapping.clone(), iter::once(Node::new(hl_range)))
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
self.nested[start].nested = nested;
|
self.nested[overlapping.start].nested = nested;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn flatten(&self, acc: &mut Vec<HlRange>) {
|
fn flatten(&self, acc: &mut Vec<HlRange>) {
|
||||||
|
|
|
@ -33,8 +33,7 @@ impl Injector {
|
||||||
&self.buf
|
&self.buf
|
||||||
}
|
}
|
||||||
pub(super) fn map_range_up(&self, range: TextRange) -> impl Iterator<Item = TextRange> + '_ {
|
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));
|
equal_range_by(&self.ranges, |&(r, _)| ordering(r, range)).filter_map(move |i| {
|
||||||
(start..start + len).filter_map(move |i| {
|
|
||||||
let (target_range, delta) = self.ranges[i];
|
let (target_range, delta) = self.ranges[i];
|
||||||
let intersection = target_range.intersect(range).unwrap();
|
let intersection = target_range.intersect(range).unwrap();
|
||||||
Some(intersection + delta?)
|
Some(intersection + delta?)
|
||||||
|
|
|
@ -152,13 +152,13 @@ where
|
||||||
left
|
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
|
where
|
||||||
F: FnMut(&T) -> Ordering,
|
F: FnMut(&T) -> Ordering,
|
||||||
{
|
{
|
||||||
let start = partition_point(slice, |it| key(it) == Ordering::Less);
|
let start = partition_point(slice, |it| key(it) == Ordering::Less);
|
||||||
let len = partition_point(&slice[start..], |it| key(it) == Ordering::Equal);
|
let len = partition_point(&slice[start..], |it| key(it) == Ordering::Equal);
|
||||||
(start, len)
|
start..start + len
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct JodChild(pub process::Child);
|
pub struct JodChild(pub process::Child);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue