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