diff --git a/crates/squawk_ide/src/tokens.rs b/crates/squawk_ide/src/tokens.rs index 7edd3568..b5066786 100644 --- a/crates/squawk_ide/src/tokens.rs +++ b/crates/squawk_ide/src/tokens.rs @@ -6,6 +6,7 @@ pub(crate) fn is_string_or_comment(kind: SyntaxKind) -> bool { SyntaxKind::COMMENT | SyntaxKind::STRING | SyntaxKind::BYTE_STRING + | SyntaxKind::UNICODE_ESC_STRING | SyntaxKind::BIT_STRING | SyntaxKind::DOLLAR_QUOTED_STRING | SyntaxKind::ESC_STRING diff --git a/crates/squawk_parser/src/generated/syntax_kind.rs b/crates/squawk_parser/src/generated/syntax_kind.rs index 8ed5f408..1b372638 100644 --- a/crates/squawk_parser/src/generated/syntax_kind.rs +++ b/crates/squawk_parser/src/generated/syntax_kind.rs @@ -546,6 +546,7 @@ pub enum SyntaxKind { NULL, POSITIONAL_PARAM, STRING, + UNICODE_ESC_STRING, COMMENT, ERROR, IDENT, diff --git a/crates/squawk_parser/src/grammar.rs b/crates/squawk_parser/src/grammar.rs index 5d68d1bb..41a87500 100644 --- a/crates/squawk_parser/src/grammar.rs +++ b/crates/squawk_parser/src/grammar.rs @@ -35,7 +35,7 @@ fn literal(p: &mut Parser<'_>) -> Option { return None; } let m = p.start(); - if p.eat(BYTE_STRING) { + if p.eat(UNICODE_ESC_STRING) { if p.eat(UESCAPE_KW) { p.eat(STRING); } @@ -4802,6 +4802,7 @@ const NUMERIC_FIRST: TokenSet = TokenSet::new(&[INT_NUMBER, FLOAT_NUMBER]); const STRING_FIRST: TokenSet = TokenSet::new(&[ STRING, BYTE_STRING, + UNICODE_ESC_STRING, BIT_STRING, DOLLAR_QUOTED_STRING, ESC_STRING, diff --git a/crates/squawk_parser/src/lexed_str.rs b/crates/squawk_parser/src/lexed_str.rs index 871eb2fb..411b5c9c 100644 --- a/crates/squawk_parser/src/lexed_str.rs +++ b/crates/squawk_parser/src/lexed_str.rs @@ -284,7 +284,7 @@ impl<'a> Converter<'a> { err = "Missing trailing `'` symbol to terminate the unicode escape string literal"; } // TODO: rust analzyer checks for un-escaped strings, we should too - SyntaxKind::BYTE_STRING + SyntaxKind::UNICODE_ESC_STRING } squawk_lexer::LiteralKind::EscStr { terminated } => { if !terminated { diff --git a/crates/squawk_parser/src/lib.rs b/crates/squawk_parser/src/lib.rs index 06ca8cef..7de8de2f 100644 --- a/crates/squawk_parser/src/lib.rs +++ b/crates/squawk_parser/src/lib.rs @@ -424,24 +424,6 @@ impl<'t> Parser<'t> { m.complete(self, SyntaxKind::IS_NOT); return true; } - // SyntaxKind::BYTE_STRING => { - // let m = self.start(); - // self.bump(SyntaxKind::BYTE_STRING); - // if self.eat(SyntaxKind::UESCAPE_KW) { - // self.expect(SyntaxKind::STRING); - // } - // m.complete(self, SyntaxKind::BYTE_STRING); - // return true; - // } - // SyntaxKind::IDENT => { - // let m = self.start(); - // self.bump(SyntaxKind::IDENT); - // if self.eat(SyntaxKind::UESCAPE_KW) { - // self.expect(SyntaxKind::STRING); - // } - // m.complete(self, SyntaxKind::IDENT); - // return true; - // } SyntaxKind::CUSTOM_OP => { let m = self.start(); while !self.at(SyntaxKind::EOF) { diff --git a/crates/squawk_parser/tests/snapshots/tests__select_ok.snap b/crates/squawk_parser/tests/snapshots/tests__select_ok.snap index e9dde86a..ecc023f5 100644 --- a/crates/squawk_parser/tests/snapshots/tests__select_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__select_ok.snap @@ -6234,7 +6234,7 @@ SOURCE_FILE TARGET_LIST TARGET LITERAL - BYTE_STRING "U&' \\'" + UNICODE_ESC_STRING "U&' \\'" WHITESPACE " " UESCAPE_KW "UESCAPE" WHITESPACE " " diff --git a/crates/squawk_parser/tests/snapshots/tests__select_operators_ok.snap b/crates/squawk_parser/tests/snapshots/tests__select_operators_ok.snap index c30f6d75..571fd0de 100644 --- a/crates/squawk_parser/tests/snapshots/tests__select_operators_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__select_operators_ok.snap @@ -1744,7 +1744,7 @@ SOURCE_FILE TARGET POSTFIX_EXPR LITERAL - BYTE_STRING "U&'\\0061\\0308bc'" + UNICODE_ESC_STRING "U&'\\0061\\0308bc'" WHITESPACE " " IS_NORMALIZED IS_KW "is" @@ -1760,7 +1760,7 @@ SOURCE_FILE TARGET POSTFIX_EXPR LITERAL - BYTE_STRING "U&'\\0061\\0308bc'" + UNICODE_ESC_STRING "U&'\\0061\\0308bc'" WHITESPACE " " IS_NORMALIZED IS_KW "is" @@ -1778,7 +1778,7 @@ SOURCE_FILE TARGET POSTFIX_EXPR LITERAL - BYTE_STRING "U&'\\0061\\0308bc'" + UNICODE_ESC_STRING "U&'\\0061\\0308bc'" WHITESPACE " " IS_NORMALIZED IS_KW "is" @@ -1796,7 +1796,7 @@ SOURCE_FILE TARGET POSTFIX_EXPR LITERAL - BYTE_STRING "U&'\\0061\\0308bc'" + UNICODE_ESC_STRING "U&'\\0061\\0308bc'" WHITESPACE " " IS_NORMALIZED IS_KW "is" @@ -1814,7 +1814,7 @@ SOURCE_FILE TARGET POSTFIX_EXPR LITERAL - BYTE_STRING "U&'\\0061\\0308bc'" + UNICODE_ESC_STRING "U&'\\0061\\0308bc'" WHITESPACE " " IS_NORMALIZED IS_KW "is" @@ -1832,7 +1832,7 @@ SOURCE_FILE TARGET BIN_EXPR LITERAL - BYTE_STRING "U&'\\0061\\0308bc'" + UNICODE_ESC_STRING "U&'\\0061\\0308bc'" WHITESPACE " " IS_NOT IS_KW "is" diff --git a/crates/squawk_syntax/src/postgresql.ungram b/crates/squawk_syntax/src/postgresql.ungram index e534be42..36376e87 100644 --- a/crates/squawk_syntax/src/postgresql.ungram +++ b/crates/squawk_syntax/src/postgresql.ungram @@ -347,6 +347,7 @@ Literal = | '@byte_string' | '@bit_string' | '@dollar_quoted_string' + | '@unicode_esc_string' | '@esc_string' | '@positional_param' )