diff --git a/crates/codegen/src/get_node_properties.rs b/crates/codegen/src/get_node_properties.rs index 85d81d6d..e16a090e 100644 --- a/crates/codegen/src/get_node_properties.rs +++ b/crates/codegen/src/get_node_properties.rs @@ -630,6 +630,9 @@ fn custom_handlers(node: &Node) -> TokenStream { } } // if its a list, we handle it in the handler for `List` }, + protobuf::ObjectType::ObjectType => { + tokens.push(TokenProperty::from(Token::TypeP)); + }, _ => panic!("Unknown DefineStmt {:#?}", n.kind()), } }, @@ -814,6 +817,7 @@ fn custom_handlers(node: &Node) -> TokenStream { "CompositeTypeStmt" => quote! { tokens.push(TokenProperty::from(Token::Create)); tokens.push(TokenProperty::from(Token::TypeP)); + tokens.push(TokenProperty::from(Token::As)); }, "CreatedbStmt" => quote! { tokens.push(TokenProperty::from(Token::Create)); diff --git a/crates/parser/src/codegen.rs b/crates/parser/src/codegen.rs index 7905e271..0dd1cbad 100644 --- a/crates/parser/src/codegen.rs +++ b/crates/parser/src/codegen.rs @@ -272,12 +272,26 @@ mod tests { #[test] fn test_create_type() { + test_get_node_properties( + "create type type1", + SyntaxKind::DefineStmt, + vec![ + TokenProperty::from(SyntaxKind::Create), + TokenProperty::from(SyntaxKind::TypeP), + TokenProperty::from("type1".to_string()), + ], + ) + } + + #[test] + fn test_create_composite_type() { test_get_node_properties( "create type type1 as (attr1 int4, attr2 bool);", SyntaxKind::CompositeTypeStmt, vec![ TokenProperty::from(SyntaxKind::Create), TokenProperty::from(SyntaxKind::TypeP), + TokenProperty::from(SyntaxKind::As), ], ) } diff --git a/crates/parser/src/parse/statement_start.rs b/crates/parser/src/parse/statement_start.rs index 1baca2b9..05c2076c 100644 --- a/crates/parser/src/parse/statement_start.rs +++ b/crates/parser/src/parse/statement_start.rs @@ -191,25 +191,57 @@ pub static STATEMENT_START_TOKEN_MAPS: LazyLock