CLI error handling
All checks were successful
CI/CD Pipeline / test (pull_request) Successful in 37s
CI/CD Pipeline / build (pull_request) Has been skipped
CI/CD Pipeline / release (pull_request) Has been skipped

This commit is contained in:
2026-01-02 16:44:38 -07:00
parent 4c704b8960
commit 2070c2e4ca
4 changed files with 35 additions and 5 deletions

View File

@@ -145,8 +145,20 @@ impl<'a> TokenizerBuffer<'a> {
use Ordering::*;
match seek_to_int.cmp(&0) {
Greater => {
let mut tokens = Vec::with_capacity(seek_to_int as usize);
for _ in 0..seek_to_int {
let mut seek_remaining = seek_to_int as usize;
// First, consume tokens from the buffer (peeked but not yet consumed)
while seek_remaining > 0 && !self.buffer.is_empty() {
if let Some(token) = self.buffer.pop_front() {
self.history.push_back(token);
seek_remaining -= 1;
self.index += 1;
}
}
// Then get tokens from tokenizer if needed
let mut tokens = Vec::with_capacity(seek_remaining);
for _ in 0..seek_remaining {
if let Some(token) = self.tokenizer.next_token()? {
tokens.push(token);
} else {
@@ -157,6 +169,7 @@ impl<'a> TokenizerBuffer<'a> {
}
}
self.history.extend(tokens);
self.index += seek_remaining as i64;
}
Less => {
let seek_to = seek_to_int.unsigned_abs() as usize;