fluidattacks-blends-domain 0.3.0

Blends functional core: pure AST graph to syntax graph (no_std)
Documentation
//! Counterpart of `blends/path_search/search/using_statement.py`.

use alloc::vec::Vec;

use crate::path_search::search::{SearchArgs, SearchResult};
use crate::syntax::SyntaxNode;

pub fn search(args: &SearchArgs<'_>) -> Vec<SearchResult> {
    let Some(SyntaxNode::UsingStatement {
        declaration_id: Some(var_id),
        ..
    }) = args.graph.nodes.get(&args.n_id)
    else {
        return Vec::new();
    };
    let var_id = *var_id;
    let mut out: Vec<SearchResult> = Vec::new();

    if args.graph.nodes.get(&var_id).and_then(SyntaxNode::variable) == Some(args.symbol) {
        out.push((true, args.n_id));
    }

    if let Some(SyntaxNode::Assignment { variable_id, .. }) = args.graph.nodes.get(&var_id) {
        if args
            .graph
            .nodes
            .get(variable_id)
            .and_then(SyntaxNode::symbol)
            == Some(args.symbol)
        {
            out.push((true, args.n_id));
        }
    }
    out
}