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 quote_identifier;
10mod remove_else_clause;
11mod remove_redundant_alias;
12mod rewrite_as_dollar_quoted_string;
13mod rewrite_as_regular_string;
14mod rewrite_between_as_binary_expression;
15mod rewrite_cast_to_double_colon;
16mod rewrite_create_table_as_as_select_into;
17mod rewrite_double_colon_to_cast;
18mod rewrite_from;
19mod rewrite_leading_from;
20mod rewrite_not_equals_operator;
21mod rewrite_select_as_table;
22mod rewrite_select_as_values;
23mod rewrite_select_into_as_create_table_as;
24mod rewrite_table_as_select;
25mod rewrite_timestamp_type;
26mod rewrite_values_as_select;
27mod unquote_identifier;
28
29#[cfg(test)]
30mod test_utils;
31
32use add_explicit_alias::add_explicit_alias;
33use add_schema::add_schema;
34use quote_identifier::quote_identifier;
35use remove_else_clause::remove_else_clause;
36use remove_redundant_alias::remove_redundant_alias;
37use rewrite_as_dollar_quoted_string::rewrite_as_dollar_quoted_string;
38use rewrite_as_regular_string::rewrite_as_regular_string;
39use rewrite_between_as_binary_expression::rewrite_between_as_binary_expression;
40use rewrite_cast_to_double_colon::rewrite_cast_to_double_colon;
41use rewrite_create_table_as_as_select_into::rewrite_create_table_as_as_select_into;
42use rewrite_double_colon_to_cast::rewrite_double_colon_to_cast;
43use rewrite_from::rewrite_from;
44use rewrite_leading_from::rewrite_leading_from;
45use rewrite_not_equals_operator::rewrite_not_equals_operator;
46use rewrite_select_as_table::rewrite_select_as_table;
47use rewrite_select_as_values::rewrite_select_as_values;
48use rewrite_select_into_as_create_table_as::rewrite_select_into_as_create_table_as;
49use rewrite_table_as_select::rewrite_table_as_select;
50use rewrite_timestamp_type::rewrite_timestamp_type;
51use rewrite_values_as_select::rewrite_values_as_select;
52use unquote_identifier::unquote_identifier;
53
54#[derive(Debug, Clone, PartialEq, Eq)]
55pub enum ActionKind {
56    QuickFix,
57    RefactorRewrite,
58}
59
60#[derive(Debug, Clone, PartialEq, Eq)]
61pub struct CodeAction {
62    pub title: String,
63    pub edits: Vec<Edit>,
64    pub kind: ActionKind,
65}
66
67pub fn code_actions(db: &dyn Db, position: InFile<TextSize>) -> Option<Vec<CodeAction>> {
68    let mut actions = vec![];
69    rewrite_as_regular_string(db, position, &mut actions);
70    rewrite_as_dollar_quoted_string(db, position, &mut actions);
71    remove_else_clause(db, position, &mut actions);
72    rewrite_table_as_select(db, position, &mut actions);
73    rewrite_select_as_table(db, position, &mut actions);
74    rewrite_from(db, position, &mut actions);
75    rewrite_leading_from(db, position, &mut actions);
76    rewrite_values_as_select(db, position, &mut actions);
77    rewrite_select_as_values(db, position, &mut actions);
78    rewrite_select_into_as_create_table_as(db, position, &mut actions);
79    rewrite_create_table_as_as_select_into(db, position, &mut actions);
80    add_schema(db, position, &mut actions);
81    quote_identifier(db, position, &mut actions);
82    unquote_identifier(db, position, &mut actions);
83    add_explicit_alias(db, position, &mut actions);
84    remove_redundant_alias(db, position, &mut actions);
85    rewrite_cast_to_double_colon(db, position, &mut actions);
86    rewrite_double_colon_to_cast(db, position, &mut actions);
87    rewrite_between_as_binary_expression(db, position, &mut actions);
88    rewrite_not_equals_operator(db, position, &mut actions);
89    rewrite_timestamp_type(db, position, &mut actions);
90    Some(actions)
91}