mod cli;
mod comments;
mod diff;
mod loader;
mod ui;
use anyhow::Result;
use clap::{CommandFactory, Parser};
use cli::Cli;
use std::io::IsTerminal;
fn main() -> Result<()> {
let args = Cli::parse();
if args.file.is_none() && std::io::stdin().is_terminal() {
Cli::command().print_help()?;
std::process::exit(2);
}
let changeset = loader::load_patch(args.file.as_deref())?;
let base = match &args.comments {
Some(path) => loader::load_comments_or_default(path)?,
None => comments::CommentStore::default(),
};
let final_comments = ui::run(changeset, base.clone())?;
let actions = comments::diff(&base, &final_comments);
println!("{}", serde_json::to_string_pretty(&actions)?);
Ok(())
}