rusty_react_flow/analyzer/
summary.rs1use std::collections::HashMap;
2use crate::models::{FileAnalysis, Summary};
3
4pub 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 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 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}