mirror of
https://github.com/Automattic/harper.git
synced 2025-08-04 18:48:02 +00:00
fix overlapping byte_span parse bug
Credit: Elijah Potter <me@elijahpotter.dev>
This commit is contained in:
parent
b2b72f835b
commit
f82ada8431
1 changed files with 19 additions and 10 deletions
|
@ -120,19 +120,28 @@ impl Masker for TreeSitterMasker {
|
|||
///
|
||||
/// If any spans overlap, it will remove the second one.
|
||||
fn byte_spans_to_char_spans(byte_spans: &mut Vec<Span>, source: &str) {
|
||||
byte_spans.sort_by_key(|s| s.start);
|
||||
let mut len = byte_spans.len();
|
||||
|
||||
let cloned = byte_spans.clone();
|
||||
loop {
|
||||
byte_spans.sort_by_key(|s| s.start);
|
||||
|
||||
let mut i: usize = 0;
|
||||
byte_spans.retain(|cur| {
|
||||
i += 1;
|
||||
if let Some(prev) = cloned.get(i.wrapping_sub(2)) {
|
||||
!cur.overlaps_with(*prev)
|
||||
} else {
|
||||
true
|
||||
let cloned = byte_spans.clone();
|
||||
|
||||
let mut i: usize = 0;
|
||||
byte_spans.retain(|cur| {
|
||||
i += 1;
|
||||
if let Some(prev) = cloned.get(i.wrapping_sub(2)) {
|
||||
!cur.overlaps_with(*prev)
|
||||
} else {
|
||||
true
|
||||
}
|
||||
});
|
||||
|
||||
if byte_spans.len() == len {
|
||||
break;
|
||||
}
|
||||
});
|
||||
len = byte_spans.len();
|
||||
}
|
||||
|
||||
let mut last_byte_pos = 0;
|
||||
let mut last_char_pos = 0;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue