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;