Skip to main content

squawk_ide/code_actions/
mod.rs

1use rowan::TextSize;
2use salsa::Database as Db;
3use squawk_linter::Edit;
4
5use crate::file::InFile;
6
7mod add_explicit_alias;
8mod add_schema;
9mod convert_comment;
10mod quote_identifier;
11mod remove_else_clause;
12mod remove_redundant_alias;
13mod remove_routine_param_in;
14mod rewrite_as_dollar_quoted_string;
15mod rewrite_as_regular_string;
16mod rewrite_at_local_as_timezone;
17mod rewrite_at_time_zone_as_timezone;
18mod rewrite_between_as_binary_expression;
19mod rewrite_cast_to_double_colon;
20mod rewrite_collation_for_as_function_call;
21mod rewrite_colon_eq_as_fat_arrow;
22mod rewrite_create_table_as_as_select_into;
23mod rewrite_double_colon_to_cast;
24mod rewrite_extract_as_function_call;
25mod rewrite_from;
26mod rewrite_function_param_default_as_equals;
27mod rewrite_in_as_expression;
28mod rewrite_integer_radix;
29mod rewrite_is_normalized_as_function_call;
30mod rewrite_json_value_as_colon;
31mod rewrite_leading_from;
32mod rewrite_normalize_as_function_call;
33mod rewrite_not_equals_operator;
34mod rewrite_null_predicate;
35mod rewrite_overlaps_as_function_call;
36mod rewrite_overlay_as_function_call;
37mod rewrite_pattern_matching_as_operators;
38mod rewrite_position_as_function_call;
39mod rewrite_routine_param_in_out_as_inout;
40mod rewrite_rows_from_as_unnest;
41mod rewrite_select_as_table;
42mod rewrite_select_as_values;
43mod rewrite_select_into_as_create_table_as;
44mod rewrite_substring_as_function_call;
45mod rewrite_system_user_as_function_call;
46mod rewrite_table_as_select;
47mod rewrite_timestamp_type;
48mod rewrite_trim_as_function_call;
49mod rewrite_unnest_as_rows_from;
50mod rewrite_values_as_select;
51mod rewrite_xmlexists_as_function_call;
52mod unnest;
53mod unquote_identifier;
54
55#[cfg(test)]
56mod test_utils;
57
58use add_explicit_alias::add_explicit_alias;
59use add_schema::add_schema;
60use convert_comment::convert_comment;
61use quote_identifier::quote_identifier;
62use remove_else_clause::remove_else_clause;
63use remove_redundant_alias::remove_redundant_alias;
64use remove_routine_param_in::remove_routine_param_in;
65use rewrite_as_dollar_quoted_string::rewrite_as_dollar_quoted_string;
66use rewrite_as_regular_string::rewrite_as_regular_string;
67use rewrite_at_local_as_timezone::rewrite_at_local_as_timezone;
68use rewrite_at_time_zone_as_timezone::rewrite_at_time_zone_as_timezone;
69use rewrite_between_as_binary_expression::rewrite_between_as_binary_expression;
70use rewrite_cast_to_double_colon::rewrite_cast_to_double_colon;
71use rewrite_collation_for_as_function_call::rewrite_collation_for_as_function_call;
72use rewrite_colon_eq_as_fat_arrow::rewrite_colon_eq_as_fat_arrow;
73use rewrite_create_table_as_as_select_into::rewrite_create_table_as_as_select_into;
74use rewrite_double_colon_to_cast::rewrite_double_colon_to_cast;
75use rewrite_extract_as_function_call::rewrite_extract_as_function_call;
76use rewrite_from::rewrite_from;
77use rewrite_function_param_default_as_equals::rewrite_function_param_default_as_equals;
78use rewrite_in_as_expression::rewrite_in_as_expression;
79use rewrite_integer_radix::rewrite_integer_radix;
80use rewrite_is_normalized_as_function_call::rewrite_is_normalized_as_function_call;
81use rewrite_json_value_as_colon::rewrite_json_value_as_colon;
82use rewrite_leading_from::rewrite_leading_from;
83use rewrite_normalize_as_function_call::rewrite_normalize_as_function_call;
84use rewrite_not_equals_operator::rewrite_not_equals_operator;
85use rewrite_null_predicate::rewrite_null_predicate;
86use rewrite_overlaps_as_function_call::rewrite_overlaps_as_function_call;
87use rewrite_overlay_as_function_call::rewrite_overlay_as_function_call;
88use rewrite_pattern_matching_as_operators::rewrite_pattern_matching_as_operators;
89use rewrite_position_as_function_call::rewrite_position_as_function_call;
90use rewrite_routine_param_in_out_as_inout::rewrite_routine_param_in_out_as_inout;
91use rewrite_rows_from_as_unnest::rewrite_rows_from_as_unnest;
92use rewrite_select_as_table::rewrite_select_as_table;
93use rewrite_select_as_values::rewrite_select_as_values;
94use rewrite_select_into_as_create_table_as::rewrite_select_into_as_create_table_as;
95use rewrite_substring_as_function_call::rewrite_substring_as_function_call;
96use rewrite_system_user_as_function_call::rewrite_system_user_as_function_call;
97use rewrite_table_as_select::rewrite_table_as_select;
98use rewrite_timestamp_type::rewrite_timestamp_type;
99use rewrite_trim_as_function_call::rewrite_trim_as_function_call;
100use rewrite_unnest_as_rows_from::rewrite_unnest_as_rows_from;
101use rewrite_values_as_select::rewrite_values_as_select;
102use rewrite_xmlexists_as_function_call::rewrite_xmlexists_as_function_call;
103use unquote_identifier::unquote_identifier;
104
105#[derive(Debug, Clone, PartialEq, Eq)]
106pub enum ActionKind {
107    QuickFix,
108    RefactorRewrite,
109}
110
111#[derive(Debug, Clone, PartialEq, Eq)]
112pub struct CodeAction {
113    pub title: String,
114    pub edits: Vec<Edit>,
115    pub kind: ActionKind,
116}
117
118pub fn code_actions(db: &dyn Db, position: InFile<TextSize>) -> Option<Vec<CodeAction>> {
119    let mut actions = vec![];
120    convert_comment(db, position, &mut actions);
121    rewrite_as_regular_string(db, position, &mut actions);
122    rewrite_as_dollar_quoted_string(db, position, &mut actions);
123    remove_else_clause(db, position, &mut actions);
124    rewrite_table_as_select(db, position, &mut actions);
125    rewrite_select_as_table(db, position, &mut actions);
126    rewrite_from(db, position, &mut actions);
127    rewrite_function_param_default_as_equals(db, position, &mut actions);
128    rewrite_routine_param_in_out_as_inout(db, position, &mut actions);
129    remove_routine_param_in(db, position, &mut actions);
130    rewrite_integer_radix(db, position, &mut actions);
131    rewrite_leading_from(db, position, &mut actions);
132    rewrite_values_as_select(db, position, &mut actions);
133    rewrite_select_as_values(db, position, &mut actions);
134    rewrite_select_into_as_create_table_as(db, position, &mut actions);
135    rewrite_create_table_as_as_select_into(db, position, &mut actions);
136    add_schema(db, position, &mut actions);
137    quote_identifier(db, position, &mut actions);
138    unquote_identifier(db, position, &mut actions);
139    add_explicit_alias(db, position, &mut actions);
140    remove_redundant_alias(db, position, &mut actions);
141    rewrite_cast_to_double_colon(db, position, &mut actions);
142    rewrite_double_colon_to_cast(db, position, &mut actions);
143    rewrite_between_as_binary_expression(db, position, &mut actions);
144    rewrite_not_equals_operator(db, position, &mut actions);
145    rewrite_null_predicate(db, position, &mut actions);
146    rewrite_colon_eq_as_fat_arrow(db, position, &mut actions);
147    rewrite_json_value_as_colon(db, position, &mut actions);
148    rewrite_timestamp_type(db, position, &mut actions);
149    rewrite_unnest_as_rows_from(db, position, &mut actions);
150    rewrite_rows_from_as_unnest(db, position, &mut actions);
151    rewrite_at_time_zone_as_timezone(db, position, &mut actions);
152    rewrite_at_local_as_timezone(db, position, &mut actions);
153    rewrite_overlaps_as_function_call(db, position, &mut actions);
154    rewrite_extract_as_function_call(db, position, &mut actions);
155    rewrite_is_normalized_as_function_call(db, position, &mut actions);
156    rewrite_collation_for_as_function_call(db, position, &mut actions);
157    rewrite_normalize_as_function_call(db, position, &mut actions);
158    rewrite_overlay_as_function_call(db, position, &mut actions);
159    rewrite_position_as_function_call(db, position, &mut actions);
160    rewrite_substring_as_function_call(db, position, &mut actions);
161    rewrite_trim_as_function_call(db, position, &mut actions);
162    rewrite_system_user_as_function_call(db, position, &mut actions);
163    rewrite_xmlexists_as_function_call(db, position, &mut actions);
164    rewrite_in_as_expression(db, position, &mut actions);
165    rewrite_pattern_matching_as_operators(db, position, &mut actions);
166    Some(actions)
167}