project_settings.rs

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