156 lines · 4.9 KB · Rust
RawDownload
use editor::ShowScrollbar;use gpui::Pixels;use schemars::JsonSchema;use serde_derive::{Deserialize, Serialize};use settings::{Settings, SettingsSources}; #[derive(Clone, Debug, Serialize, Deserialize, JsonSchema, Copy, PartialEq)]#[serde(rename_all = "snake_case")]pub enum ProjectPanelDockPosition {    Left,    Right,} #[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]#[serde(rename_all = "snake_case")]pub enum ShowIndentGuides {    Always,    Never,} #[derive(Copy, Clone, Debug, Default, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]#[serde(rename_all = "snake_case")]pub enum EntrySpacing {    /// Comfortable spacing of entries.    #[default]    Comfortable,    /// The standard spacing of entries.    Standard,} #[derive(Deserialize, Debug, Clone, Copy, PartialEq)]pub struct ProjectPanelSettings {    pub button: bool,    pub default_width: Pixels,    pub dock: ProjectPanelDockPosition,    pub entry_spacing: EntrySpacing,    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,    pub show_diagnostics: ShowDiagnostics,} #[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 project panel.    pub show: Option<ShowIndentGuides>,} #[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>>,} /// Whether to indicate diagnostic errors and/or warnings in project panel items.////// Default: all#[derive(Copy, Clone, Debug, Default, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]#[serde(rename_all = "snake_case")]pub enum ShowDiagnostics {    /// Never mark the diagnostic errors/warnings in the project panel.    Off,    /// Mark files containing only diagnostic errors in the project panel.    Errors,    #[default]    /// Mark files containing diagnostic errors or warnings in the project panel.    All,} #[derive(Clone, Default, Serialize, Deserialize, JsonSchema, Debug)]pub struct ProjectPanelSettingsContent {    /// Whether to show the project panel button in the status bar.    ///    /// Default: true    pub button: Option<bool>,    /// Customize default width (in pixels) taken by project panel    ///    /// Default: 240    pub default_width: Option<f32>,    /// The position of project panel    ///    /// Default: left    pub dock: Option<ProjectPanelDockPosition>,    /// Spacing between worktree entries in the project panel.    ///    /// Default: comfortable    pub entry_spacing: Option<EntrySpacing>,    /// Whether to show file icons in the project panel.    ///    /// Default: true    pub file_icons: Option<bool>,    /// Whether to show folder icons or chevrons for directories in the project panel.    ///    /// Default: true    pub folder_icons: Option<bool>,    /// Whether to show the git status in the project 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 project 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>,    /// Scrollbar-related settings    pub scrollbar: Option<ScrollbarSettingsContent>,    /// Which files containing diagnostic errors/warnings to mark in the project panel.    ///    /// Default: all    pub show_diagnostics: Option<ShowDiagnostics>,    /// Settings related to indent guides in the project panel.    pub indent_guides: Option<IndentGuidesSettingsContent>,} impl Settings for ProjectPanelSettings {    const KEY: Option<&'static str> = Some("project_panel");     type FileContent = ProjectPanelSettingsContent;     fn load(        sources: SettingsSources<Self::FileContent>,        _: &mut gpui::App,    ) -> anyhow::Result<Self> {        sources.json_merge()    }}