This commit is contained in:
Anthony 2025-06-27 18:51:08 -04:00
parent 1bdde8b2e4
commit 596f3c9dc9
2 changed files with 38 additions and 9 deletions

View file

@ -137,15 +137,29 @@ impl<'a> Iterator for CustomHighlightsChunks<'a> {
*chunk = self.buffer_chunks.next().unwrap(); *chunk = self.buffer_chunks.next().unwrap();
} }
let (prefix, suffix) = chunk let split_idx = chunk.text.len().min(next_highlight_endpoint - self.offset);
.text let (prefix, suffix) = chunk.text.split_at(split_idx);
.split_at(chunk.text.len().min(next_highlight_endpoint - self.offset));
let (chars, tabs) = if split_idx == 128 {
let output = (chunk.chars, chunk.tabs);
chunk.chars = 0;
chunk.tabs = 0;
output
} else {
let mask = (1 << split_idx) - 1;
let output = (chunk.chars & mask, chunk.tabs & mask);
chunk.chars = chunk.chars >> split_idx;
chunk.tabs = chunk.tabs >> split_idx;
output
};
chunk.text = suffix; chunk.text = suffix;
self.offset += prefix.len(); self.offset += prefix.len();
// FIXME: chunk cloning is wrong because the bitmaps might be off // FIXME: chunk cloning is wrong because the bitmaps might be off
let mut prefix = Chunk { let mut prefix = Chunk {
text: prefix, text: prefix,
chars,
tabs,
..chunk.clone() ..chunk.clone()
}; };
if !self.active_highlights.is_empty() { if !self.active_highlights.is_empty() {

View file

@ -288,18 +288,33 @@ impl<'a> Iterator for InlayChunks<'a> {
} }
// todo! create a tabs/chars bitmask here and pass it in chunk // todo! create a tabs/chars bitmask here and pass it in chunk
let (prefix, suffix) = chunk.text.split_at( let split_idx = chunk
chunk .text
.text .len()
.len() .min(self.transforms.end(&()).0.0 - self.output_offset.0);
.min(self.transforms.end(&()).0.0 - self.output_offset.0),
); let (prefix, suffix) = chunk.text.split_at(split_idx);
let (chars, tabs) = if split_idx == 128 {
let output = (chunk.chars, chunk.tabs);
chunk.chars = 0;
chunk.tabs = 0;
output
} else {
let mask = (1 << split_idx) - 1;
let output = (chunk.chars & mask, chunk.tabs & mask);
chunk.chars = chunk.chars >> split_idx;
chunk.tabs = chunk.tabs >> split_idx;
output
};
chunk.text = suffix; chunk.text = suffix;
self.output_offset.0 += prefix.len(); self.output_offset.0 += prefix.len();
// FIXME: chunk cloning is wrong because the bitmaps might be off // FIXME: chunk cloning is wrong because the bitmaps might be off
Chunk { Chunk {
text: prefix, text: prefix,
chars,
tabs,
..chunk.clone() ..chunk.clone()
} }
} }