lax_sql/configuration/
mod.rs1use 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 Preserve,
17 Upper,
19 Lower,
21}
22
23#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
24#[serde(rename_all = "camelCase")]
25pub enum ClauseStyle {
26 Fill,
29 Expanded,
32}
33
34#[derive(Debug, Clone, Serialize, Deserialize)]
35#[serde(rename_all = "camelCase")]
36pub struct Configuration {
37 pub line_width: u32,
38 pub use_tabs: bool,
39 pub indent_width: u8,
40 pub new_line_kind: NewLineKind,
41 pub keyword_case: KeywordCase,
42 pub clause_style: ClauseStyle,
43 pub ignore_node_comment_text: String,
44 pub ignore_file_comment_text: String,
45}
46
47pub fn resolve_config(
48 config: ConfigKeyMap,
49 global_config: &GlobalConfiguration,
50) -> ResolveConfigurationResult<Configuration> {
51 let mut config = config;
52 let mut diagnostics = Vec::new();
53 let keyword_case_text: String = get_value(&mut config, "keywordCase", "preserve".to_string(), &mut diagnostics);
54 let keyword_case = match keyword_case_text.as_str() {
55 "preserve" => KeywordCase::Preserve,
56 "upper" => KeywordCase::Upper,
57 "lower" => KeywordCase::Lower,
58 _ => {
59 diagnostics.push(ConfigurationDiagnostic {
60 property_name: "keywordCase".to_string(),
61 message: format!(
62 "expected \"preserve\", \"upper\", or \"lower\", but found \"{}\"",
63 keyword_case_text
64 ),
65 });
66 KeywordCase::Preserve
67 }
68 };
69 let clause_style_text: String = get_value(&mut config, "clauseStyle", "fill".to_string(), &mut diagnostics);
70 let clause_style = match clause_style_text.as_str() {
71 "fill" => ClauseStyle::Fill,
72 "expanded" => ClauseStyle::Expanded,
73 _ => {
74 diagnostics.push(ConfigurationDiagnostic {
75 property_name: "clauseStyle".to_string(),
76 message: format!("expected \"fill\" or \"expanded\", but found \"{}\"", clause_style_text),
77 });
78 ClauseStyle::Fill
79 }
80 };
81 let resolved_config = Configuration {
82 line_width: get_value(
83 &mut config,
84 "lineWidth",
85 global_config
86 .line_width
87 .unwrap_or(RECOMMENDED_GLOBAL_CONFIGURATION.line_width),
88 &mut diagnostics,
89 ),
90 use_tabs: get_value(
91 &mut config,
92 "useTabs",
93 global_config
94 .use_tabs
95 .unwrap_or(RECOMMENDED_GLOBAL_CONFIGURATION.use_tabs),
96 &mut diagnostics,
97 ),
98 indent_width: get_value(
99 &mut config,
100 "indentWidth",
101 global_config
102 .indent_width
103 .unwrap_or(RECOMMENDED_GLOBAL_CONFIGURATION.indent_width),
104 &mut diagnostics,
105 ),
106 new_line_kind: get_value(
107 &mut config,
108 "newLineKind",
109 global_config
110 .new_line_kind
111 .unwrap_or(RECOMMENDED_GLOBAL_CONFIGURATION.new_line_kind),
112 &mut diagnostics,
113 ),
114 keyword_case,
115 clause_style,
116 ignore_node_comment_text: get_value(
117 &mut config,
118 "ignoreNodeCommentText",
119 "dprint-ignore".to_string(),
120 &mut diagnostics,
121 ),
122 ignore_file_comment_text: get_value(
123 &mut config,
124 "ignoreFileCommentText",
125 "dprint-ignore-file".to_string(),
126 &mut diagnostics,
127 ),
128 };
129 diagnostics.extend(get_unknown_property_diagnostics(config));
130 ResolveConfigurationResult {
131 config: resolved_config,
132 diagnostics,
133 }
134}