editor_settings.rs

 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    pub selections: bool,
19}
20
21#[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
22#[serde(rename_all = "snake_case")]
23pub enum ShowScrollbar {
24    Auto,
25    System,
26    Always,
27    Never,
28}
29
30#[derive(Clone, Default, Serialize, Deserialize, JsonSchema)]
31pub struct EditorSettingsContent {
32    pub cursor_blink: Option<bool>,
33    pub hover_popover_enabled: Option<bool>,
34    pub show_completions_on_input: Option<bool>,
35    pub use_on_type_format: Option<bool>,
36    pub scrollbar: Option<ScrollbarContent>,
37}
38
39#[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
40pub struct ScrollbarContent {
41    pub show: Option<ShowScrollbar>,
42    pub git_diff: Option<bool>,
43    pub selections: Option<bool>,
44}
45
46impl Setting for EditorSettings {
47    const KEY: Option<&'static str> = None;
48
49    type FileContent = EditorSettingsContent;
50
51    fn load(
52        default_value: &Self::FileContent,
53        user_values: &[&Self::FileContent],
54        _: &gpui::AppContext,
55    ) -> anyhow::Result<Self> {
56        Self::load_via_json_merge(default_value, user_values)
57    }
58}