Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
cfffc28
ack
juleswritescode Dec 21, 2025
d27a3de
so far
juleswritescode Dec 23, 2025
1c08b28
ack
juleswritescode Dec 23, 2025
09efc03
grammar updates
juleswritescode Dec 28, 2025
7642b4e
ts crates
juleswritescode Dec 28, 2025
dcc7b7c
tests
juleswritescode Dec 28, 2025
acfbf0a
not snaps
juleswritescode Dec 28, 2025
c844cce
lock file
juleswritescode Dec 28, 2025
9ec1c85
ok
juleswritescode Dec 28, 2025
f1d04dd
ok
juleswritescode Dec 28, 2025
7422628
guidelines
juleswritescode Jan 2, 2026
1c095af
ack
juleswritescode Jan 2, 2026
a2e6704
grandma
juleswritescode Jan 2, 2026
5395716
grammar
juleswritescode Jan 2, 2026
6884c3e
proviers
juleswritescode Jan 2, 2026
c95ad04
helper
juleswritescode Jan 2, 2026
0b1a69e
ack
juleswritescode Jan 3, 2026
75d8bf8
that snap looks good
juleswritescode Jan 3, 2026
9d3df7c
ok
juleswritescode Jan 3, 2026
985bc71
intermediary
juleswritescode Jan 9, 2026
4e888a3
nah
juleswritescode Jan 9, 2026
197818a
change
juleswritescode Jan 9, 2026
7245e4a
gosh
juleswritescode Jan 10, 2026
38a4493
comment, use more involved filtering
juleswritescode Jan 10, 2026
4105a7d
so far, 1 test failing
juleswritescode Jan 10, 2026
899ef56
all tests pass, happiness ensues
juleswritescode Jan 10, 2026
8a1b9c2
so far…
juleswritescode Jan 10, 2026
ea1fb91
ack
juleswritescode Jan 10, 2026
0015322
ack
juleswritescode Jan 10, 2026
ddb0806
many snaps
juleswritescode Jan 10, 2026
ca9d210
accept
juleswritescode Jan 10, 2026
da3d064
ok
juleswritescode Jan 10, 2026
18ec90f
fix many tests
juleswritescode Jan 10, 2026
8d7ae8d
next
juleswritescode Jan 10, 2026
5b89b0f
update
juleswritescode Jan 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
{
"postgres-language-server.bin": "./target/debug/postgres-language-server"
"postgres-language-server.bin": "./target/debug/postgres-language-server",
"rust-analyzer.cargo.targetDir": "./target/rust-analyzer/debug"
}
2 changes: 2 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 3 additions & 1 deletion crates/pgls_completions/src/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,12 @@ impl<'a> CompletionBuilder<'a> {
}

pub fn finish(self) -> Vec<CompletionItem> {
let mut shared_tree = self.ctx.tree.clone();

let mut items: Vec<PossibleCompletionItem> = self
.items
.into_iter()
.filter(|i| i.filter.is_relevant(self.ctx).is_some())
.filter(|i| i.filter.is_relevant(self.ctx, &mut shared_tree).is_some())
.collect();

for item in items.iter_mut() {
Expand Down
12 changes: 10 additions & 2 deletions crates/pgls_completions/src/complete.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ use crate::{
builder::CompletionBuilder,
item::CompletionItem,
providers::{
complete_columns, complete_functions, complete_policies, complete_roles, complete_schemas,
complete_tables,
complete_columns, complete_functions, complete_keywords, complete_policies, complete_roles,
complete_schemas, complete_tables,
},
sanitization::SanitizedCompletionParams,
};
Expand All @@ -27,6 +27,13 @@ pub struct CompletionParams<'a> {
position = params.position.to_string()
))]
pub fn complete(params: CompletionParams) -> Vec<CompletionItem> {
let uses_upper_case = params
.text
.split_ascii_whitespace()
// filter out special chars and numbers
.filter(|word| word.chars().all(|c| c.is_alphabetic()))
.any(|t| t == t.to_ascii_uppercase());

let sanitized_params = SanitizedCompletionParams::from(params);

let ctx = TreesitterContext::new(TreeSitterContextParams {
Expand All @@ -43,6 +50,7 @@ pub fn complete(params: CompletionParams) -> Vec<CompletionItem> {
complete_schemas(&ctx, sanitized_params.schema, &mut builder);
complete_policies(&ctx, sanitized_params.schema, &mut builder);
complete_roles(&ctx, sanitized_params.schema, &mut builder);
complete_keywords(&ctx, &mut builder, uses_upper_case);

builder.finish()
}
2 changes: 2 additions & 0 deletions crates/pgls_completions/src/item.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ pub enum CompletionItemKind {
Schema,
Policy,
Role,
Keyword,
}

impl Display for CompletionItemKind {
Expand All @@ -24,6 +25,7 @@ impl Display for CompletionItemKind {
CompletionItemKind::Schema => "Schema",
CompletionItemKind::Policy => "Policy",
CompletionItemKind::Role => "Role",
CompletionItemKind::Keyword => "Keyword",
};

write!(f, "{txt}")
Expand Down
7 changes: 5 additions & 2 deletions crates/pgls_completions/src/providers/columns.rs
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,12 @@ fn get_completion_text(ctx: &TreesitterContext, col: &Column) -> CompletionText
#[cfg(test)]
mod tests {

use pgls_test_utils::QueryWithCursorPosition;
use sqlx::PgPool;

use crate::test_helper::{TestCompletionsCase, TestCompletionsSuite};
use crate::test_helper::{
TestCompletionsCase, TestCompletionsSuite, assert_no_complete_results,
};

#[sqlx::test(migrator = "pgls_test_utils::MIGRATIONS")]
async fn handles_nested_queries(pool: PgPool) {
Expand Down Expand Up @@ -440,7 +443,7 @@ mod tests {
"select name from instruments i join others o on i.z = o.a <sql>",
)
.type_sql("where o.<1>a = <2>i.z and <3>i.id > 5;")
.comment("should respect alias speciifcation")
.comment("should respect alias specification")
.comment("should not prioritize suggest columns or schemas (right side of binary expression)")
.comment("should prioritize columns that aren't already mentioned"),
)
Expand Down
Loading
Loading