Skip to content

Commit 84b772d

Browse files
authored
parser: fill out create type as enum nodes (#685)
1 parent 95a460a commit 84b772d

File tree

7 files changed

+158
-28
lines changed

7 files changed

+158
-28
lines changed

crates/squawk_ide/src/expand_selection.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ const ALL_LIST_KINDS: &[SyntaxKind] = &[
5151
SyntaxKind::TARGET_LIST,
5252
SyntaxKind::TRANSACTION_MODE_LIST,
5353
SyntaxKind::VACUUM_OPTION_LIST,
54+
SyntaxKind::VARIANT_LIST,
5455
// only separated by whitespace
5556
// SyntaxKind::XML_COLUMN_OPTION_LIST,
5657
SyntaxKind::XML_TABLE_COLUMN_LIST,
@@ -572,6 +573,7 @@ $0
572573
TARGET_LIST,
573574
TRANSACTION_MODE_LIST,
574575
VACUUM_OPTION_LIST,
576+
VARIANT_LIST,
575577
XML_TABLE_COLUMN_LIST,
576578
]
577579
");

crates/squawk_parser/src/generated/syntax_kind.rs

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/squawk_parser/src/grammar.rs

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12926,15 +12926,7 @@ fn create_type(p: &mut Parser<'_>) -> CompletedMarker {
1292612926
if p.eat(AS_KW) {
1292712927
// AS ENUM
1292812928
if p.eat(ENUM_KW) {
12929-
delimited(
12930-
p,
12931-
L_PAREN,
12932-
R_PAREN,
12933-
COMMA,
12934-
|| "unexpected comma".to_string(),
12935-
STRING_FIRST,
12936-
|p| opt_string_literal(p).is_some(),
12937-
);
12929+
variant_list(p);
1293812930
// AS RANGE
1293912931
} else if p.eat(RANGE_KW) {
1294012932
attribute_list(p);
@@ -12959,6 +12951,30 @@ fn create_type(p: &mut Parser<'_>) -> CompletedMarker {
1295912951
m.complete(p, CREATE_TYPE)
1296012952
}
1296112953

12954+
fn opt_variant(p: &mut Parser<'_>) -> bool {
12955+
let m = p.start();
12956+
if opt_string_literal(p).is_none() {
12957+
m.abandon(p);
12958+
return false;
12959+
}
12960+
m.complete(p, VARIANT);
12961+
true
12962+
}
12963+
12964+
fn variant_list(p: &mut Parser<'_>) {
12965+
let m = p.start();
12966+
delimited(
12967+
p,
12968+
L_PAREN,
12969+
R_PAREN,
12970+
COMMA,
12971+
|| "unexpected comma".to_string(),
12972+
STRING_FIRST,
12973+
opt_variant,
12974+
);
12975+
m.complete(p, VARIANT_LIST);
12976+
}
12977+
1296212978
// CREATE EXTENSION [ IF NOT EXISTS ] extension_name
1296312979
// [ WITH ] [ SCHEMA schema_name ]
1296412980
// [ VERSION version ]

crates/squawk_parser/tests/snapshots/tests__create_type_ok.snap

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,9 @@ SOURCE_FILE
125125
WHITESPACE " "
126126
ENUM_KW "enum"
127127
WHITESPACE " "
128-
L_PAREN "("
129-
R_PAREN ")"
128+
VARIANT_LIST
129+
L_PAREN "("
130+
R_PAREN ")"
130131
SEMICOLON ";"
131132
WHITESPACE "\n"
132133
CREATE_TYPE
@@ -143,10 +144,12 @@ SOURCE_FILE
143144
WHITESPACE " "
144145
ENUM_KW "enum"
145146
WHITESPACE " "
146-
L_PAREN "("
147-
LITERAL
148-
STRING "'a'"
149-
R_PAREN ")"
147+
VARIANT_LIST
148+
L_PAREN "("
149+
VARIANT
150+
LITERAL
151+
STRING "'a'"
152+
R_PAREN ")"
150153
SEMICOLON ";"
151154
WHITESPACE "\n"
152155
CREATE_TYPE
@@ -163,18 +166,22 @@ SOURCE_FILE
163166
WHITESPACE " "
164167
ENUM_KW "enum"
165168
WHITESPACE " "
166-
L_PAREN "("
167-
LITERAL
168-
STRING "'a'"
169-
COMMA ","
170-
WHITESPACE " "
171-
LITERAL
172-
STRING "'b'"
173-
COMMA ","
174-
WHITESPACE " "
175-
LITERAL
176-
STRING "'c'"
177-
R_PAREN ")"
169+
VARIANT_LIST
170+
L_PAREN "("
171+
VARIANT
172+
LITERAL
173+
STRING "'a'"
174+
COMMA ","
175+
WHITESPACE " "
176+
VARIANT
177+
LITERAL
178+
STRING "'b'"
179+
COMMA ","
180+
WHITESPACE " "
181+
VARIANT
182+
LITERAL
183+
STRING "'c'"
184+
R_PAREN ")"
178185
SEMICOLON ";"
179186
WHITESPACE "\n\n"
180187
COMMENT "-- create_type_as_range"

crates/squawk_syntax/src/ast/generated/nodes.rs

Lines changed: 90 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/squawk_syntax/src/postgresql.ungram

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1627,6 +1627,19 @@ IndexParams =
16271627
CreateType =
16281628
'create' 'type' Type
16291629

1630+
(('as' 'enum' VariantList)
1631+
| ('as' 'range' )
1632+
| ('as' '(' ')')
1633+
| ('(' ')'))
1634+
1635+
VariantList =
1636+
'('
1637+
(Variant (',' Variant)*)
1638+
')'
1639+
1640+
Variant =
1641+
Literal
1642+
16301643
CreateExtension =
16311644
'create' 'extension'
16321645

crates/squawk_wasm/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ pub fn dump_tokens(text: String) -> String {
4040
out
4141
}
4242

43-
#[allow(dead_code)]
43+
#[expect(unused)]
4444
#[derive(Serialize)]
4545
enum Severity {
4646
Hint,

0 commit comments

Comments
 (0)