diff --git a/crates/squawk_parser/src/generated/syntax_kind.rs b/crates/squawk_parser/src/generated/syntax_kind.rs index 797ed233..c0180845 100644 --- a/crates/squawk_parser/src/generated/syntax_kind.rs +++ b/crates/squawk_parser/src/generated/syntax_kind.rs @@ -847,6 +847,7 @@ pub enum SyntaxKind { NAME_REF, NEQ, NEQB, + NON_STANDARD_PARAM, NOTIFY, NOT_DEFERRABLE, NOT_DEFERRABLE_CONSTRAINT_OPTION, diff --git a/crates/squawk_parser/src/grammar.rs b/crates/squawk_parser/src/grammar.rs index 8d005139..7e48425f 100644 --- a/crates/squawk_parser/src/grammar.rs +++ b/crates/squawk_parser/src/grammar.rs @@ -1254,6 +1254,11 @@ fn lhs(p: &mut Parser<'_>, r: &Restrictions) -> Option { p.bump_any(); (PREFIX_EXPR, 13) } + COLON => { + m = p.start(); + p.bump(COLON); + (NON_STANDARD_PARAM, 7) + } _ if p.at_ts(OPERATOR_FIRST) && p.at(CUSTOM_OP) => { m = p.start(); p.bump(CUSTOM_OP); diff --git a/crates/squawk_syntax/src/ast/generated/nodes.rs b/crates/squawk_syntax/src/ast/generated/nodes.rs index d23f0af2..b9ed84a3 100644 --- a/crates/squawk_syntax/src/ast/generated/nodes.rs +++ b/crates/squawk_syntax/src/ast/generated/nodes.rs @@ -6310,6 +6310,21 @@ impl NoInherit { } } +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct NonStandardParam { + pub(crate) syntax: SyntaxNode, +} +impl NonStandardParam { + #[inline] + pub fn name_ref(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn colon_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::COLON) + } +} + #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct NotDeferrable { pub(crate) syntax: SyntaxNode, @@ -15481,6 +15496,24 @@ impl AstNode for NoInherit { &self.syntax } } +impl AstNode for NonStandardParam { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + kind == SyntaxKind::NON_STANDARD_PARAM + } + #[inline] + fn cast(syntax: SyntaxNode) -> Option { + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + #[inline] + fn syntax(&self) -> &SyntaxNode { + &self.syntax + } +} impl AstNode for NotDeferrable { #[inline] fn can_cast(kind: SyntaxKind) -> bool { diff --git a/crates/squawk_syntax/src/postgresql.ungram b/crates/squawk_syntax/src/postgresql.ungram index 6036c437..384cbf37 100644 --- a/crates/squawk_syntax/src/postgresql.ungram +++ b/crates/squawk_syntax/src/postgresql.ungram @@ -928,6 +928,9 @@ PrefixExpr = PostfixExpr = Expr +NonStandardParam = + ':' NameRef + IndexExpr = base:Expr '[' index:Expr ']'