mod cli;
mod filter;
mod formatter;
mod walker;
use anyhow::{Context, Result};
use clap::Parser;
use cli::Cli;
use std::{fs::File, io::Write, path::PathBuf};
fn main() -> Result<()> {
let cli = Cli::parse();
let root = cli
.path
.canonicalize()
.with_context(|| format!("`{}` is not a valid directory", cli.path.display()))?;
let files = walker::collect_files(&root, cli.all, !cli.ignore_gitignore)?;
let dump = formatter::format_files(&root, &files, cli.max_lines)?;
let outfile: PathBuf = cli
.output
.unwrap_or_else(|| std::env::current_dir().unwrap().join("sourcepile.txt"));
let mut f = File::create(&outfile)
.with_context(|| format!("failed to create {}", outfile.display()))?;
f.write_all(dump.as_bytes())
.with_context(|| format!("failed to write {}", outfile.display()))?;
println!("Wrote {} files → {}", files.len(), outfile.display());
Ok(())
}