use crate::language::LangId;
use crate::model::{DataNode, DataNodeId, FlowEdge, IdGenerator};
pub fn extract_dataflow(
lang: LangId,
tree: &tree_sitter::Tree,
source: &[u8],
id_gen: &IdGenerator<DataNodeId>,
) -> (Vec<DataNode>, Vec<FlowEdge>) {
match lang {
LangId::Rust => crate::language::rust::extract_rust_dataflow(tree, source, id_gen),
LangId::Python => crate::language::python::extract_python_dataflow(tree, source, id_gen),
LangId::JavaScript | LangId::TypeScript | LangId::Tsx => (Vec::new(), Vec::new()),
LangId::Go => (Vec::new(), Vec::new()),
LangId::C | LangId::Cpp => (Vec::new(), Vec::new()),
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn unsupported_lang_returns_empty() {
let source = b"var x = 1;\n";
let lang = LangId::JavaScript;
let tree = crate::parser::parse_tree(lang, source).unwrap();
let id_gen = IdGenerator::new();
let (nodes, edges) = extract_dataflow(lang, &tree, source, &id_gen);
assert!(nodes.is_empty());
assert!(edges.is_empty());
}
}