From 2858ce8e1264ec3011da753c2bedddc82195babd Mon Sep 17 00:00:00 2001 From: tanzaku Date: Fri, 6 Feb 2026 18:49:47 +0900 Subject: [PATCH 1/2] feat: flatten array_expr_list --- .../src/tree_sitter/convert.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) 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); + } } } From d4fa4c6403a9d96a8f4749f21b45ea629b2cde48 Mon Sep 17 00:00:00 2001 From: tanzaku Date: Tue, 10 Feb 2026 14:05:29 +0900 Subject: [PATCH 2/2] fix: clippy --- crates/parser-generator/src/parser_generator/lalr.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) 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());