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, 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}