diff options
| -rw-r--r-- | src/renderer.rs | 24 |
1 files changed, 22 insertions, 2 deletions
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<W: Write> Renderer<W> { 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); @@ -219,6 +227,18 @@ mod tests { } #[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(); let mut renderer = Renderer::new(&mut output).with_max_file_size(5); // smaller than file |
