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