@@ -5,13 +5,13 @@ type NodeIdentification = (Option<String>, String);
55#[ allow( unused) ]
66#[ derive( Debug ) ]
77pub ( 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 }
0 commit comments