diff --git a/crates/parser-generator/src/parser_generator/lalr.rs b/crates/parser-generator/src/parser_generator/lalr.rs index 031c84b..9eb0d88 100644 --- a/crates/parser-generator/src/parser_generator/lalr.rs +++ b/crates/parser-generator/src/parser_generator/lalr.rs @@ -250,9 +250,7 @@ impl Lalr { .map(|c| id_mapper.to_component_id(&c)) .or_else(|| { rule.components - .iter() - .filter(|c| matches!(c, Component::Terminal(_))) - .next_back() + .iter().rfind(|c| matches!(c, Component::Terminal(_))) .map(|c| id_mapper.to_component_id(c)) }) .and_then(|component_id| assoc[component_id.0 as usize].clone()); diff --git a/crates/postgresql-cst-parser/src/tree_sitter/convert.rs b/crates/postgresql-cst-parser/src/tree_sitter/convert.rs index 624b5de..c39f4de 100644 --- a/crates/postgresql-cst-parser/src/tree_sitter/convert.rs +++ b/crates/postgresql-cst-parser/src/tree_sitter/convert.rs @@ -155,7 +155,8 @@ fn walk_and_build( | SyntaxKind::insert_column_list | SyntaxKind::index_params | SyntaxKind::values_clause - | SyntaxKind::TableFuncElementList) => { + | SyntaxKind::TableFuncElementList + | SyntaxKind::array_expr_list) => { if parent_kind == child_kind { // [Node: Flatten] // @@ -526,5 +527,15 @@ FROM let (new_root, _) = get_ts_tree_and_range_map(input, &root); assert_no_direct_nested_kind(&new_root, SyntaxKind::TableFuncElementList); } + + #[test] + fn no_nested_array_expr_list() { + let input = "select array[[1,2],[3,4]];"; + let root = cst::parse(input).unwrap(); + assert_direct_nested_kind(&root, SyntaxKind::array_expr_list); + + let (new_root, _) = get_ts_tree_and_range_map(input, &root); + assert_no_direct_nested_kind(&new_root, SyntaxKind::array_expr_list); + } } }