Skip to content

Commit 90e8424

Browse files
tausbnCopilot
andcommitted
yeast: Ignore empty boundary ranges
Add Range::is_empty and filter empty ignored ranges before adjusting matched source boundaries. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 4639e25 commit 90e8424

1 file changed

Lines changed: 36 additions & 4 deletions

File tree

‎shared/yeast/src/range.rs‎

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,22 +70,30 @@ impl Range {
7070
}
7171
}
7272

73+
/// Return whether this range contains no source bytes.
74+
pub fn is_empty(self) -> bool {
75+
self.start_byte == self.end_byte
76+
}
77+
7378
pub(crate) fn ignoring_boundary_ranges(
7479
mut self,
7580
ignored: impl IntoIterator<Item = Self>,
7681
) -> Self {
77-
let ignored: Vec<_> = ignored.into_iter().collect();
82+
let ignored: Vec<_> = ignored
83+
.into_iter()
84+
.filter(|range| !range.is_empty())
85+
.collect();
7886
loop {
7987
let previous = self;
8088
for range in &ignored {
81-
if *range == self {
89+
if *range == self {
8290
return self.empty_at_start();
8391
}
84-
if range.start_byte == self.start_byte && range.end_byte > range.start_byte {
92+
if range.start_byte == self.start_byte {
8593
self.start_byte = range.end_byte;
8694
self.start_point = range.end_point;
8795
}
88-
if range.end_byte == self.end_byte && range.end_byte > range.start_byte {
96+
if range.end_byte == self.end_byte {
8997
self.end_byte = range.start_byte;
9098
self.end_point = range.start_point;
9199
}
@@ -96,3 +104,27 @@ if *range == self {
96104
}
97105
}
98106
}
107+
108+
#[cfg(test)]
109+
mod tests {
110+
use super::{Point, Range};
111+
112+
fn range(start_byte: usize, end_byte: usize) -> Range {
113+
Range {
114+
start_byte,
115+
end_byte,
116+
start_point: Point::new(0, start_byte),
117+
end_point: Point::new(0, end_byte),
118+
}
119+
}
120+
121+
#[test]
122+
fn empty_ignored_ranges_do_not_change_boundaries() {
123+
let source = range(0, 5);
124+
125+
assert_eq!(
126+
source.ignoring_boundary_ranges([range(0, 0), range(5, 5)]),
127+
source
128+
);
129+
}
130+
}

0 commit comments

Comments
 (0)