From 0b7c7dd62addf990a55689efa4e5806affa20659 Mon Sep 17 00:00:00 2001 From: Julian Date: Fri, 26 Sep 2025 11:39:55 +0200 Subject: [PATCH 1/4] fix: do not push expectation errors to EOF --- crates/pgt_statement_splitter/src/lib.rs | 8 ++++++++ crates/pgt_statement_splitter/src/splitter.rs | 8 +++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/crates/pgt_statement_splitter/src/lib.rs b/crates/pgt_statement_splitter/src/lib.rs index 6fb81c092..e8df7e9f0 100644 --- a/crates/pgt_statement_splitter/src/lib.rs +++ b/crates/pgt_statement_splitter/src/lib.rs @@ -519,4 +519,12 @@ values ('insert', new.id, now());", "select\n email,\n\n\n from\n auth.users;", ]); } + + #[test] + fn does_not_panic_on_eof_expectation() { + Tester::from("insert").expect_errors(vec![SplitDiagnostic::new( + format!("Expected INTO_KW"), + TextRange::new(0.into(), 6.into()), + )]); + } } diff --git a/crates/pgt_statement_splitter/src/splitter.rs b/crates/pgt_statement_splitter/src/splitter.rs index 9061999ea..2905a3e7d 100644 --- a/crates/pgt_statement_splitter/src/splitter.rs +++ b/crates/pgt_statement_splitter/src/splitter.rs @@ -168,9 +168,15 @@ impl<'a> Splitter<'a> { if self.current() == kind { self.advance(); } else { + let token = if self.current() == SyntaxKind::EOF { + self.current_pos - 1 + } else { + self.current_pos + }; + self.errors.push(SplitError { msg: format!("Expected {:#?}", kind), - token: self.current_pos, + token, }); } } From e8d58348e2aea2d6f4fe707195fca6a1ba4d5e5f Mon Sep 17 00:00:00 2001 From: Julian Date: Fri, 26 Sep 2025 11:42:23 +0200 Subject: [PATCH 2/4] assertion --- crates/pgt_lexer/src/lexed.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/pgt_lexer/src/lexed.rs b/crates/pgt_lexer/src/lexed.rs index 6f0a273f9..08286bbfc 100644 --- a/crates/pgt_lexer/src/lexed.rs +++ b/crates/pgt_lexer/src/lexed.rs @@ -92,7 +92,7 @@ impl Lexed<'_> { } pub(crate) fn text_range(&self, i: usize) -> TextRange { - assert!(i < self.len()); + assert!(i < self.len() - 1); let lo = self.start[i]; let hi = self.start[i + 1]; TextRange::new(lo.into(), hi.into()) From b3777bf5839a192fe4a9e80cb5cd1f4b3d74210c Mon Sep 17 00:00:00 2001 From: Julian Date: Fri, 26 Sep 2025 11:54:39 +0200 Subject: [PATCH 3/4] squielex --- ...b71cf2472fa8afc0b24bf02ee1bfdfdbf111acfc8.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/.sqlx/query-aced4382cedbfc359bb1c1ab71cf2472fa8afc0b24bf02ee1bfdfdbf111acfc8.json b/.sqlx/query-aced4382cedbfc359bb1c1ab71cf2472fa8afc0b24bf02ee1bfdfdbf111acfc8.json index a32c84237..398f0ee20 100644 --- a/.sqlx/query-aced4382cedbfc359bb1c1ab71cf2472fa8afc0b24bf02ee1bfdfdbf111acfc8.json +++ b/.sqlx/query-aced4382cedbfc359bb1c1ab71cf2472fa8afc0b24bf02ee1bfdfdbf111acfc8.json @@ -67,7 +67,20 @@ "parameters": { "Left": [] }, - "nullable": [null, false, false, false, false, false, null, null, null, null, null, null] + "nullable": [ + null, + false, + false, + false, + false, + false, + null, + null, + null, + null, + null, + null + ] }, "hash": "aced4382cedbfc359bb1c1ab71cf2472fa8afc0b24bf02ee1bfdfdbf111acfc8" } From ad686fdbf3cf52e4624fd613c8492861c8e41bab Mon Sep 17 00:00:00 2001 From: Julian Date: Fri, 26 Sep 2025 12:14:45 +0200 Subject: [PATCH 4/4] OK THEN --- crates/pgt_statement_splitter/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/pgt_statement_splitter/src/lib.rs b/crates/pgt_statement_splitter/src/lib.rs index e8df7e9f0..a9d6000e8 100644 --- a/crates/pgt_statement_splitter/src/lib.rs +++ b/crates/pgt_statement_splitter/src/lib.rs @@ -523,7 +523,7 @@ values ('insert', new.id, now());", #[test] fn does_not_panic_on_eof_expectation() { Tester::from("insert").expect_errors(vec![SplitDiagnostic::new( - format!("Expected INTO_KW"), + "Expected INTO_KW".to_string(), TextRange::new(0.into(), 6.into()), )]); }