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