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    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 Settings 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        _: &mut gpui::AppContext,
69    ) -> anyhow::Result<Self> {
70        Self::load_via_json_merge(default_value, user_values)
71    }
72}