825 lines · 27.0 KB · Rust
RawDownload
use gpui::App;use language::CursorShape;use project::project_settings::DiagnosticSeverity;use schemars::JsonSchema;use serde::{Deserialize, Serialize};use settings::{Settings, SettingsSources, VsCodeSettings};use util::serde::default_true; /// Imports from the VSCode settings at/// https://code.visualstudio.com/docs/reference/default-settings#[derive(Deserialize, Clone)]pub struct EditorSettings {    pub cursor_blink: bool,    pub cursor_shape: Option<CursorShape>,    pub current_line_highlight: CurrentLineHighlight,    pub selection_highlight: bool,    pub lsp_highlight_debounce: u64,    pub hover_popover_enabled: bool,    pub hover_popover_delay: u64,    pub toolbar: Toolbar,    pub scrollbar: Scrollbar,    pub minimap: Minimap,    pub gutter: Gutter,    pub scroll_beyond_last_line: ScrollBeyondLastLine,    pub vertical_scroll_margin: f32,    pub autoscroll_on_clicks: bool,    pub horizontal_scroll_margin: f32,    pub scroll_sensitivity: f32,    pub fast_scroll_sensitivity: f32,    pub relative_line_numbers: bool,    pub seed_search_query_from_cursor: SeedQuerySetting,    pub use_smartcase_search: bool,    pub multi_cursor_modifier: MultiCursorModifier,    pub redact_private_values: bool,    pub expand_excerpt_lines: u32,    pub middle_click_paste: bool,    #[serde(default)]    pub double_click_in_multibuffer: DoubleClickInMultibuffer,    pub search_wrap: bool,    #[serde(default)]    pub search: SearchSettings,    pub auto_signature_help: bool,    pub show_signature_help_after_edits: bool,    #[serde(default)]    pub go_to_definition_fallback: GoToDefinitionFallback,    pub jupyter: Jupyter,    pub hide_mouse: Option<HideMouseMode>,    pub snippet_sort_order: SnippetSortOrder,    #[serde(default)]    pub diagnostics_max_severity: Option<DiagnosticSeverity>,    pub inline_code_actions: bool,} #[derive(Copy, Clone, Debug, Serialize, Deserialize, PartialEq, Eq, JsonSchema)]#[serde(rename_all = "snake_case")]pub enum CurrentLineHighlight {    // Don't highlight the current line.    None,    // Highlight the gutter area.    Gutter,    // Highlight the editor area.    Line,    // Highlight the full line.    All,} /// When to populate a new search's query based on the text under the cursor.#[derive(Copy, Clone, Debug, Serialize, Deserialize, PartialEq, Eq, JsonSchema)]#[serde(rename_all = "snake_case")]pub enum SeedQuerySetting {    /// Always populate the search query with the word under the cursor.    Always,    /// Only populate the search query when there is text selected.    Selection,    /// Never populate the search query    Never,} /// What to do when multibuffer is double clicked in some of its excerpts (parts of singleton buffers).#[derive(Default, Copy, Clone, Debug, Serialize, Deserialize, PartialEq, Eq, JsonSchema)]#[serde(rename_all = "snake_case")]pub enum DoubleClickInMultibuffer {    /// Behave as a regular buffer and select the whole word.    #[default]    Select,    /// Open the excerpt clicked as a new buffer in the new tab, if no `alt` modifier was pressed during double click.    /// Otherwise, behave as a regular buffer and select the whole word.    Open,} #[derive(Debug, Clone, Deserialize)]pub struct Jupyter {    /// Whether the Jupyter feature is enabled.    ///    /// Default: true    pub enabled: bool,} #[derive(Default, Copy, Clone, Debug, Serialize, Deserialize, PartialEq, Eq, JsonSchema)]#[serde(rename_all = "snake_case")]pub struct JupyterContent {    /// Whether the Jupyter feature is enabled.    ///    /// Default: true    pub enabled: Option<bool>,} #[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]pub struct Toolbar {    pub breadcrumbs: bool,    pub quick_actions: bool,    pub selections_menu: bool,    pub agent_review: bool,    pub code_actions: bool,} #[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]pub struct Scrollbar {    pub show: ShowScrollbar,    pub git_diff: bool,    pub selected_text: bool,    pub selected_symbol: bool,    pub search_results: bool,    pub diagnostics: ScrollbarDiagnostics,    pub cursors: bool,    pub axes: ScrollbarAxes,} #[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq)]pub struct Minimap {    pub show: ShowMinimap,    pub thumb: MinimapThumb,    pub thumb_border: MinimapThumbBorder,    pub current_line_highlight: Option<CurrentLineHighlight>,} impl Minimap {    pub fn minimap_enabled(&self) -> bool {        self.show != ShowMinimap::Never    }     pub fn with_show_override(self) -> Self {        Self {            show: ShowMinimap::Always,            ..self        }    }} #[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]pub struct Gutter {    pub line_numbers: bool,    pub runnables: bool,    pub breakpoints: bool,    pub folds: bool,} /// When to show the scrollbar in the editor.////// Default: auto#[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]#[serde(rename_all = "snake_case")]pub enum ShowScrollbar {    /// Show the scrollbar if there's important information or    /// follow the system's configured behavior.    Auto,    /// Match the system's configured behavior.    System,    /// Always show the scrollbar.    Always,    /// Never show the scrollbar.    Never,} /// When to show the minimap in the editor.////// Default: never#[derive(Copy, Clone, Debug, Default, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]#[serde(rename_all = "snake_case")]pub enum ShowMinimap {    /// Follow the visibility of the scrollbar.    Auto,    /// Always show the minimap.    Always,    /// Never show the minimap.    #[default]    Never,} /// When to show the minimap thumb.////// Default: always#[derive(Copy, Clone, Debug, Default, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]#[serde(rename_all = "snake_case")]pub enum MinimapThumb {    /// Show the minimap thumb only when the mouse is hovering over the minimap.    Hover,    /// Always show the minimap thumb.    #[default]    Always,} /// Defines the border style for the minimap's scrollbar thumb.////// Default: left_open#[derive(Copy, Clone, Debug, Default, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]#[serde(rename_all = "snake_case")]pub enum MinimapThumbBorder {    /// Displays a border on all sides of the thumb.    Full,    /// Displays a border on all sides except the left side of the thumb.    #[default]    LeftOpen,    /// Displays a border on all sides except the right side of the thumb.    RightOpen,    /// Displays a border only on the left side of the thumb.    LeftOnly,    /// Displays the thumb without any border.    None,} /// Forcefully enable or disable the scrollbar for each axis#[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]#[serde(rename_all = "lowercase")]pub struct ScrollbarAxes {    /// When false, forcefully disables the horizontal scrollbar. Otherwise, obey other settings.    ///    /// Default: true    pub horizontal: bool,     /// When false, forcefully disables the vertical scrollbar. Otherwise, obey other settings.    ///    /// Default: true    pub vertical: bool,} /// Which diagnostic indicators to show in the scrollbar.////// Default: all#[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]#[serde(rename_all = "lowercase")]pub enum ScrollbarDiagnostics {    /// Show all diagnostic levels: hint, information, warnings, error.    All,    /// Show only the following diagnostic levels: information, warning, error.    Information,    /// Show only the following diagnostic levels: warning, error.    Warning,    /// Show only the following diagnostic level: error.    Error,    /// Do not show diagnostics.    None,} /// The key to use for adding multiple cursors////// Default: alt#[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]#[serde(rename_all = "snake_case")]pub enum MultiCursorModifier {    Alt,    #[serde(alias = "cmd", alias = "ctrl")]    CmdOrCtrl,} /// Whether the editor will scroll beyond the last line.////// Default: one_page#[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]#[serde(rename_all = "snake_case")]pub enum ScrollBeyondLastLine {    /// The editor will not scroll beyond the last line.    Off,     /// The editor will scroll beyond the last line by one page.    OnePage,     /// The editor will scroll beyond the last line by the same number of lines as vertical_scroll_margin.    VerticalScrollMargin,} /// Default options for buffer and project search items.#[derive(Copy, Clone, Default, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]pub struct SearchSettings {    /// Whether to show the project search button in the status bar.    #[serde(default = "default_true")]    pub button: bool,    #[serde(default)]    pub whole_word: bool,    #[serde(default)]    pub case_sensitive: bool,    #[serde(default)]    pub include_ignored: bool,    #[serde(default)]    pub regex: bool,} /// What to do when go to definition yields no results.#[derive(Copy, Clone, Debug, Default, Serialize, Deserialize, PartialEq, Eq, JsonSchema)]#[serde(rename_all = "snake_case")]pub enum GoToDefinitionFallback {    /// Disables the fallback.    None,    /// Looks up references of the same symbol instead.    #[default]    FindAllReferences,} /// Determines when the mouse cursor should be hidden in an editor or input box.////// Default: on_typing_and_movement#[derive(Copy, Clone, Debug, Default, Serialize, Deserialize, PartialEq, Eq, JsonSchema)]#[serde(rename_all = "snake_case")]pub enum HideMouseMode {    /// Never hide the mouse cursor    Never,    /// Hide only when typing    OnTyping,    /// Hide on both typing and cursor movement    #[default]    OnTypingAndMovement,} /// Determines how snippets are sorted relative to other completion items.////// Default: inline#[derive(Copy, Clone, Debug, Default, Serialize, Deserialize, PartialEq, Eq, JsonSchema)]#[serde(rename_all = "snake_case")]pub enum SnippetSortOrder {    /// Place snippets at the top of the completion list    Top,    /// Sort snippets normally using the default comparison logic    #[default]    Inline,    /// Place snippets at the bottom of the completion list    Bottom,} #[derive(Clone, Default, Serialize, Deserialize, JsonSchema)]#[schemars(deny_unknown_fields)]pub struct EditorSettingsContent {    /// Whether the cursor blinks in the editor.    ///    /// Default: true    pub cursor_blink: Option<bool>,    /// Cursor shape for the default editor.    /// Can be "bar", "block", "underline", or "hollow".    ///    /// Default: None    pub cursor_shape: Option<CursorShape>,    /// Determines when the mouse cursor should be hidden in an editor or input box.    ///    /// Default: on_typing_and_movement    pub hide_mouse: Option<HideMouseMode>,    /// Determines how snippets are sorted relative to other completion items.    ///    /// Default: inline    pub snippet_sort_order: Option<SnippetSortOrder>,    /// How to highlight the current line in the editor.    ///    /// Default: all    pub current_line_highlight: Option<CurrentLineHighlight>,    /// Whether to highlight all occurrences of the selected text in an editor.    ///    /// Default: true    pub selection_highlight: Option<bool>,    /// The debounce delay before querying highlights from the language    /// server based on the current cursor location.    ///    /// Default: 75    pub lsp_highlight_debounce: Option<u64>,    /// Whether to show the informational hover box when moving the mouse    /// over symbols in the editor.    ///    /// Default: true    pub hover_popover_enabled: Option<bool>,    /// Time to wait in milliseconds before showing the informational hover box.    ///    /// Default: 300    pub hover_popover_delay: Option<u64>,    /// Toolbar related settings    pub toolbar: Option<ToolbarContent>,    /// Scrollbar related settings    pub scrollbar: Option<ScrollbarContent>,    /// Minimap related settings    pub minimap: Option<MinimapContent>,    /// Gutter related settings    pub gutter: Option<GutterContent>,    /// Whether the editor will scroll beyond the last line.    ///    /// Default: one_page    pub scroll_beyond_last_line: Option<ScrollBeyondLastLine>,    /// The number of lines to keep above/below the cursor when auto-scrolling.    ///    /// Default: 3.    pub vertical_scroll_margin: Option<f32>,    /// Whether to scroll when clicking near the edge of the visible text area.    ///    /// Default: false    pub autoscroll_on_clicks: Option<bool>,    /// The number of characters to keep on either side when scrolling with the mouse.    ///    /// Default: 5.    pub horizontal_scroll_margin: Option<f32>,    /// Scroll sensitivity multiplier. This multiplier is applied    /// to both the horizontal and vertical delta values while scrolling.    ///    /// Default: 1.0    pub scroll_sensitivity: Option<f32>,    /// Scroll sensitivity multiplier for fast scrolling. This multiplier is applied    /// to both the horizontal and vertical delta values while scrolling. Fast scrolling    /// happens when a user holds the alt or option key while scrolling.    ///    /// Default: 4.0    pub fast_scroll_sensitivity: Option<f32>,    /// Whether the line numbers on editors gutter are relative or not.    ///    /// Default: false    pub relative_line_numbers: Option<bool>,    /// When to populate a new search's query based on the text under the cursor.    ///    /// Default: always    pub seed_search_query_from_cursor: Option<SeedQuerySetting>,    pub use_smartcase_search: Option<bool>,    /// The key to use for adding multiple cursors    ///    /// Default: alt    pub multi_cursor_modifier: Option<MultiCursorModifier>,    /// Hide the values of variables in `private` files, as defined by the    /// private_files setting. This only changes the visual representation,    /// the values are still present in the file and can be selected / copied / pasted    ///    /// Default: false    pub redact_private_values: Option<bool>,     /// How many lines to expand the multibuffer excerpts by default    ///    /// Default: 3    pub expand_excerpt_lines: Option<u32>,     /// Whether to enable middle-click paste on Linux    ///    /// Default: true    pub middle_click_paste: Option<bool>,     /// What to do when multibuffer is double clicked in some of its excerpts    /// (parts of singleton buffers).    ///    /// Default: select    pub double_click_in_multibuffer: Option<DoubleClickInMultibuffer>,    /// Whether the editor search results will loop    ///    /// Default: true    pub search_wrap: Option<bool>,     /// Defaults to use when opening a new buffer and project search items.    ///    /// Default: nothing is enabled    pub search: Option<SearchSettings>,     /// Whether to automatically show a signature help pop-up or not.    ///    /// Default: false    pub auto_signature_help: Option<bool>,     /// Whether to show the signature help pop-up after completions or bracket pairs inserted.    ///    /// Default: false    pub show_signature_help_after_edits: Option<bool>,     /// Whether to follow-up empty go to definition responses from the language server or not.    /// `FindAllReferences` allows to look up references of the same symbol instead.    /// `None` disables the fallback.    ///    /// Default: FindAllReferences    pub go_to_definition_fallback: Option<GoToDefinitionFallback>,     /// Jupyter REPL settings.    pub jupyter: Option<JupyterContent>,     /// Which level to use to filter out diagnostics displayed in the editor.    ///    /// Affects the editor rendering only, and does not interrupt    /// the functionality of diagnostics fetching and project diagnostics editor.    /// Which files containing diagnostic errors/warnings to mark in the tabs.    /// Diagnostics are only shown when file icons are also active.    ///    /// Shows all diagnostics if not specified.    ///    /// Default: warning    #[serde(default)]    pub diagnostics_max_severity: Option<DiagnosticSeverity>,     /// Whether to show code action button at start of buffer line.    ///    /// Default: true    pub inline_code_actions: Option<bool>,} // Toolbar related settings

Lines 1–500 of 825.