dprint_plugin_css/configuration/resolve_config.rs
1use super::Configuration;
2use dprint_core::configuration::*;
3
4/// Resolves configuration from a collection of key value strings.
5///
6/// # Example
7///
8/// ```
9/// use std::collections::HashMap;
10/// use dprint_core::configuration::{resolve_global_config};
11/// use dprint_plugin_css::configuration::{resolve_config};
12///
13/// let config_map = HashMap::new(); // get a collection of key value pairs from somewhere
14/// let global_config_result = resolve_global_config(config_map, &Default::default());
15///
16/// // check global_config_result.diagnostics here...
17///
18/// let config_map = HashMap::new(); // get a collection of k/v pairs from somewhere
19/// let config_result = resolve_config(
20/// config_map,
21/// &global_config_result.config
22/// );
23///
24/// // check config_result.diagnostics here and use config_result.config
25/// ```
26pub fn resolve_config(
27 config: ConfigKeyMap,
28 global_config: &GlobalConfiguration,
29) -> ResolveConfigurationResult<Configuration> {
30 let mut diagnostics = Vec::new();
31 let mut config = config;
32
33 let resolved_config = Configuration {
34 use_tabs: get_value(
35 &mut config,
36 "useTabs",
37 global_config
38 .use_tabs
39 .unwrap_or(DEFAULT_GLOBAL_CONFIGURATION.use_tabs),
40 &mut diagnostics,
41 ),
42 indent_width: get_value(
43 &mut config,
44 "indentWidth",
45 global_config
46 .indent_width
47 .unwrap_or(DEFAULT_GLOBAL_CONFIGURATION.indent_width),
48 &mut diagnostics,
49 ),
50 line_width: get_value(
51 &mut config,
52 "lineWidth",
53 global_config
54 .line_width
55 .unwrap_or(DEFAULT_GLOBAL_CONFIGURATION.line_width),
56 &mut diagnostics,
57 ),
58 new_line_kind: get_value(
59 &mut config,
60 "newLineKind",
61 global_config
62 .new_line_kind
63 .unwrap_or(DEFAULT_GLOBAL_CONFIGURATION.new_line_kind),
64 &mut diagnostics,
65 ),
66 };
67
68 diagnostics.extend(get_unknown_property_diagnostics(config));
69
70 ResolveConfigurationResult {
71 config: resolved_config,
72 diagnostics,
73 }
74}