From 4a35607263f87d10fd196f9ee4260040bbdc54d9 Mon Sep 17 00:00:00 2001 From: A Farzat Date: Wed, 10 Jun 2026 14:47:46 +0300 Subject: Skip placeholder for large files by default --- src/renderer.rs | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) (limited to 'src/renderer.rs') diff --git a/src/renderer.rs b/src/renderer.rs index c747df5..6f13f59 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -18,6 +18,7 @@ pub struct Renderer { max_file_size: u64, logger: Logger, placeholder_for_binary_files: bool, + placeholder_for_large_files: bool, } impl Renderer { @@ -27,6 +28,7 @@ impl Renderer { max_file_size: DEFAULT_MAX_FILE_SIZE, logger: Logger::default(), placeholder_for_binary_files: false, + placeholder_for_large_files: false, } } @@ -45,6 +47,11 @@ impl Renderer { self } + pub fn with_large_file_placeholder(mut self, placeholder_for_large_files: bool) -> Self { + self.placeholder_for_large_files = placeholder_for_large_files; + self + } + pub fn render_header(&mut self, project_title: &str) -> std::io::Result<()> { writeln!(self.output, "# {}", project_title) } @@ -85,6 +92,9 @@ impl Renderer { } fn render_large_file(&mut self, filename: &Path) -> std::io::Result<()> { + if !self.placeholder_for_large_files { + return Ok(()); + } let name = display_path(filename); writeln!(self.output)?; writeln!(self.output, "## File: {}", name)?; @@ -330,7 +340,7 @@ mod tests { } #[test] - fn renderer_places_placeholder_for_large_files_by_default() { + fn large_files_are_not_included_in_output_at_all_by_default() { let mut output = Vec::new(); let mut renderer = Renderer::new(&mut output).with_max_file_size(5); // smaller than file @@ -344,6 +354,29 @@ mod tests { absolute: file_path, }; + renderer.render_path(&normalized_path).unwrap(); + let expected = ""; + + assert_eq!(String::from_utf8(output).unwrap(), expected); + } + + #[test] + fn renderer_can_place_a_placeholder_for_large_files() { + let mut output = Vec::new(); + let mut renderer = Renderer::new(&mut output) + .with_large_file_placeholder(true) + .with_max_file_size(5); // smaller than file + + let temp_dir = tempdir().unwrap(); + let file_path = temp_dir.path().join("big.txt"); + + let content = "A".repeat(10); // 10 bytes -> bigger than the limit + std::fs::write(&file_path, &content).unwrap(); + let normalized_path = NormalizedPath { + relative: PathBuf::from("big.txt"), + absolute: file_path, + }; + renderer.render_path(&normalized_path).unwrap(); let expected = "\n## File: big.txt\n[FILE TOO LARGE]\n"; -- cgit v1.3.1