Skip to main content

lax_sql/configuration/
mod.rs

1use dprint_core::configuration::ConfigKeyMap;
2use dprint_core::configuration::ConfigurationDiagnostic;
3use dprint_core::configuration::GlobalConfiguration;
4use dprint_core::configuration::NewLineKind;
5use dprint_core::configuration::RECOMMENDED_GLOBAL_CONFIGURATION;
6use dprint_core::configuration::ResolveConfigurationResult;
7use dprint_core::configuration::get_unknown_property_diagnostics;
8use dprint_core::configuration::get_value;
9use serde::Deserialize;
10use serde::Serialize;
11
12#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
13#[serde(rename_all = "camelCase")]
14pub enum KeywordCase {
15  /// Keywords are kept exactly as the author wrote them. The default.
16  Preserve,
17  /// Known SQL keywords are uppercased.
18  Upper,
19  /// Known SQL keywords are lowercased.
20  Lower,
21}
22
23#[derive(Debug, Clone, Serialize, Deserialize)]
24#[serde(rename_all = "camelCase")]
25pub struct Configuration {
26  pub line_width: u32,
27  pub use_tabs: bool,
28  pub indent_width: u8,
29  pub new_line_kind: NewLineKind,
30  pub keyword_case: KeywordCase,
31  pub ignore_node_comment_text: String,
32  pub ignore_file_comment_text: String,
33}
34
35pub fn resolve_config(
36  config: ConfigKeyMap,
37  global_config: &GlobalConfiguration,
38) -> ResolveConfigurationResult<Configuration> {
39  let mut config = config;
40  let mut diagnostics = Vec::new();
41  let keyword_case_text: String = get_value(&mut config, "keywordCase", "preserve".to_string(), &mut diagnostics);
42  let keyword_case = match keyword_case_text.as_str() {
43    "preserve" => KeywordCase::Preserve,
44    "upper" => KeywordCase::Upper,
45    "lower" => KeywordCase::Lower,
46    _ => {
47      diagnostics.push(ConfigurationDiagnostic {
48        property_name: "keywordCase".to_string(),
49        message: format!(
50          "expected \"preserve\", \"upper\", or \"lower\", but found \"{}\"",
51          keyword_case_text
52        ),
53      });
54      KeywordCase::Preserve
55    }
56  };
57  let resolved_config = Configuration {
58    line_width: get_value(
59      &mut config,
60      "lineWidth",
61      global_config
62        .line_width
63        .unwrap_or(RECOMMENDED_GLOBAL_CONFIGURATION.line_width),
64      &mut diagnostics,
65    ),
66    use_tabs: get_value(
67      &mut config,
68      "useTabs",
69      global_config
70        .use_tabs
71        .unwrap_or(RECOMMENDED_GLOBAL_CONFIGURATION.use_tabs),
72      &mut diagnostics,
73    ),
74    indent_width: get_value(
75      &mut config,
76      "indentWidth",
77      global_config
78        .indent_width
79        .unwrap_or(RECOMMENDED_GLOBAL_CONFIGURATION.indent_width),
80      &mut diagnostics,
81    ),
82    new_line_kind: get_value(
83      &mut config,
84      "newLineKind",
85      global_config
86        .new_line_kind
87        .unwrap_or(RECOMMENDED_GLOBAL_CONFIGURATION.new_line_kind),
88      &mut diagnostics,
89    ),
90    keyword_case,
91    ignore_node_comment_text: get_value(
92      &mut config,
93      "ignoreNodeCommentText",
94      "dprint-ignore".to_string(),
95      &mut diagnostics,
96    ),
97    ignore_file_comment_text: get_value(
98      &mut config,
99      "ignoreFileCommentText",
100      "dprint-ignore-file".to_string(),
101      &mut diagnostics,
102    ),
103  };
104  diagnostics.extend(get_unknown_property_diagnostics(config));
105  ResolveConfigurationResult {
106    config: resolved_config,
107    diagnostics,
108  }
109}