diff --git a/crates/pgt_completions/src/builder.rs b/crates/pgt_completions/src/builder.rs index 127a3405..40d29db4 100644 --- a/crates/pgt_completions/src/builder.rs +++ b/crates/pgt_completions/src/builder.rs @@ -86,7 +86,7 @@ fn should_preselect_first_item(items: &Vec) -> bool { let second = items_iter.next(); first.is_some_and(|f| match second { - Some(s) => (f.score.get_score() - s.score.get_score()) > 10, + Some(s) => (f.score.get_score() - s.score.get_score()) > 15, None => true, - }) + }) && items.len() >= 10 } diff --git a/crates/pgt_statement_splitter/src/lib.rs b/crates/pgt_statement_splitter/src/lib.rs index 5f6ca92f..e44f20f1 100644 --- a/crates/pgt_statement_splitter/src/lib.rs +++ b/crates/pgt_statement_splitter/src/lib.rs @@ -333,4 +333,21 @@ values ('insert', new.id, now());", "select 3", ]); } + + #[test] + fn commas_and_newlines() { + Tester::from( + " + select + email, + + + from + auth.users; + ", + ) + .expect_statements(vec![ + "select\n email,\n\n\n from\n auth.users;", + ]); + } } diff --git a/crates/pgt_statement_splitter/src/parser/common.rs b/crates/pgt_statement_splitter/src/parser/common.rs index 56d8d86a..d5398016 100644 --- a/crates/pgt_statement_splitter/src/parser/common.rs +++ b/crates/pgt_statement_splitter/src/parser/common.rs @@ -138,11 +138,21 @@ pub(crate) fn unknown(p: &mut Parser, exclude: &[SyntaxKind]) { break; } Token { - kind: SyntaxKind::Newline | SyntaxKind::Eof, + kind: SyntaxKind::Eof, .. } => { break; } + Token { + kind: SyntaxKind::Newline, + .. + } => { + if p.look_back().is_some_and(|t| t.kind == SyntaxKind::Ascii44) { + p.advance(); + } else { + break; + } + } Token { kind: SyntaxKind::Case, ..