121 lines · 3.7 KB · Rust
RawDownload
use editor::ShowScrollbar;use gpui::Pixels;use schemars::JsonSchema;use serde::{Deserialize, Serialize};use settings::{Settings, SettingsSources}; #[derive(Clone, Debug, Serialize, Deserialize, JsonSchema, Copy, PartialEq)]#[serde(rename_all = "snake_case")]pub enum OutlinePanelDockPosition {    Left,    Right,} #[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]#[serde(rename_all = "snake_case")]pub enum ShowIndentGuides {    Always,    Never,} #[derive(Deserialize, Debug, Clone, Copy, PartialEq)]pub struct OutlinePanelSettings {    pub button: bool,    pub default_width: Pixels,    pub dock: OutlinePanelDockPosition,    pub file_icons: bool,    pub folder_icons: bool,    pub git_status: bool,    pub indent_size: f32,    pub indent_guides: IndentGuidesSettings,    pub auto_reveal_entries: bool,    pub auto_fold_dirs: bool,    pub scrollbar: ScrollbarSettings,} #[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]pub struct ScrollbarSettings {    /// When to show the scrollbar in the project panel.    ///    /// Default: inherits editor scrollbar settings    pub show: Option<ShowScrollbar>,} #[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]pub struct ScrollbarSettingsContent {    /// When to show the scrollbar in the project panel.    ///    /// Default: inherits editor scrollbar settings    pub show: Option<Option<ShowScrollbar>>,} #[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]pub struct IndentGuidesSettings {    pub show: ShowIndentGuides,} #[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]pub struct IndentGuidesSettingsContent {    /// When to show the scrollbar in the outline panel.    pub show: Option<ShowIndentGuides>,} #[derive(Clone, Default, Serialize, Deserialize, JsonSchema, Debug)]pub struct OutlinePanelSettingsContent {    /// Whether to show the outline panel button in the status bar.    ///    /// Default: true    pub button: Option<bool>,    /// Customize default width (in pixels) taken by outline panel    ///    /// Default: 240    pub default_width: Option<f32>,    /// The position of outline panel    ///    /// Default: left    pub dock: Option<OutlinePanelDockPosition>,    /// Whether to show file icons in the outline panel.    ///    /// Default: true    pub file_icons: Option<bool>,    /// Whether to show folder icons or chevrons for directories in the outline panel.    ///    /// Default: true    pub folder_icons: Option<bool>,    /// Whether to show the git status in the outline panel.    ///    /// Default: true    pub git_status: Option<bool>,    /// Amount of indentation (in pixels) for nested items.    ///    /// Default: 20    pub indent_size: Option<f32>,    /// Whether to reveal it in the outline panel automatically,    /// when a corresponding project entry becomes active.    /// Gitignored entries are never auto revealed.    ///    /// Default: true    pub auto_reveal_entries: Option<bool>,    /// Whether to fold directories automatically    /// when directory has only one directory inside.    ///    /// Default: true    pub auto_fold_dirs: Option<bool>,    /// Settings related to indent guides in the outline panel.    pub indent_guides: Option<IndentGuidesSettingsContent>,    /// Scrollbar-related settings    pub scrollbar: Option<ScrollbarSettingsContent>,} impl Settings for OutlinePanelSettings {    const KEY: Option<&'static str> = Some("outline_panel");     type FileContent = OutlinePanelSettingsContent;     fn load(        sources: SettingsSources<Self::FileContent>,        _: &mut gpui::App,    ) -> anyhow::Result<Self> {        sources.json_merge()    }}