editor_settings.rs

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