1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3use settings::Setting;
4
5#[derive(Deserialize)]
6pub struct EditorSettings {
7 pub cursor_blink: bool,
8 pub hover_popover_enabled: bool,
9 pub show_completions_on_input: bool,
10 pub use_on_type_format: bool,
11 pub scrollbar: Scrollbar,
12}
13
14#[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
15pub struct Scrollbar {
16 pub show: ShowScrollbar,
17 pub git_diff: bool,
18}
19
20#[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
21#[serde(rename_all = "snake_case")]
22pub enum ShowScrollbar {
23 Auto,
24 System,
25 Always,
26 Never,
27}
28
29#[derive(Clone, Default, Serialize, Deserialize, JsonSchema)]
30pub struct EditorSettingsContent {
31 pub cursor_blink: Option<bool>,
32 pub hover_popover_enabled: Option<bool>,
33 pub show_completions_on_input: Option<bool>,
34 pub use_on_type_format: Option<bool>,
35 pub scrollbar: Option<ScrollbarContent>,
36}
37
38#[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
39pub struct ScrollbarContent {
40 pub show: Option<ShowScrollbar>,
41 pub git_diff: Option<bool>,
42}
43
44impl Setting for EditorSettings {
45 const KEY: Option<&'static str> = None;
46
47 type FileContent = EditorSettingsContent;
48
49 fn load(
50 default_value: &Self::FileContent,
51 user_values: &[&Self::FileContent],
52 _: &gpui::AppContext,
53 ) -> anyhow::Result<Self> {
54 Self::load_via_json_merge(default_value, user_values)
55 }
56}