Skip to main content

lax_css/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  /// Format the input as a single line of declarations rather than a block.
21  /// Used for inline `style=""` attributes, where line breaks are not
22  /// allowed. Whitespace around colons and between declarations is
23  /// normalized, but no declarations are wrapped or split onto new lines.
24  #[serde(default)]
25  pub single_line: bool,
26}
27
28pub fn resolve_config(
29  config: ConfigKeyMap,
30  global_config: &GlobalConfiguration,
31) -> ResolveConfigurationResult<Configuration> {
32  let mut config = config;
33  let mut diagnostics = Vec::new();
34  let resolved_config = Configuration {
35    line_width: get_value(
36      &mut config,
37      "lineWidth",
38      global_config
39        .line_width
40        .unwrap_or(RECOMMENDED_GLOBAL_CONFIGURATION.line_width),
41      &mut diagnostics,
42    ),
43    use_tabs: get_value(
44      &mut config,
45      "useTabs",
46      global_config
47        .use_tabs
48        .unwrap_or(RECOMMENDED_GLOBAL_CONFIGURATION.use_tabs),
49      &mut diagnostics,
50    ),
51    indent_width: get_value(
52      &mut config,
53      "indentWidth",
54      global_config
55        .indent_width
56        .unwrap_or(RECOMMENDED_GLOBAL_CONFIGURATION.indent_width),
57      &mut diagnostics,
58    ),
59    new_line_kind: get_value(
60      &mut config,
61      "newLineKind",
62      global_config
63        .new_line_kind
64        .unwrap_or(RECOMMENDED_GLOBAL_CONFIGURATION.new_line_kind),
65      &mut diagnostics,
66    ),
67    ignore_node_comment_text: get_value(
68      &mut config,
69      "ignoreNodeCommentText",
70      "dprint-ignore".to_string(),
71      &mut diagnostics,
72    ),
73    ignore_file_comment_text: get_value(
74      &mut config,
75      "ignoreFileCommentText",
76      "dprint-ignore-file".to_string(),
77      &mut diagnostics,
78    ),
79    single_line: get_value(&mut config, "singleLine", false, &mut diagnostics),
80  };
81  diagnostics.extend(get_unknown_property_diagnostics(config));
82  ResolveConfigurationResult {
83    config: resolved_config,
84    diagnostics,
85  }
86}