fluidattacks-blends-domain 0.40.0

Blends functional core: pure AST graph to syntax graph (no_std)
Documentation
mod array_exp;
mod common;
use crate::alloc::borrow::ToOwned;
use crate::ast::node_utils::{children, AstNodeAndId};
use crate::ast::{AstGraph, AstNode};
use crate::syntax::_node_builders::core::SyntaxNodeBuildError;
use crate::syntax::_node_builders::languages::rust::array_expression::array_exp::build_array_expression as build_array_exp;
use crate::syntax::core_nodes::{ArrayExpression, CoreSyntaxNodeWithId};
use alloc::vec::Vec;

pub fn build_array_expression(
    graph: &AstGraph,
    node: &AstNode,
    build_syntax_node: impl Fn(AstNodeAndId) -> Result<CoreSyntaxNodeWithId, SyntaxNodeBuildError>,
) -> Result<ArrayExpression, SyntaxNodeBuildError> {
    let all_children = children(graph, node).map_err(SyntaxNodeBuildError::ResolutionError)?;
    let removed_delimiters = all_children
        .iter()
        .filter(|(child, _)| !matches!(child.kind.as_str(), "[" | "]"))
        .collect::<Vec<_>>();
    let is_repeated_exp = removed_delimiters.iter().any(|(n, _)| n.kind == ";");
    if is_repeated_exp {
        return Err(SyntaxNodeBuildError::Error(
            "`ArrayRepetition` not supported".to_owned(),
        ));
    }
    build_array_exp(build_syntax_node, &removed_delimiters)
}

#[cfg(test)]
mod tests;