summaryrefslogtreecommitdiff
path: root/src/md_generator.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/md_generator.rs')
-rw-r--r--src/md_generator.rs76
1 files changed, 62 insertions, 14 deletions
diff --git a/src/md_generator.rs b/src/md_generator.rs
index 44802af..98ab22d 100644
--- a/src/md_generator.rs
+++ b/src/md_generator.rs
@@ -7,7 +7,10 @@ use std::{
};
use crate::{
- logger::Logger, normalizer::Normalizer, renderer::Renderer, util::path_display::display_path,
+ logger::Logger,
+ normalizer::Normalizer,
+ renderer::{RenderOptions, Renderer},
+ util::path_display::display_path,
};
const DEFAULT_PROJECT_NAME: &str = "Project Outline";
@@ -15,6 +18,7 @@ const DEFAULT_PROJECT_NAME: &str = "Project Outline";
pub fn generate_markdown_from_paths<R: Read, W: Write>(
mut input: R,
output: W,
+ render_options: RenderOptions,
root: &Path,
origin_base: &Path,
project_title: Option<&str>,
@@ -25,7 +29,7 @@ pub fn generate_markdown_from_paths<R: Read, W: Write>(
let normalizer = Normalizer::new(root, origin_base)?;
- let mut renderer = Renderer::new(output).with_logger(logger);
+ let mut renderer = Renderer::new(output, render_options).with_logger(logger);
let project_title = project_title.unwrap_or_else(|| derive_project_title(root));
renderer.render_header(project_title)?;
@@ -68,6 +72,7 @@ mod tests {
use std::path::Path;
use crate::logger::Logger;
+ use crate::renderer::RenderOptions;
use tempfile::tempdir;
use super::{DEFAULT_PROJECT_NAME, derive_project_title, generate_markdown_from_paths};
@@ -81,7 +86,7 @@ mod tests {
output
}
- fn run_with_default_logger<R: Read, W: Write>(
+ fn generate_with_defaults<R: Read, W: Write>(
input: R,
output: W,
root: &Path,
@@ -89,7 +94,16 @@ mod tests {
project_title: Option<&str>,
) -> Result<(), Box<dyn std::error::Error>> {
let logger = Logger::default();
- generate_markdown_from_paths(input, output, root, origin_base, project_title, logger)
+ let render_options = RenderOptions::default();
+ generate_markdown_from_paths(
+ input,
+ output,
+ render_options,
+ root,
+ origin_base,
+ project_title,
+ logger,
+ )
}
#[test]
@@ -100,7 +114,7 @@ mod tests {
let root = temp_dir.path();
let origin_base = temp_dir.path();
- run_with_default_logger(input, &mut output, root, origin_base, Some("Project name"))
+ generate_with_defaults(input, &mut output, root, origin_base, Some("Project name"))
.unwrap();
assert_eq!(String::from_utf8(output).unwrap(), "# Project name\n");
@@ -116,7 +130,7 @@ mod tests {
fs::write(origin_base.join("test_main.rs"), "fn main() {}").unwrap();
- run_with_default_logger(input, &mut output, root, origin_base, None).unwrap();
+ generate_with_defaults(input, &mut output, root, origin_base, None).unwrap();
let output_str = String::from_utf8(output).unwrap();
@@ -135,7 +149,7 @@ mod tests {
fs::write(origin_base.join("a.rs"), "A").unwrap();
fs::write(origin_base.join("b.rs"), "B").unwrap();
- run_with_default_logger(input, &mut output, root, origin_base, None).unwrap();
+ generate_with_defaults(input, &mut output, root, origin_base, None).unwrap();
let output = String::from_utf8(output).unwrap();
@@ -157,7 +171,7 @@ mod tests {
fs::create_dir_all(&write_dir).unwrap();
fs::write(write_dir.join("main.rs"), "fn main() {}").unwrap();
- run_with_default_logger(input, &mut output, root, origin_base, None).unwrap();
+ generate_with_defaults(input, &mut output, root, origin_base, None).unwrap();
let output = String::from_utf8(output).unwrap();
@@ -175,7 +189,7 @@ mod tests {
fs::create_dir_all(&origin_base).unwrap();
fs::write(origin_base.join("main.rs"), "fn main() {}").unwrap();
- run_with_default_logger(input, &mut output, &root, &origin_base, None).unwrap();
+ generate_with_defaults(input, &mut output, &root, &origin_base, None).unwrap();
let output = String::from_utf8(output).unwrap();
@@ -197,7 +211,7 @@ mod tests {
let root = temp_dir2.path();
fs::write(&filepath, "fn main() {}").unwrap();
- run_with_default_logger(input, &mut output, root, origin_base, None).unwrap();
+ generate_with_defaults(input, &mut output, root, origin_base, None).unwrap();
let output = String::from_utf8(output).unwrap();
@@ -216,7 +230,7 @@ mod tests {
let input = Cursor::new(b"a.rs\0a.rs\0");
let mut output = Vec::new();
- run_with_default_logger(input, &mut output, root, origin, None).unwrap();
+ generate_with_defaults(input, &mut output, root, origin, None).unwrap();
let output = String::from_utf8(output).unwrap();
@@ -235,7 +249,7 @@ mod tests {
let input = Cursor::new(b"a.rs\0b.rs\0a.rs\0");
let mut output = Vec::new();
- run_with_default_logger(input, &mut output, root, origin, None).unwrap();
+ generate_with_defaults(input, &mut output, root, origin, None).unwrap();
let output = String::from_utf8(output).unwrap();
assert_eq!(output.matches("## File: a.rs").count(), 1);
@@ -258,7 +272,7 @@ mod tests {
let input = Cursor::new(b"a.rs\0b.rs\0bla/../a.rs\0");
let mut output = Vec::new();
- run_with_default_logger(input, &mut output, root, origin, None).unwrap();
+ generate_with_defaults(input, &mut output, root, origin, None).unwrap();
let output = String::from_utf8(output).unwrap();
assert_eq!(output.matches("## File: a.rs").count(), 1);
@@ -272,7 +286,7 @@ mod tests {
let mut output = Vec::new();
let root = temp_dir.path().join("repo2markdown");
- run_with_default_logger(input, &mut output, &root, origin_base, None).unwrap();
+ generate_with_defaults(input, &mut output, &root, origin_base, None).unwrap();
let output_str = String::from_utf8(output).unwrap();
@@ -295,4 +309,38 @@ mod tests {
let root = Path::new("/root/repo2markdown/");
assert_eq!(derive_project_title(root), "repo2markdown");
}
+
+ #[test]
+ fn generator_uses_render_options_for_large_file_placeholders() {
+ let temp_dir = tempdir().unwrap();
+ let origin_base = temp_dir.path();
+ let root = temp_dir.path();
+
+ let file_path = origin_base.join("big.txt");
+ fs::write(&file_path, "A".repeat(10)).unwrap();
+
+ let input = Cursor::new(b"big.txt\0");
+ let mut output = Vec::new();
+
+ let config = RenderOptions {
+ placeholder_for_binary_files: false,
+ placeholder_for_large_files: true,
+ max_file_size: 5,
+ };
+
+ generate_markdown_from_paths(
+ input,
+ &mut output,
+ config,
+ root,
+ origin_base,
+ None,
+ Logger::default(),
+ )
+ .unwrap();
+
+ let output = String::from_utf8(output).unwrap();
+ assert!(output.contains("## File: big.txt"));
+ assert!(output.contains("[FILE TOO LARGE]"));
+ }
}