use crate::syntax::fields::ruby::pair;
use crate::{
query::pred_ast,
syntax::{
builders::{
named_argument::build_named_argument_node, pair::build_pair_node,
symbol_lookup::build_symbol_lookup_node,
},
SyntaxGraphArgs, SyntaxGraphError,
},
utilities::text_nodes::node_to_str,
CodeGraph, NodeId,
};
pub fn reader(
args: &mut SyntaxGraphArgs<'_>,
n_id: NodeId,
) -> Result<Option<NodeId>, SyntaxGraphError> {
let graph = args.ast_graph;
let key_id = args.required_field_alt(n_id, pair::KEY)?;
let Some(value_id) = args.optional_field_alt(n_id, pair::VALUE) else {
let symbol = node_to_str(graph, key_id);
return Ok(Some(build_symbol_lookup_node(args, n_id, symbol)));
};
if let Some(parent) = pred_ast(graph, n_id, Some(1)).first() {
if graph.label_type(*parent) == Some("argument_list") {
let arg_name = node_to_str(graph, key_id);
return build_named_argument_node(args, n_id, Some(arg_name), value_id).map(Some);
}
}
build_pair_node(args, n_id, key_id, value_id).map(Some)
}