Skip to main content

lax_markup/configuration/
mod.rs

1use dprint_core::configuration::ConfigKeyMap;
2use dprint_core::configuration::GlobalConfiguration;
3use dprint_core::configuration::NewLineKind;
4use dprint_core::configuration::RECOMMENDED_GLOBAL_CONFIGURATION;
5use dprint_core::configuration::ResolveConfigurationResult;
6use dprint_core::configuration::get_unknown_property_diagnostics;
7use dprint_core::configuration::get_value;
8use serde::Deserialize;
9use serde::Serialize;
10
11#[derive(Debug, Clone, Serialize, Deserialize)]
12#[serde(rename_all = "camelCase")]
13pub struct Configuration {
14  pub line_width: u32,
15  pub use_tabs: bool,
16  pub indent_width: u8,
17  pub new_line_kind: NewLineKind,
18  pub ignore_node_comment_text: String,
19  pub ignore_file_comment_text: String,
20}
21
22pub fn resolve_config(
23  config: ConfigKeyMap,
24  global_config: &GlobalConfiguration,
25) -> ResolveConfigurationResult<Configuration> {
26  let mut config = config;
27  let mut diagnostics = Vec::new();
28  let resolved_config = Configuration {
29    line_width: get_value(
30      &mut config,
31      "lineWidth",
32      global_config
33        .line_width
34        .unwrap_or(RECOMMENDED_GLOBAL_CONFIGURATION.line_width),
35      &mut diagnostics,
36    ),
37    use_tabs: get_value(
38      &mut config,
39      "useTabs",
40      global_config
41        .use_tabs
42        .unwrap_or(RECOMMENDED_GLOBAL_CONFIGURATION.use_tabs),
43      &mut diagnostics,
44    ),
45    indent_width: get_value(
46      &mut config,
47      "indentWidth",
48      global_config
49        .indent_width
50        .unwrap_or(RECOMMENDED_GLOBAL_CONFIGURATION.indent_width),
51      &mut diagnostics,
52    ),
53    new_line_kind: get_value(
54      &mut config,
55      "newLineKind",
56      global_config
57        .new_line_kind
58        .unwrap_or(RECOMMENDED_GLOBAL_CONFIGURATION.new_line_kind),
59      &mut diagnostics,
60    ),
61    ignore_node_comment_text: get_value(
62      &mut config,
63      "ignoreNodeCommentText",
64      "dprint-ignore".to_string(),
65      &mut diagnostics,
66    ),
67    ignore_file_comment_text: get_value(
68      &mut config,
69      "ignoreFileCommentText",
70      "dprint-ignore-file".to_string(),
71      &mut diagnostics,
72    ),
73  };
74  diagnostics.extend(get_unknown_property_diagnostics(config));
75  ResolveConfigurationResult {
76    config: resolved_config,
77    diagnostics,
78  }
79}