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}