From 6f78f050da2a2d1cf9e9d1bcff61e3e7e128d2d2 Mon Sep 17 00:00:00 2001 From: A Farzat Date: Thu, 18 Jun 2026 21:17:31 +0300 Subject: Add a fenced option to wrap output in md fences Useful to paste the output directly instead of using a file. --- src/main.rs | 49 ++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 40 insertions(+), 9 deletions(-) diff --git a/src/main.rs b/src/main.rs index 2d4ee45..bc193e8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,6 +2,7 @@ use std::{io, path::PathBuf}; use clap::Parser; use repo2markdown::{ + fenced_md_generator::generate_fenced_markdown, logger::{Logger, Verbosity}, md_generator::generate_markdown_from_paths, renderer::{DEFAULT_MAX_FILE_SIZE, RenderOptions}, @@ -22,6 +23,10 @@ struct Cli { #[arg(long)] name: Option, + /// Wrap the entire output in a markdown code fence. + #[arg(long)] + fenced: bool, + /// Maximum file size, in bytes, to include in the generated markdown. #[arg(long, default_value_t = DEFAULT_MAX_FILE_SIZE, value_name = "BYTES")] max_file_size: u64, @@ -71,15 +76,27 @@ fn main() -> Result<(), Box> { let logger = Logger::new(cli.verbosity()); - generate_markdown_from_paths( - stdin.lock(), - stdout.lock(), - cli.render_options(), - &cli.root, - &cli.origin, - cli.name.as_deref(), - logger, - ) + if cli.fenced { + generate_fenced_markdown( + stdin.lock(), + stdout.lock(), + cli.render_options(), + &cli.root, + &cli.origin, + cli.name.as_deref(), + logger, + ) + } else { + generate_markdown_from_paths( + stdin.lock(), + stdout.lock(), + cli.render_options(), + &cli.root, + &cli.origin, + cli.name.as_deref(), + logger, + ) + } } #[cfg(test)] @@ -171,4 +188,18 @@ mod tests { assert!(result.is_err()); } + + #[test] + fn cli_does_not_use_fenced_output_by_default() { + let cli = Cli::try_parse_from(["repo2markdown"]).unwrap(); + + assert!(!cli.fenced); + } + + #[test] + fn cli_accepts_fenced_output_option() { + let cli = Cli::try_parse_from(["repo2markdown", "--fenced"]).unwrap(); + + assert!(cli.fenced); + } } -- cgit v1.3.1