diff --git a/crates/settings/src/settings_content.rs b/crates/settings/src/settings_content.rs index f1547f769d432fa400ea068622f969f9f7c0d183..30b762af2e06be684b3153855a930b3c3eab7596 100644 --- a/crates/settings/src/settings_content.rs +++ b/crates/settings/src/settings_content.rs @@ -132,10 +132,13 @@ pub enum BaseKeymapContent { None, } -#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize, JsonSchema)] +#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)] pub struct ProjectSettingsContent { #[serde(flatten)] pub all_languages: AllLanguageSettingsContent, + + #[serde(flatten)] + pub worktree: WorktreeSettingsContent, } #[derive(Clone, PartialEq, Default, Serialize, Deserialize, JsonSchema, Debug)] @@ -225,3 +228,40 @@ pub enum GitHostingProviderKind { Gitlab, Bitbucket, } + +#[derive(Clone, Debug, Default, Serialize, Deserialize, JsonSchema)] +pub struct WorktreeSettingsContent { + /// The displayed name of this project. If not set, the root directory name + /// will be displayed. + /// + /// Default: none + pub project_name: Option, + + /// Completely ignore files matching globs from `file_scan_exclusions`. Overrides + /// `file_scan_inclusions`. + /// + /// Default: [ + /// "**/.git", + /// "**/.svn", + /// "**/.hg", + /// "**/.jj", + /// "**/CVS", + /// "**/.DS_Store", + /// "**/Thumbs.db", + /// "**/.classpath", + /// "**/.settings" + /// ] + pub file_scan_exclusions: Option>, + + /// Always include files that match these globs when scanning for files, even if they're + /// ignored by git. This setting is overridden by `file_scan_exclusions`. + /// Default: [ + /// ".env*", + /// "docker-compose.*.yml", + /// ] + pub file_scan_inclusions: Option>, + + /// Treat the files matching these globs as `.env` files. + /// Default: [ "**/.env*" ] + pub private_files: Option>, +} diff --git a/crates/worktree/src/worktree_settings.rs b/crates/worktree/src/worktree_settings.rs index ca7714fa7315117a5c2e31b06d2f059ad43cb1a9..18aa9c0ae41eca95a77eeff2a8b57ab943f1f2b0 100644 --- a/crates/worktree/src/worktree_settings.rs +++ b/crates/worktree/src/worktree_settings.rs @@ -4,7 +4,7 @@ use anyhow::Context as _; use gpui::App; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -use settings::{Settings, SettingsKey, SettingsSources, SettingsUi}; +use settings::{Settings, SettingsKey, SettingsUi}; use util::paths::PathMatcher; #[derive(Clone, PartialEq, Eq)] @@ -32,50 +32,14 @@ impl WorktreeSettings { } } -#[derive(Clone, Default, Serialize, Deserialize, JsonSchema, SettingsUi, SettingsKey)] -#[settings_key(None)] -pub struct WorktreeSettingsContent { - /// The displayed name of this project. If not set, the root directory name - /// will be displayed. - /// - /// Default: none - #[serde(default)] - pub project_name: Option, - - /// Completely ignore files matching globs from `file_scan_exclusions`. Overrides - /// `file_scan_inclusions`. - /// - /// Default: [ - /// "**/.git", - /// "**/.svn", - /// "**/.hg", - /// "**/.jj", - /// "**/CVS", - /// "**/.DS_Store", - /// "**/Thumbs.db", - /// "**/.classpath", - /// "**/.settings" - /// ] - #[serde(default)] - pub file_scan_exclusions: Option>, - - /// Always include files that match these globs when scanning for files, even if they're - /// ignored by git. This setting is overridden by `file_scan_exclusions`. - /// Default: [ - /// ".env*", - /// "docker-compose.*.yml", - /// ] - #[serde(default)] - pub file_scan_inclusions: Option>, - - /// Treat the files matching these globs as `.env` files. - /// Default: [ "**/.env*" ] - pub private_files: Option>, -} - impl Settings for WorktreeSettings { - type FileContent = WorktreeSettingsContent; - + fn from_defaults(content: &settings::SettingsContent, _cx: &mut App) -> Self { + Self { + project_name: None, + file_scan_exclusions: content.project.worktree.file_scan_exclusions.unwrap(), + file_scan_inclusions: PathMatcher::default(), + } + } fn load(sources: SettingsSources, _: &mut App) -> anyhow::Result { let result: WorktreeSettingsContent = sources.json_merge()?; let mut file_scan_exclusions = result.file_scan_exclusions.unwrap_or_default();