rusty_react_flow/analyzer/
summary.rs

1use std::collections::HashMap;
2use crate::models::{FileAnalysis, Summary};
3
4/// 파일 분석 결과를 바탕으로 요약 정보를 생성합니다.
5pub fn generate_summary(file_analyses: &[FileAnalysis]) -> Summary {
6    let total_files = file_analyses.len();
7
8    let mut total_imports = 0;
9    let mut total_exports = 0;
10
11    let mut import_sources = HashMap::new();
12    let mut exported_names = HashMap::new();
13
14    for analysis in file_analyses {
15        total_imports += analysis.imports.len();
16        total_exports += analysis.exports.len();
17
18        for import in &analysis.imports {
19            *import_sources.entry(import.source.clone()).or_insert(0) += 1;
20        }
21
22        for export in &analysis.exports {
23            *exported_names.entry(export.name.clone()).or_insert(0) += 1;
24        }
25    }
26
27    // 가장 많이 import된 소스 상위 5개 가져오기
28    let mut import_vec: Vec<(String, usize)> = import_sources.into_iter().collect();
29    import_vec.sort_by(|a, b| b.1.cmp(&a.1));
30    let most_imported = import_vec.into_iter()
31        .take(5)
32        .map(|(source, _)| source)
33        .collect();
34
35    // 가장 많이 export된 이름 상위 5개 가져오기
36    let mut export_vec: Vec<(String, usize)> = exported_names.into_iter().collect();
37    export_vec.sort_by(|a, b| b.1.cmp(&a.1));
38    let most_exported = export_vec.into_iter()
39        .take(5)
40        .map(|(name, _)| name)
41        .collect();
42
43    Summary {
44        total_files,
45        total_imports,
46        total_exports,
47        most_imported,
48        most_exported,
49    }
50}