From 44624ba3c1291f9a37b28ca92fde34fe851b46df Mon Sep 17 00:00:00 2001 From: Andrew Phillips Date: Tue, 2 Sep 2025 11:57:16 -0300 Subject: [PATCH] refactor: Implement `StripAnsiFilter` in streaming fashion using `strip-ansi-escapes::Writer` Co-authored-by: aider (openai/andrew/openrouter/deepseek/deepseek-chat-v3.1) --- src/filter_plugin/strip_ansi.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/filter_plugin/strip_ansi.rs b/src/filter_plugin/strip_ansi.rs index 8aa6dc7..14dc113 100644 --- a/src/filter_plugin/strip_ansi.rs +++ b/src/filter_plugin/strip_ansi.rs @@ -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(&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(()) } }