serde 1.0.221 introduced serde_core into the build graph, which should render explicitly depending on serde_derive for faster build times an obsolote method. Besides, I'm not even sure if that worked for us. My hunch is that at least one of our deps would have `serde` with derive feature enabled.. and then, most of the crates using `serde_derive` explicitly were also depending on gpui, which depended on `serde`.. thus, we wouldn't have gained anything from explicit dep on `serde_derive` Release Notes: - N/A
125 lines
3.9 KiB
Rust
125 lines
3.9 KiB
Rust
use editor::EditorSettings;
|
|
use gpui::Pixels;
|
|
use schemars::JsonSchema;
|
|
use serde::{Deserialize, Serialize};
|
|
use settings::{Settings, SettingsKey, SettingsSources, SettingsUi};
|
|
use ui::scrollbars::{ScrollbarVisibility, ShowScrollbar};
|
|
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: icon
|
|
pub 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, SettingsKey)]
|
|
#[settings_key(key = "git_panel")]
|
|
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 ScrollbarVisibility for GitPanelSettings {
|
|
fn visibility(&self, cx: &ui::App) -> ShowScrollbar {
|
|
// TODO: This PR should have defined Editor's `scrollbar.axis`
|
|
// as an Option<ScrollbarAxis>, not a ScrollbarAxes as it would allow you to
|
|
// `.unwrap_or(EditorSettings::get_global(cx).scrollbar.show)`.
|
|
//
|
|
// Once this is fixed we can extend the GitPanelSettings with a `scrollbar.axis`
|
|
// so we can show each axis based on the settings.
|
|
//
|
|
// We should fix this. PR: https://github.com/zed-industries/zed/pull/19495
|
|
self.scrollbar
|
|
.show
|
|
.unwrap_or_else(|| EditorSettings::get_global(cx).scrollbar.show)
|
|
}
|
|
}
|
|
|
|
impl Settings for GitPanelSettings {
|
|
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);
|
|
}
|
|
}
|