dprint_vue_plugin/
configuration.rs1use dprint_core::configuration::get_unknown_property_diagnostics;
2use dprint_core::configuration::get_value;
3use dprint_core::configuration::ConfigKeyMap;
4use dprint_core::configuration::GlobalConfiguration;
5use dprint_core::configuration::ResolveConfigurationResult;
6use dprint_core::configuration::RECOMMENDED_GLOBAL_CONFIGURATION;
7use serde::Serialize;
8
9#[derive(Debug, Clone, Copy, Serialize)]
10#[serde(rename_all = "camelCase")]
11pub struct Configuration {
12 pub indent_template: bool,
13 pub use_tabs: bool,
14 pub indent_width: u8,
15}
16
17impl Default for Configuration {
18 fn default() -> Self {
19 Self {
20 indent_template: true,
21 use_tabs: RECOMMENDED_GLOBAL_CONFIGURATION.use_tabs,
22 indent_width: RECOMMENDED_GLOBAL_CONFIGURATION.indent_width,
23 }
24 }
25}
26
27impl Configuration {
28 pub(crate) fn resolve(
29 mut config: ConfigKeyMap,
30 global_config: &GlobalConfiguration,
31 ) -> ResolveConfigurationResult<Configuration> {
32 let mut diagnostics = Vec::new();
33
34 let resolved_config = Configuration {
35 indent_template: get_value(&mut config, "indentTemplate", true, &mut diagnostics),
36 use_tabs: get_value(
37 &mut config,
38 "useTabs",
39 global_config
40 .use_tabs
41 .unwrap_or(RECOMMENDED_GLOBAL_CONFIGURATION.use_tabs),
42 &mut diagnostics,
43 ),
44 indent_width: get_value(
45 &mut config,
46 "indentWidth",
47 global_config
48 .indent_width
49 .unwrap_or(RECOMMENDED_GLOBAL_CONFIGURATION.indent_width),
50 &mut diagnostics,
51 ),
52 };
53
54 diagnostics.extend(get_unknown_property_diagnostics(config));
55
56 ResolveConfigurationResult {
57 config: resolved_config,
58 diagnostics,
59 }
60 }
61}