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}