108 lines · 3.1 KB · Rust
RawDownload
use editor::ShowScrollbar;use gpui::Pixels;use schemars::JsonSchema;use serde_derive::{Deserialize, Serialize};use settings::{Settings, SettingsSources, SettingsUi};use workspace::dock::DockPosition; #[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]pub struct ScrollbarSettingsContent {    /// When to show the scrollbar in the git panel.    ///    /// Default: inherits editor scrollbar settings    pub show: Option<Option<ShowScrollbar>>,} #[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]pub struct ScrollbarSettings {    pub show: Option<ShowScrollbar>,} #[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]#[serde(rename_all = "snake_case")]// Style of the git status indicator in the panel.//// Default: iconpub enum StatusStyleContent {    Icon,    LabelColor,} #[derive(Default, Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]#[serde(rename_all = "snake_case")]pub enum StatusStyle {    #[default]    Icon,    LabelColor,} #[derive(Clone, Default, Serialize, Deserialize, JsonSchema, Debug, SettingsUi)]pub struct GitPanelSettingsContent {    /// Whether to show the panel button in the status bar.    ///    /// Default: true    pub button: Option<bool>,    /// Where to dock the panel.    ///    /// Default: left    pub dock: Option<DockPosition>,    /// Default width of the panel in pixels.    ///    /// Default: 360    pub default_width: Option<f32>,    /// How entry statuses are displayed.    ///    /// Default: icon    pub status_style: Option<StatusStyle>,    /// How and when the scrollbar should be displayed.    ///    /// Default: inherits editor scrollbar settings    pub scrollbar: Option<ScrollbarSettings>,     /// What the default branch name should be when    /// `init.defaultBranch` is not set in git    ///    /// Default: main    pub fallback_branch_name: Option<String>,     /// Whether to sort entries in the panel by path    /// or by status (the default).    ///    /// Default: false    pub sort_by_path: Option<bool>,     /// Whether to collapse untracked files in the diff panel.    ///    /// Default: false    pub collapse_untracked_diff: Option<bool>,} #[derive(Deserialize, Debug, Clone, PartialEq)]pub struct GitPanelSettings {    pub button: bool,    pub dock: DockPosition,    pub default_width: Pixels,    pub status_style: StatusStyle,    pub scrollbar: ScrollbarSettings,    pub fallback_branch_name: String,    pub sort_by_path: bool,    pub collapse_untracked_diff: bool,} impl Settings for GitPanelSettings {    const KEY: Option<&'static str> = Some("git_panel");     type FileContent = GitPanelSettingsContent;     fn load(        sources: SettingsSources<Self::FileContent>,        _: &mut gpui::App,    ) -> anyhow::Result<Self> {        sources.json_merge()    }     fn import_from_vscode(vscode: &settings::VsCodeSettings, current: &mut Self::FileContent) {        vscode.bool_setting("git.enabled", &mut current.button);        vscode.string_setting("git.defaultBranchName", &mut current.fallback_branch_name);    }}