Skip to content

Commit 5526b43

Browse files
so many changes
1 parent 5d371a7 commit 5526b43

File tree

2 files changed

+58
-76
lines changed

2 files changed

+58
-76
lines changed

crates/pgls_hover/src/hovered_node.rs

Lines changed: 45 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ type NodeIdentification = (Option<String>, String);
55
#[allow(unused)]
66
#[derive(Debug)]
77
pub(crate) enum HoveredNode {
8-
Schema(NodeIdentification),
8+
Schema(String),
99
Table(NodeIdentification),
1010
Function(NodeIdentification),
1111
Column(NodeIdentification),
1212
Policy(NodeIdentification),
1313
Trigger(NodeIdentification),
14-
Role(NodeIdentification),
14+
Role(String),
1515
PostgresType(NodeIdentification),
1616
}
1717

@@ -26,21 +26,40 @@ impl HoveredNode {
2626
let under_cursor = ctx.node_under_cursor.as_ref()?;
2727

2828
match under_cursor.kind() {
29+
"column_identifier" => Some(HoveredNode::Column((
30+
ctx.schema_or_alias_name.clone(),
31+
node_content,
32+
))),
33+
"function_identifier" => Some(HoveredNode::Function((
34+
ctx.schema_or_alias_name.clone(),
35+
node_content,
36+
))),
37+
"policy_identifier" => Some(HoveredNode::Policy((
38+
ctx.schema_or_alias_name.clone(),
39+
node_content,
40+
))),
41+
"table_identifier" => Some(HoveredNode::Table((
42+
ctx.schema_or_alias_name.clone(),
43+
node_content,
44+
))),
45+
46+
"schema_identifier" => Some(HoveredNode::Schema(node_content)),
47+
"role_identifier" => Some(HoveredNode::Role(node_content)),
48+
2949
"any_identifier"
3050
if ctx.matches_ancestor_history(&["relation", "object_reference"])
3151
|| ctx
3252
.matches_ancestor_history(&["grantable_on_table", "object_reference"]) =>
3353
{
3454
let num_sibs = ctx.num_siblings();
3555
if ctx.node_under_cursor_is_nth_child(1) && num_sibs > 0 {
36-
return Some(HoveredNode::Schema((None, node_content)));
56+
return Some(HoveredNode::Schema(node_content));
3757
}
3858

39-
if let Some(schema) = ctx.schema_or_alias_name.as_ref() {
40-
Some(HoveredNode::Table((Some(schema.clone()), node_content)))
41-
} else {
42-
Some(HoveredNode::Table((None, node_content)))
43-
}
59+
Some(HoveredNode::Table((
60+
ctx.schema_or_alias_name.clone(),
61+
node_content,
62+
)))
4463
}
4564

4665
"any_identifier"
@@ -54,48 +73,28 @@ impl HoveredNode {
5473
)
5574
}) =>
5675
{
57-
if let Some(schema) = ctx.schema_or_alias_name.as_ref() {
58-
Some(HoveredNode::Table(NodeIdentification::SchemaAndName((
59-
schema.clone(),
60-
node_content,
61-
))))
62-
} else {
63-
Some(HoveredNode::Table(NodeIdentification::Name(node_content)))
64-
}
76+
Some(HoveredNode::Table((
77+
ctx.schema_or_alias_name.clone(),
78+
node_content,
79+
)))
6580
}
6681

6782
"any_identifier"
6883
if ctx.matches_ancestor_history(&["binary_expression", "object_reference"]) =>
6984
{
70-
if let Some(table_or_alias) = ctx.schema_or_alias_name.as_ref() {
71-
Some(HoveredNode::Column((
72-
Some(table_or_alias.clone()),
73-
node_content,
74-
)))
75-
} else {
76-
Some(HoveredNode::Column((None, node_content)))
77-
}
78-
}
79-
80-
"column_identifier" => {
81-
if let Some(table_or_alias) = ctx.schema_or_alias_name.as_ref() {
82-
Some(HoveredNode::Column((
83-
Some(table_or_alias.clone()),
84-
node_content,
85-
)))
86-
} else {
87-
Some(HoveredNode::Column((None, node_content)))
88-
}
85+
Some(HoveredNode::Column((
86+
ctx.schema_or_alias_name.clone(),
87+
node_content,
88+
)))
8989
}
9090

9191
"any_identifier"
9292
if ctx.matches_ancestor_history(&["invocation", "object_reference"]) =>
9393
{
94-
if let Some(schema) = ctx.schema_or_alias_name.as_ref() {
95-
Some(HoveredNode::Function((Some(schema.clone()), node_content)))
96-
} else {
97-
Some(HoveredNode::Function((None, node_content)))
98-
}
94+
Some(HoveredNode::Function((
95+
ctx.schema_or_alias_name.clone(),
96+
node_content,
97+
)))
9998
}
10099

101100
"any_identifier"
@@ -105,9 +104,8 @@ impl HoveredNode {
105104
"role_specification",
106105
]) || ctx.before_cursor_matches_kind(&["keyword_revoke"]) =>
107106
{
108-
Some(HoveredNode::Role((None, node_content)))
107+
Some(HoveredNode::Role(node_content))
109108
}
110-
"grant_role" | "policy_role" => Some(HoveredNode::Role((None, node_content))),
111109

112110
"any_identifier"
113111
if (
@@ -128,26 +126,18 @@ impl HoveredNode {
128126
.is_none() =>
129127
{
130128
let sanitized = node_content.replace(['(', ')'], "");
131-
if let Some(schema) = ctx.schema_or_alias_name.as_ref() {
132-
Some(HoveredNode::PostgresType((Some(schema.clone()), sanitized)))
133-
} else {
134-
Some(HoveredNode::PostgresType((None, sanitized)))
135-
}
129+
130+
Some(HoveredNode::PostgresType((
131+
ctx.schema_or_alias_name.clone(),
132+
sanitized,
133+
)))
136134
}
137135

138136
// quoted columns
139137
"literal" if ctx.matches_ancestor_history(&["select_expression", "term"]) => {
140138
Some(HoveredNode::Column((None, node_content)))
141139
}
142140

143-
"grant_table" => {
144-
if let Some(schema) = ctx.schema_or_alias_name.as_ref() {
145-
Some(HoveredNode::Table((Some(schema.clone()), node_content)))
146-
} else {
147-
Some(HoveredNode::Table((None, node_content)))
148-
}
149-
}
150-
151141
_ => None,
152142
}
153143
}

crates/pgls_hover/src/lib.rs

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -91,27 +91,19 @@ pub fn on_hover(params: OnHoverParams) -> Vec<String> {
9191
.collect(),
9292
},
9393

94-
HoveredNode::Role(node_identification) => match node_identification {
95-
(None, role_name) => params
96-
.schema_cache
97-
.find_roles(&role_name)
98-
.into_iter()
99-
.map(Hoverable::from)
100-
.collect(),
101-
102-
_ => vec![],
103-
},
104-
105-
HoveredNode::Schema(node_identification) => match node_identification {
106-
(None, schema_name) => params
107-
.schema_cache
108-
.find_schema(&schema_name)
109-
.map(Hoverable::from)
110-
.map(|s| vec![s])
111-
.unwrap_or_default(),
112-
113-
_ => vec![],
114-
},
94+
HoveredNode::Role(role_name) => params
95+
.schema_cache
96+
.find_roles(&role_name)
97+
.into_iter()
98+
.map(Hoverable::from)
99+
.collect(),
100+
101+
HoveredNode::Schema(schema_name) => params
102+
.schema_cache
103+
.find_schema(&schema_name)
104+
.map(Hoverable::from)
105+
.map(|s| vec![s])
106+
.unwrap_or_default(),
115107

116108
HoveredNode::PostgresType(node_identification) => match node_identification {
117109
(None, type_name) => params

0 commit comments

Comments
 (0)