From 6f6d72890a3981140e2258cad67ec9113d358f35 Mon Sep 17 00:00:00 2001 From: Julia Date: Mon, 3 Oct 2022 15:42:30 -0400 Subject: [PATCH] Once again respect user settings for git gutter Co-Authored-By: Mikayla Maki --- crates/project/src/worktree.rs | 8 ++------ crates/settings/src/settings.rs | 27 +++++++++++++++++++++++++-- crates/workspace/src/workspace.rs | 14 ++++++++++---- 3 files changed, 37 insertions(+), 12 deletions(-) diff --git a/crates/project/src/worktree.rs b/crates/project/src/worktree.rs index ea02431ab9da45861f961e9867773d70899e165e..1016e58b739805b1e25c853b7c185b1301e366e5 100644 --- a/crates/project/src/worktree.rs +++ b/crates/project/src/worktree.rs @@ -663,12 +663,8 @@ impl LocalWorktree { let fs = self.fs.clone(); let snapshot = self.snapshot(); - let files_included = cx - .global::() - .git - .git_gutter - .expect("This should be Some by setting setup") - .files_included; + let settings = cx.global::(); + let files_included = settings.git_gutter().files_included(settings); cx.spawn(|this, mut cx| async move { let text = fs.load(&abs_path).await?; diff --git a/crates/settings/src/settings.rs b/crates/settings/src/settings.rs index 96555297440c5f91363b05121c97eb3e23ece44f..3bf09436edd81ed5bf83affd0a81ab0ff9ff359c 100644 --- a/crates/settings/src/settings.rs +++ b/crates/settings/src/settings.rs @@ -33,6 +33,7 @@ pub struct Settings { pub editor_defaults: EditorSettings, pub editor_overrides: EditorSettings, pub git: GitSettings, + pub git_overrides: GitSettings, pub terminal_defaults: TerminalSettings, pub terminal_overrides: TerminalSettings, pub language_defaults: HashMap, EditorSettings>, @@ -60,10 +61,21 @@ pub struct GitSettings { #[derive(Clone, Copy, Debug, Default, Deserialize, JsonSchema)] pub struct GitGutter { - pub files_included: GitFilesIncluded, + pub files_included: Option, pub debounce_delay_millis: Option, } +impl GitGutter { + pub fn files_included(&self, settings: &Settings) -> GitFilesIncluded { + self.files_included.unwrap_or_else(|| { + settings + .git.git_gutter.expect("git_gutter must be some in defaults.json") + .files_included + .expect("Should be some in defaults.json") + }) + } +} + #[derive(Clone, Copy, Debug, Default, Deserialize, JsonSchema, PartialEq, Eq)] #[serde(rename_all = "snake_case")] pub enum GitFilesIncluded { @@ -276,6 +288,7 @@ impl Settings { }, editor_overrides: Default::default(), git: defaults.git.unwrap(), + git_overrides: Default::default(), terminal_defaults: Default::default(), terminal_overrides: Default::default(), language_defaults: defaults.languages, @@ -327,6 +340,7 @@ impl Settings { } self.editor_overrides = data.editor; + self.git_overrides = data.git.unwrap_or_default(); self.terminal_defaults.font_size = data.terminal.font_size; self.terminal_overrides = data.terminal; self.language_overrides = data.languages; @@ -382,6 +396,14 @@ impl Settings { .expect("missing default") } + pub fn git_gutter(&self) -> GitGutter { + self.git_overrides.git_gutter.unwrap_or_else(|| { + self.git + .git_gutter + .expect("git_gutter should be some by setting setup") + }) + } + #[cfg(any(test, feature = "test-support"))] pub fn test(cx: &gpui::AppContext) -> Settings { Settings { @@ -408,10 +430,11 @@ impl Settings { terminal_overrides: Default::default(), git: GitSettings { git_gutter: Some(GitGutter { - files_included: GitFilesIncluded::All, + files_included: Some(GitFilesIncluded::All), debounce_delay_millis: None, }), }, + git_overrides: Default::default(), language_defaults: Default::default(), language_overrides: Default::default(), lsp: Default::default(), diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index fc1f6432a195dd5f0e573f0bc234670a0e1f6813..44c9b19f1bbd419b6e6eceb3b3c39c31fc587bec 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -734,12 +734,18 @@ impl ItemHandle for ViewHandle { ); } - let debounce_delay = cx - .global::() - .git + let settings = cx.global::(); + let debounce_delay = settings + .git_overrides .git_gutter - .expect("This should be Some by setting setup") + .unwrap_or_else(|| { + settings + .git + .git_gutter + .expect("This should be Some by setting setup") + }) .debounce_delay_millis; + let item = item.clone(); if let Some(delay) = debounce_delay {