the-code-graph-cli 0.1.2

Command-line interface for The Code Graph
Documentation
use domain::error::Result;
use domain::model::CloneConfig;
use domain::use_cases::clones::CloneUseCase;

use crate::adapters::fs::RealFileSystem;
use crate::commands::helpers::open_graph;
use crate::commands::ClonesArgs;
use crate::output::{print, OutputFormat};

pub fn run_clones(args: &ClonesArgs, output_format: OutputFormat) -> Result<()> {
    let (store, root) = open_graph()?;
    let fs = RealFileSystem;
    let uc = CloneUseCase::new(store, fs, root);

    let config = CloneConfig {
        threshold: args.threshold,
        min_lines: args.min_lines,
        ..CloneConfig::default()
    };

    let analysis = uc.analyze(&config)?;

    if let Some(cluster_id) = args.cluster {
        if let Some(cluster) = analysis.clusters.iter().find(|c| c.id == cluster_id) {
            print(&vec![cluster.clone()], output_format);
        } else {
            eprintln!(
                "cluster {cluster_id} not found ({} clusters total)",
                analysis.clusters.len()
            );
        }
    } else {
        print(&analysis, output_format);
    }
    Ok(())
}