use crate::core::call_graph::CallEdge;
use crate::core::graph_provider::GraphProvider;
use crate::core::language_capabilities::{
LanguageCapabilityRow, language_capability_matrix_realized,
};
fn is_import_like(kind: &str) -> bool {
matches!(kind, "import" | "imports" | "reexport" | "module")
}
pub(super) fn realized_from_provider(
provider: &GraphProvider,
call_edges: Option<&[CallEdge]>,
) -> Vec<LanguageCapabilityRow> {
let file_paths = provider.file_paths();
let symbol_files: Vec<String> = provider.all_symbols().into_iter().map(|s| s.file).collect();
let import_from_files: Vec<String> = provider
.edges()
.into_iter()
.filter(|e| is_import_like(&e.kind))
.map(|e| e.from)
.collect();
let call_caller_files: Option<Vec<String>> =
call_edges.map(|edges| edges.iter().map(|e| e.caller_file.clone()).collect());
language_capability_matrix_realized(
&file_paths,
&symbol_files,
&import_from_files,
call_caller_files.as_deref(),
)
}