arborist-cli 0.2.0

CLI for arborist-metrics: cognitive/cyclomatic complexity and SLOC metrics
Documentation
use std::io;

use arborist::FileReport;

use crate::analysis::FlatFunction;
use crate::error::ArboristError;

pub fn write_reports(reports: &[FileReport]) -> Result<(), ArboristError> {
    let stdout = io::stdout();
    let mut wtr = csv::Writer::from_writer(stdout.lock());

    wtr.write_record([
        "file",
        "language",
        "function",
        "line_start",
        "line_end",
        "cognitive",
        "cyclomatic",
        "sloc",
    ])
    .map_err(|e| ArboristError::Analysis(e.to_string()))?;

    for report in reports {
        let lang = report.language.to_string();
        for func in &report.functions {
            wtr.write_record([
                &report.path,
                &lang,
                &func.name,
                &func.start_line.to_string(),
                &func.end_line.to_string(),
                &func.cognitive.to_string(),
                &func.cyclomatic.to_string(),
                &func.sloc.to_string(),
            ])
            .map_err(|e| ArboristError::Analysis(e.to_string()))?;
        }
    }

    wtr.flush()?;
    Ok(())
}

pub fn write_flat(flat: &[FlatFunction]) -> Result<(), ArboristError> {
    let stdout = io::stdout();
    let mut wtr = csv::Writer::from_writer(stdout.lock());

    wtr.write_record([
        "file",
        "language",
        "function",
        "line_start",
        "line_end",
        "cognitive",
        "cyclomatic",
        "sloc",
    ])
    .map_err(|e| ArboristError::Analysis(e.to_string()))?;

    for func in flat {
        wtr.write_record([
            &func.file_path,
            &func.language,
            &func.name,
            &func.line_start.to_string(),
            &func.line_end.to_string(),
            &func.cognitive.to_string(),
            &func.cyclomatic.to_string(),
            &func.sloc.to_string(),
        ])
        .map_err(|e| ArboristError::Analysis(e.to_string()))?;
    }

    wtr.flush()?;
    Ok(())
}