Skip to content

Commit 01a1456

Browse files
removed parser
a little bit of support ok
1 parent 6a27850 commit 01a1456

File tree

7 files changed

+154
-391
lines changed

7 files changed

+154
-391
lines changed

crates/pgt_completions/src/providers/roles.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,7 @@ mod tests {
292292
QueryWithCursorPosition::cursor_marker()
293293
),
294294
format!(
295-
"revoke all on table userse from owner, {}",
295+
"revoke all on table users from owner, {}",
296296
QueryWithCursorPosition::cursor_marker()
297297
),
298298
];

crates/pgt_completions/src/relevance/filtering.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,10 @@ impl CompletionFilter<'_> {
9999
CompletionRelevanceData::Table(_) => match clause {
100100
WrappingClause::From | WrappingClause::Update => true,
101101

102+
WrappingClause::RevokeStatement => {
103+
ctx.matches_ancestor_history(&["revoke_on_table", "object_reference"])
104+
}
105+
102106
WrappingClause::Join { on_node: None } => true,
103107
WrappingClause::Join { on_node: Some(on) } => ctx
104108
.node_under_cursor
@@ -202,6 +206,12 @@ impl CompletionFilter<'_> {
202206
| WrappingClause::Update
203207
| WrappingClause::Delete => true,
204208

209+
WrappingClause::RevokeStatement => {
210+
(ctx.matches_ancestor_history(&["revoke_on_table", "object_reference"])
211+
&& ctx.schema_or_alias_name.is_none())
212+
|| ctx.matches_ancestor_history(&["revoke_on_all"])
213+
}
214+
205215
WrappingClause::Where => {
206216
ctx.before_cursor_matches_kind(&["keyword_and", "keyword_where"])
207217
}
@@ -245,6 +255,17 @@ impl CompletionFilter<'_> {
245255
WrappingClause::SetStatement => ctx
246256
.before_cursor_matches_kind(&["keyword_role", "keyword_authorization"]),
247257

258+
WrappingClause::RevokeStatement => {
259+
ctx.matches_ancestor_history(&["role_specification"])
260+
|| ctx.node_under_cursor.as_ref().is_some_and(|k| {
261+
k.kind() == "identifier"
262+
&& ctx.before_cursor_matches_kind(&[
263+
"keyword_revoke",
264+
"keyword_for",
265+
])
266+
})
267+
}
268+
248269
WrappingClause::AlterPolicy | WrappingClause::CreatePolicy => {
249270
ctx.before_cursor_matches_kind(&["keyword_to"])
250271
&& ctx.matches_ancestor_history(&["policy_to_role"])

crates/pgt_hover/src/hovered_node.rs

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,10 @@ impl HoveredNode {
3232
let under_cursor = ctx.node_under_cursor.as_ref()?;
3333

3434
match under_cursor.kind() {
35-
"identifier" if ctx.matches_ancestor_history(&["relation", "object_reference"]) => {
35+
"identifier"
36+
if ctx.matches_ancestor_history(&["relation", "object_reference"])
37+
|| ctx.matches_ancestor_history(&["revoke_on_table", "object_reference"]) =>
38+
{
3639
let num_sibs = ctx.num_siblings();
3740
if ctx.node_under_cursor_is_nth_child(1) && num_sibs > 0 {
3841
return Some(HoveredNode::Schema(NodeIdentification::Name(node_content)));
@@ -93,7 +96,16 @@ impl HoveredNode {
9396
}
9497
}
9598

96-
"identifier" if ctx.matches_one_of_ancestors(&["alter_role", "policy_to_role"]) => {
99+
"identifier"
100+
if ctx.matches_one_of_ancestors(&[
101+
"alter_role",
102+
"policy_to_role",
103+
"role_specification",
104+
]) || ctx.before_cursor_matches_kind(&["keyword_revoke"]) =>
105+
{
106+
Some(HoveredNode::Role(NodeIdentification::Name(node_content)))
107+
}
108+
"grant_role" | "policy_role" => {
97109
Some(HoveredNode::Role(NodeIdentification::Name(node_content)))
98110
}
99111

@@ -127,16 +139,12 @@ impl HoveredNode {
127139
}
128140
}
129141

130-
"revoke_role" | "grant_role" | "policy_role" => {
131-
Some(HoveredNode::Role(NodeIdentification::Name(node_content)))
132-
}
133-
134142
// quoted columns
135143
"literal" if ctx.matches_ancestor_history(&["select_expression", "term"]) => {
136144
Some(HoveredNode::Column(NodeIdentification::Name(node_content)))
137145
}
138146

139-
"revoke_table" | "grant_table" => {
147+
"grant_table" => {
140148
if let Some(schema) = ctx.schema_or_alias_name.as_ref() {
141149
Some(HoveredNode::Table(NodeIdentification::SchemaAndName((
142150
schema.clone(),

crates/pgt_treesitter/src/context/base_parser.rs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,6 @@ impl TokenNavigator {
1414
.is_some_and(|c| options.contains(&c.get_word_without_quotes().as_str()))
1515
}
1616

17-
pub(crate) fn prev_matches(&self, options: &[&str]) -> bool {
18-
self.previous_token
19-
.as_ref()
20-
.is_some_and(|t| options.contains(&t.get_word_without_quotes().as_str()))
21-
}
22-
2317
pub(crate) fn advance(&mut self) -> Option<WordWithIndex> {
2418
// we can't peek back n an iterator, so we'll have to keep track manually.
2519
self.previous_token = self.current_token.take();

crates/pgt_treesitter/src/context/mod.rs

Lines changed: 3 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,11 @@ use std::{
44
};
55
mod base_parser;
66
mod grant_parser;
7-
mod revoke_parser;
87

98
use crate::queries::{self, QueryResult, TreeSitterQueriesExecutor};
109
use pgt_text_size::{TextRange, TextSize};
1110

12-
use crate::context::{
13-
base_parser::CompletionStatementParser, grant_parser::GrantParser, revoke_parser::RevokeParser,
14-
};
11+
use crate::context::{base_parser::CompletionStatementParser, grant_parser::GrantParser};
1512

1613
#[derive(Debug, PartialEq, Eq, Hash, Clone)]
1714
pub enum WrappingClause<'a> {
@@ -34,6 +31,7 @@ pub enum WrappingClause<'a> {
3431
SetStatement,
3532
AlterRole,
3633
DropRole,
34+
RevokeStatement,
3735

3836
CreatePolicy,
3937
AlterPolicy,
@@ -198,8 +196,6 @@ impl<'a> TreesitterContext<'a> {
198196

199197
if GrantParser::looks_like_matching_stmt(params.text) {
200198
ctx.gather_grant_context();
201-
} else if RevokeParser::looks_like_matching_stmt(params.text) {
202-
ctx.gather_revoke_context();
203199
} else {
204200
ctx.gather_tree_context();
205201
ctx.gather_info_from_ts_queries();
@@ -208,34 +204,6 @@ impl<'a> TreesitterContext<'a> {
208204
ctx
209205
}
210206

211-
fn gather_revoke_context(&mut self) {
212-
let revoke_context = RevokeParser::get_context(self.text, self.position);
213-
214-
self.node_under_cursor = Some(NodeUnderCursor::CustomNode {
215-
text: revoke_context.node_text,
216-
range: revoke_context.node_range,
217-
kind: revoke_context.node_kind.clone(),
218-
previous_node_kind: None,
219-
});
220-
221-
if revoke_context.node_kind == "revoke_table" {
222-
self.schema_or_alias_name = revoke_context.schema_name.clone();
223-
}
224-
225-
if revoke_context.table_name.is_some() {
226-
let mut new = HashSet::new();
227-
new.insert(revoke_context.table_name.unwrap());
228-
self.mentioned_relations
229-
.insert(revoke_context.schema_name, new);
230-
}
231-
232-
self.wrapping_clause_type = match revoke_context.node_kind.as_str() {
233-
"revoke_role" => Some(WrappingClause::ToRoleAssignment),
234-
"revoke_table" => Some(WrappingClause::From),
235-
_ => None,
236-
};
237-
}
238-
239207
fn gather_grant_context(&mut self) {
240208
let grant_context = GrantParser::get_context(self.text, self.position);
241209

@@ -686,6 +654,7 @@ impl<'a> TreesitterContext<'a> {
686654
"rename_column" => Some(WrappingClause::RenameColumn),
687655
"alter_table" => Some(WrappingClause::AlterTable),
688656
"set_statement" => Some(WrappingClause::SetStatement),
657+
"revoke_statement" => Some(WrappingClause::RevokeStatement),
689658
"column_definitions" => Some(WrappingClause::ColumnDefinitions),
690659
"create_policy" => Some(WrappingClause::CreatePolicy),
691660
"alter_policy" => Some(WrappingClause::AlterPolicy),

0 commit comments

Comments
 (0)