use crate::syntax::cfg::dispatchers::multifile::adjust_assignment_ast_edges;
use crate::syntax::cfg::{SyntaxCfgArgs, SyntaxCfgError};
use crate::syntax::{SyntaxGraph, SyntaxNode};
use crate::{CodeGraph, NodeId};
fn assignment_value_holding_body(graph: &SyntaxGraph, n_id: NodeId) -> Option<NodeId> {
let Some(&SyntaxNode::Assignment {
value_id: Some(value_id),
..
}) = graph.nodes.get(&n_id)
else {
return None;
};
matches!(
graph.label_type(value_id),
Some("MethodDeclaration" | "Object")
)
.then_some(value_id)
}
pub fn build(
args: &mut SyntaxCfgArgs<'_>,
n_id: NodeId,
nxt_id: Option<NodeId>,
) -> Result<NodeId, SyntaxCfgError> {
if args.is_multifile && args.graph.label_type(n_id) == Some("Assignment") {
adjust_assignment_ast_edges(args.graph, n_id);
}
if let Some(nxt_id) = nxt_id {
args.graph.add_cfg_edge(n_id, nxt_id);
} else if let Some(value_id) = assignment_value_holding_body(args.graph, n_id) {
let built = args.generic(value_id, nxt_id)?;
args.graph.add_cfg_edge(n_id, built);
}
Ok(n_id)
}