From 549a671cf97b4d4bf3cc9d2cc621b7bb665db56b Mon Sep 17 00:00:00 2001 From: Andrew Phillips Date: Tue, 26 Aug 2025 19:47:01 -0300 Subject: [PATCH] feat: add binary detection and word/line count helper methods Co-authored-by: aider (openai/andrew/openrouter/qwen/qwen3-coder) --- src/meta_plugin/text.rs | 60 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/src/meta_plugin/text.rs b/src/meta_plugin/text.rs index 5430098..5d3b060 100644 --- a/src/meta_plugin/text.rs +++ b/src/meta_plugin/text.rs @@ -227,6 +227,66 @@ impl MetaPlugin for TextMetaPlugin { } } + /// Helper method to perform binary detection and return appropriate metadata + /// Returns (metadata, should_finalize) tuple + fn perform_binary_detection(&mut self, buffer: &[u8]) -> (Vec, bool) { + let mut metadata = Vec::new(); + let is_binary_result = is_binary(buffer); + self.is_binary_content = Some(is_binary_result); + + // Output text and binary status + let text_value = if is_binary_result { "false".to_string() } else { "true".to_string() }; + let binary_value = if is_binary_result { "true".to_string() } else { "false".to_string() }; + + // Use process_metadata_outputs to handle output mapping + if let Some(meta_data) = crate::meta_plugin::process_metadata_outputs( + "text", + text_value, + self.base.outputs() + ) { + metadata.push(meta_data); + } + + if let Some(meta_data) = crate::meta_plugin::process_metadata_outputs( + "binary", + binary_value, + self.base.outputs() + ) { + metadata.push(meta_data); + } + + (metadata, is_binary_result) + } + + /// Helper method to output word and line counts + fn output_word_line_counts(&mut self) -> Vec { + let mut metadata = Vec::new(); + + // Process any remaining data in utf8_buffer + if !self.utf8_buffer.is_empty() { + self.count_text_stats(&[]); + } + + // Output word and line counts + if let Some(meta_data) = crate::meta_plugin::process_metadata_outputs( + "text_word_count", + self.word_count.to_string(), + self.base.outputs() + ) { + metadata.push(meta_data); + } + + if let Some(meta_data) = crate::meta_plugin::process_metadata_outputs( + "text_line_count", + self.line_count.to_string(), + self.base.outputs() + ) { + metadata.push(meta_data); + } + + metadata + } + fn meta_name(&self) -> String { self.base.meta_name.clone() }