From 674b1715510f74b36b4c7df4f138284cb24536e7 Mon Sep 17 00:00:00 2001 From: A Farzat Date: Sun, 7 Jun 2026 18:09:56 +0300 Subject: Skip language fences for text or unknown filetypes --- src/renderer.rs | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/renderer.rs b/src/renderer.rs index 410cbae..6193680 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -64,10 +64,11 @@ impl Renderer { fn write_file(&mut self, filename: &Path, contents: &str) -> std::io::Result<()> { let name = display_path(filename); let fence = outer_backticks(contents); + let language = detect_language(filename); self.log_file_render(filename); writeln!(self.output)?; writeln!(self.output, "## File: {}", name)?; - writeln!(self.output, "{}rust", fence)?; + writeln!(self.output, "{}{}", fence, language)?; writeln!(self.output, "{}", contents)?; writeln!(self.output, "{}", fence) } @@ -141,6 +142,13 @@ fn human_readable_size(bytes: u64) -> String { } } +fn detect_language(filename: &Path) -> &'static str { + match filename.extension().and_then(|e| e.to_str()) { + Some("rs") => "rust", + _ => "", + } +} + #[cfg(test)] mod tests { use std::{ @@ -167,7 +175,7 @@ mod tests { } #[test] - fn renderer_renders_single_file() { + fn renderer_renders_single_rust_file_with_language_fence() { let mut output = Vec::new(); let mut renderer = Renderer::new(&mut output); @@ -218,6 +226,18 @@ mod tests { assert_eq!(String::from_utf8(output).unwrap(), expected); } + #[test] + fn unknown_filetype_has_no_language_fence() { + let mut output = Vec::new(); + let mut renderer = Renderer::new(&mut output); + + let input = Cursor::new("hello world"); + renderer.render_file(Path::new("readme"), input).unwrap(); + let expected = "\n## File: readme\n```\nhello world\n```\n"; + + assert_eq!(String::from_utf8(output).unwrap(), expected); + } + #[test] fn renderer_places_placeholder_for_large_files_by_default() { let mut output = Vec::new(); -- cgit v1.3.1