refactor: Implement StripAnsiFilter in streaming fashion using strip-ansi-escapes::Writer

Co-authored-by: aider (openai/andrew/openrouter/deepseek/deepseek-chat-v3.1) <aider@aider.chat>
This commit is contained in:
Andrew Phillips
2025-09-02 11:57:16 -03:00
parent 9a25bdea37
commit 44624ba3c1

View File

@@ -1,5 +1,5 @@
use std::io::{Result, Read, Write};
use strip_ansi_escapes::strip as strip_ansi_escapes;
use strip_ansi_escapes::Writer;
use crate::common::PIPESIZE;
use super::FilterPlugin;
@@ -15,18 +15,16 @@ impl StripAnsiFilter {
impl FilterPlugin for StripAnsiFilter {
fn filter<R: Read, W: Write>(&mut self, reader: &mut R, writer: &mut W) -> Result<()> {
let mut buffer = vec![0; PIPESIZE];
let mut processed_data = Vec::new();
let mut ansi_writer = Writer::new(writer);
loop {
let bytes_read = reader.read(&mut buffer)?;
if bytes_read == 0 {
break;
}
processed_data.extend_from_slice(&buffer[..bytes_read]);
ansi_writer.write_all(&buffer[..bytes_read])?;
}
let stripped = strip_ansi_escapes(&processed_data);
writer.write_all(&stripped)?;
ansi_writer.flush()?;
Ok(())
}
}