Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
ok
  • Loading branch information
juleswritescode committed Sep 8, 2025
commit dc1bc13950b869cbecea4a872774d67c02d9d961
2 changes: 0 additions & 2 deletions crates/pgt_completions/src/complete.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,6 @@ pub fn complete(params: CompletionParams) -> Vec<CompletionItem> {
tree: &sanitized_params.tree,
});

println!("{:#?}", ctx);

let mut builder = CompletionBuilder::new(&ctx);

complete_tables(&ctx, sanitized_params.schema, &mut builder);
Expand Down
66 changes: 48 additions & 18 deletions crates/pgt_completions/src/providers/columns.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use pgt_treesitter::TreesitterContext;
use crate::{
CompletionItemKind, CompletionText,
builder::{CompletionBuilder, PossibleCompletionItem},
providers::helper::{get_range_to_replace, with_closed_quote},
providers::helper::get_range_to_replace,
relevance::{CompletionRelevanceData, filtering::CompletionFilter, scoring::CompletionScore},
};

Expand All @@ -18,10 +18,6 @@ pub fn complete_columns<'a>(
let available_columns = &schema_cache.columns;

for col in available_columns {
if col.name.as_str() != "email" {
continue;
}

let relevance = CompletionRelevanceData::Column(col);

let item = PossibleCompletionItem {
Expand All @@ -44,7 +40,7 @@ fn get_completion_text(ctx: &TreesitterContext, col: &Column) -> CompletionText
let with_schema_or_alias =
with_schema_or_alias(ctx, col.name.as_str(), alias.as_ref().map(|s| s.as_str()));

let range = get_range_to_replace(ctx, &with_schema_or_alias);
let range = get_range_to_replace(ctx);

CompletionText {
is_snippet: false,
Expand Down Expand Up @@ -1146,10 +1142,24 @@ mod tests {
);
assert_complete_results(
query.as_str(),
vec![CompletionAssertion::CompletionTextAndRange(
r#""pr".email"#.into(),
TextRange::new(7.into(), 7.into()),
)],
vec![
CompletionAssertion::CompletionTextAndRange(
"n.name".into(),
TextRange::new(7.into(), 7.into()),
),
CompletionAssertion::CompletionTextAndRange(
"n.uid".into(),
TextRange::new(7.into(), 7.into()),
),
CompletionAssertion::CompletionTextAndRange(
r#""pr".email"#.into(),
TextRange::new(7.into(), 7.into()),
),
CompletionAssertion::CompletionTextAndRange(
r#""pr".id"#.into(),
TextRange::new(7.into(), 7.into()),
),
],
None,
&pool,
)
Expand All @@ -1164,10 +1174,24 @@ mod tests {
);
assert_complete_results(
query.as_str(),
vec![CompletionAssertion::CompletionTextAndRange(
r#""pr"."email""#.into(),
TextRange::new(7.into(), 9.into()),
)],
vec![
CompletionAssertion::CompletionTextAndRange(
r#""n"."name""#.into(),
TextRange::new(7.into(), 9.into()),
),
CompletionAssertion::CompletionTextAndRange(
r#""n"."uid""#.into(),
TextRange::new(7.into(), 9.into()),
),
CompletionAssertion::CompletionTextAndRange(
r#""pr"."email""#.into(),
TextRange::new(7.into(), 9.into()),
),
CompletionAssertion::CompletionTextAndRange(
r#""pr"."id""#.into(),
TextRange::new(7.into(), 9.into()),
),
],
None,
&pool,
)
Expand All @@ -1182,10 +1206,16 @@ mod tests {
);
assert_complete_results(
query.as_str(),
vec![CompletionAssertion::CompletionTextAndRange(
r#""pr"."email""#.into(),
TextRange::new(7.into(), 8.into()),
)],
vec![
CompletionAssertion::CompletionTextAndRange(
r#""pr"."email""#.into(),
TextRange::new(7.into(), 8.into()),
),
CompletionAssertion::CompletionTextAndRange(
r#""pr"."id""#.into(),
TextRange::new(7.into(), 8.into()),
),
],
None,
&pool,
)
Expand Down
2 changes: 1 addition & 1 deletion crates/pgt_completions/src/providers/functions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ fn get_completion_text(ctx: &TreesitterContext, func: &Function) -> CompletionTe
let closed_quote = with_closed_quote(ctx, &func.name);
let mut text = with_schema_or_alias(ctx, closed_quote.as_str(), Some(func.schema.as_str()));

let range = get_range_to_replace(ctx, text.as_str());
let range = get_range_to_replace(ctx);

if ctx.is_invocation {
CompletionText {
Expand Down
2 changes: 1 addition & 1 deletion crates/pgt_completions/src/providers/helper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ pub(crate) fn node_text_surrounded_by_quotes(ctx: &TreesitterContext) -> bool {
.is_some_and(|c| c.starts_with('"') && c.ends_with('"') && c.len() > 1)
}

pub(crate) fn get_range_to_replace(ctx: &TreesitterContext, completion_text: &str) -> TextRange {
pub(crate) fn get_range_to_replace(ctx: &TreesitterContext) -> TextRange {
match ctx.node_under_cursor.as_ref() {
Some(node) => {
let content = ctx.get_node_under_cursor_content().unwrap_or("".into());
Expand Down
2 changes: 1 addition & 1 deletion crates/pgt_completions/src/providers/policies.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ pub fn complete_policies<'a>(

let relevance = CompletionRelevanceData::Policy(pol);

let range = get_range_to_replace(ctx, text.as_str());
let range = get_range_to_replace(ctx);

let item = PossibleCompletionItem {
label: pol.name.chars().take(35).collect::<String>(),
Expand Down
60 changes: 30 additions & 30 deletions crates/pgt_completions/src/providers/tables.rs
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ fn get_completion_text(ctx: &TreesitterContext, table: &Table) -> CompletionText
let closed_quote = with_closed_quote(ctx, &table.name);
let text = with_schema_or_alias(ctx, closed_quote.as_str(), Some(table.schema.as_str()));

let range = get_range_to_replace(ctx, &text);
let range = get_range_to_replace(ctx);

CompletionText {
text,
Expand Down Expand Up @@ -345,35 +345,35 @@ mod tests {

pool.execute(setup).await.unwrap();

// assert_no_complete_results(
// format!("delete {}", QueryWithCursorPosition::cursor_marker()).as_str(),
// None,
// &pool,
// )
// .await;

// assert_complete_results(
// format!("delete from {}", QueryWithCursorPosition::cursor_marker()).as_str(),
// vec![
// CompletionAssertion::LabelAndKind("public".into(), CompletionItemKind::Schema),
// CompletionAssertion::LabelAndKind("coos".into(), CompletionItemKind::Table),
// ],
// None,
// &pool,
// )
// .await;

// assert_complete_results(
// format!(
// "delete from public.{}",
// QueryWithCursorPosition::cursor_marker()
// )
// .as_str(),
// vec![CompletionAssertion::Label("coos".into())],
// None,
// &pool,
// )
// .await;
assert_no_complete_results(
format!("delete {}", QueryWithCursorPosition::cursor_marker()).as_str(),
None,
&pool,
)
.await;

assert_complete_results(
format!("delete from {}", QueryWithCursorPosition::cursor_marker()).as_str(),
vec![
CompletionAssertion::LabelAndKind("public".into(), CompletionItemKind::Schema),
CompletionAssertion::LabelAndKind("coos".into(), CompletionItemKind::Table),
],
None,
&pool,
)
.await;

assert_complete_results(
format!(
"delete from public.{}",
QueryWithCursorPosition::cursor_marker()
)
.as_str(),
vec![CompletionAssertion::Label("coos".into())],
None,
&pool,
)
.await;

assert_complete_results(
format!(
Expand Down
2 changes: 1 addition & 1 deletion crates/pgt_completions/src/relevance/scoring.rs
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ impl CompletionScore<'_> {
Some(ct) => ct,
};

let has_mentioned_tables = ctx.has_mentioned_relations();
let has_mentioned_tables = ctx.has_any_mentioned_relations();
let has_mentioned_schema = ctx.schema_or_alias_name.is_some();

self.score += match self.data {
Expand Down
14 changes: 0 additions & 14 deletions crates/pgt_completions/src/test_helper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,6 @@ pub(crate) enum CompletionAssertion {
LabelAndDesc(String, String),
LabelNotExists(String),
KindNotExists(CompletionItemKind),
CompletionText(String),
CompletionTextAndRange(String, TextRange),
}

Expand Down Expand Up @@ -130,18 +129,6 @@ impl CompletionAssertion {
desc, &item.description
);
}
CompletionAssertion::CompletionText(txt) => {
assert_eq!(
item.completion_text.as_ref().map(|t| t.text.as_str()),
Some(txt.as_str()),
"Expected completion text to be {}, but got {}",
txt,
item.completion_text
.as_ref()
.map(|t| t.text.clone())
.unwrap_or("None".to_string())
);
}
CompletionAssertion::CompletionTextAndRange(txt, text_range) => {
assert_eq!(
item.completion_text.as_ref().map(|t| t.text.as_str()),
Expand Down Expand Up @@ -184,7 +171,6 @@ pub(crate) async fn assert_complete_results(
CompletionAssertion::LabelNotExists(_) | CompletionAssertion::KindNotExists(_) => true,
CompletionAssertion::Label(_)
| CompletionAssertion::LabelAndKind(_, _)
| CompletionAssertion::CompletionText(_)
| CompletionAssertion::CompletionTextAndRange(_, _)
| CompletionAssertion::LabelAndDesc(_, _) => false,
});
Expand Down
3 changes: 1 addition & 2 deletions crates/pgt_treesitter/src/context/mod.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
use std::{
cmp,
collections::{HashMap, HashSet},
fmt::format,
};
mod base_parser;
mod grant_parser;
Expand Down Expand Up @@ -840,7 +839,7 @@ impl<'a> TreesitterContext<'a> {
self.mentioned_columns.get(clause)
}

pub fn has_mentioned_relations(&self) -> bool {
pub fn has_any_mentioned_relations(&self) -> bool {
!self.mentioned_relations.is_empty()
}

Expand Down
4 changes: 2 additions & 2 deletions crates/pgt_treesitter/src/queries/relations.rs
Original file line number Diff line number Diff line change
Expand Up @@ -181,8 +181,8 @@ mod tests {
.collect();

assert_eq!(results.len(), 1);
assert_eq!(results[0].get_schema(sql), Some("public".to_string()));
assert_eq!(results[0].get_table(sql), "users");
assert_eq!(results[0].get_schema(sql), Some(r#""public""#.to_string()));
assert_eq!(results[0].get_table(sql), r#""users""#);
}

#[test]
Expand Down