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();
}
let (prefix, suffix) = chunk
.text
.split_at(chunk.text.len().min(next_highlight_endpoint - self.offset));
let split_idx = chunk.text.len().min(next_highlight_endpoint - self.offset);
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;
self.offset += prefix.len();
// FIXME: chunk cloning is wrong because the bitmaps might be off
let mut prefix = Chunk {
text: prefix,
chars,
tabs,
..chunk.clone()
};
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
let (prefix, suffix) = chunk.text.split_at(
chunk
.text
.len()
.min(self.transforms.end(&()).0.0 - self.output_offset.0),
);
let split_idx = chunk
.text
.len()
.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;
self.output_offset.0 += prefix.len();
// FIXME: chunk cloning is wrong because the bitmaps might be off
Chunk {
text: prefix,
chars,
tabs,
..chunk.clone()
}
}