project_settings.rs

 1use collections::HashMap;
 2use gpui2::AppContext;
 3use schemars::JsonSchema;
 4use serde::{Deserialize, Serialize};
 5use settings2::Settings;
 6use std::sync::Arc;
 7
 8#[derive(Clone, Default, Serialize, Deserialize, JsonSchema)]
 9pub struct ProjectSettings {
10    #[serde(default)]
11    pub lsp: HashMap<Arc<str>, LspSettings>,
12    #[serde(default)]
13    pub git: GitSettings,
14}
15
16#[derive(Copy, Clone, Debug, Default, Serialize, Deserialize, JsonSchema)]
17pub struct GitSettings {
18    pub git_gutter: Option<GitGutterSetting>,
19    pub gutter_debounce: Option<u64>,
20}
21
22#[derive(Clone, Copy, Debug, Default, Serialize, Deserialize, JsonSchema)]
23#[serde(rename_all = "snake_case")]
24pub enum GitGutterSetting {
25    #[default]
26    TrackedFiles,
27    Hide,
28}
29
30#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, JsonSchema)]
31#[serde(rename_all = "snake_case")]
32pub struct LspSettings {
33    pub initialization_options: Option<serde_json::Value>,
34}
35
36impl Settings for ProjectSettings {
37    const KEY: Option<&'static str> = None;
38
39    type FileContent = Self;
40
41    fn load(
42        default_value: &Self::FileContent,
43        user_values: &[&Self::FileContent],
44        _: &mut AppContext,
45    ) -> anyhow::Result<Self> {
46        Self::load_via_json_merge(default_value, user_values)
47    }
48}