use std::collections::HashSet;
use crate::ir::types::{AssignInfo, CallInfo, ExternInfo, ImportInfo, ReadInfo, WriteInfo};
use crate::model::{Edge, Language, Node};
#[derive(Debug, Clone)]
pub struct ExtractResult {
pub file_path: String,
pub language: Language,
pub nodes: Vec<Node>,
pub edges: Vec<Edge>,
pub imports: Vec<ImportInfo>,
pub calls: Vec<CallInfo>,
pub assignments: Vec<AssignInfo>,
pub externs: Vec<ExternInfo>,
pub reads: Vec<ReadInfo>,
pub writes: Vec<WriteInfo>,
pub seen_qns: HashSet<String>,
}
impl ExtractResult {
#[must_use]
pub fn new(file_path: impl Into<String>, language: Language) -> Self {
Self {
file_path: file_path.into(),
language,
nodes: Vec::new(),
edges: Vec::new(),
imports: Vec::new(),
calls: Vec::new(),
assignments: Vec::new(),
externs: Vec::new(),
reads: Vec::new(),
writes: Vec::new(),
seen_qns: HashSet::new(),
}
}
#[must_use]
pub fn is_empty(&self) -> bool {
self.nodes.is_empty()
&& self.edges.is_empty()
&& self.imports.is_empty()
&& self.calls.is_empty()
&& self.assignments.is_empty()
&& self.externs.is_empty()
&& self.reads.is_empty()
&& self.writes.is_empty()
}
pub fn push_node(&mut self, node: Node) {
self.seen_qns.insert(node.qualified_name.clone());
self.nodes.push(node);
}
}