1use collections::HashMap;
2use gpui::AppContext;
3use schemars::JsonSchema;
4use serde::{Deserialize, Serialize};
5use settings::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}