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