Detailed changes
@@ -6,7 +6,6 @@ use crate::{HistoryStore, TerminalHandle, ThreadEnvironment, TitleUpdated, Token
use acp_thread::{AcpThread, AgentModelSelector};
use action_log::ActionLog;
use agent_client_protocol as acp;
-use agent_settings::AgentSettings;
use anyhow::{Context as _, Result, anyhow};
use collections::{HashSet, IndexMap};
use fs::Fs;
@@ -873,13 +872,9 @@ impl AgentModelSelector for NativeAgentConnection {
thread.set_model(model.clone(), cx);
});
- update_settings_file::<AgentSettings>(
- self.0.read(cx).fs.clone(),
- cx,
- move |settings, _cx| {
- settings.set_model(model);
- },
- );
+ update_settings_file(self.0.read(cx).fs.clone(), cx, move |settings, _cx| {
+ settings.agent.get_or_insert_default().set_model(model);
+ });
Task::ready(Ok(()))
}
@@ -2477,8 +2477,11 @@ impl ToolCallEventStream {
"always_allow" => {
if let Some(fs) = fs.clone() {
cx.update(|cx| {
- update_settings_file::<AgentSettings>(fs, cx, |settings, _| {
- settings.set_always_allow_tool_actions(true);
+ update_settings_file(fs, cx, |settings, _| {
+ settings
+ .agent
+ .get_or_insert_default()
+ .set_always_allow_tool_actions(true);
});
})?;
}
@@ -791,14 +791,11 @@ mod tests {
// First, test with format_on_save enabled
cx.update(|cx| {
SettingsStore::update_global(cx, |store, cx| {
- store.update_user_settings::<language::language_settings::AllLanguageSettings>(
- cx,
- |settings| {
- settings.defaults.format_on_save = Some(FormatOnSave::On);
- settings.defaults.formatter =
- Some(language::language_settings::SelectedFormatter::Auto);
- },
- );
+ store.update_user_settings(cx, |settings| {
+ settings.project.all_languages.defaults.format_on_save = Some(FormatOnSave::On);
+ settings.project.all_languages.defaults.formatter =
+ Some(language::language_settings::SelectedFormatter::Auto);
+ });
});
});
@@ -853,12 +850,10 @@ mod tests {
// Next, test with format_on_save disabled
cx.update(|cx| {
SettingsStore::update_global(cx, |store, cx| {
- store.update_user_settings::<language::language_settings::AllLanguageSettings>(
- cx,
- |settings| {
- settings.defaults.format_on_save = Some(FormatOnSave::Off);
- },
- );
+ store.update_user_settings(cx, |settings| {
+ settings.project.all_languages.defaults.format_on_save =
+ Some(FormatOnSave::Off);
+ });
});
});
@@ -935,12 +930,13 @@ mod tests {
// First, test with remove_trailing_whitespace_on_save enabled
cx.update(|cx| {
SettingsStore::update_global(cx, |store, cx| {
- store.update_user_settings::<language::language_settings::AllLanguageSettings>(
- cx,
- |settings| {
- settings.defaults.remove_trailing_whitespace_on_save = Some(true);
- },
- );
+ store.update_user_settings(cx, |settings| {
+ settings
+ .project
+ .all_languages
+ .defaults
+ .remove_trailing_whitespace_on_save = Some(true);
+ });
});
});
@@ -991,12 +987,13 @@ mod tests {
// Next, test with remove_trailing_whitespace_on_save disabled
cx.update(|cx| {
SettingsStore::update_global(cx, |store, cx| {
- store.update_user_settings::<language::language_settings::AllLanguageSettings>(
- cx,
- |settings| {
- settings.defaults.remove_trailing_whitespace_on_save = Some(false);
- },
- );
+ store.update_user_settings(cx, |settings| {
+ settings
+ .project
+ .all_languages
+ .defaults
+ .remove_trailing_whitespace_on_save = Some(false);
+ });
});
});
@@ -827,15 +827,14 @@ mod tests {
cx.update(|cx| {
use gpui::UpdateGlobal;
- use project::WorktreeSettings;
use settings::SettingsStore;
SettingsStore::update_global(cx, |store, cx| {
- store.update_user_settings::<WorktreeSettings>(cx, |settings| {
- settings.file_scan_exclusions = Some(vec![
+ store.update_user_settings(cx, |settings| {
+ settings.project.worktree.file_scan_exclusions = Some(vec![
"**/.secretdir".to_string(),
"**/.mymetadata".to_string(),
]);
- settings.private_files = Some(vec![
+ settings.project.worktree.private_files = Some(vec![
"**/.mysecrets".to_string(),
"**/*.privatekey".to_string(),
"**/*.mysensitive".to_string(),
@@ -1062,10 +1061,10 @@ mod tests {
// Set global settings
cx.update(|cx| {
SettingsStore::update_global(cx, |store, cx| {
- store.update_user_settings::<WorktreeSettings>(cx, |settings| {
- settings.file_scan_exclusions =
+ store.update_user_settings(cx, |settings| {
+ settings.project.worktree.file_scan_exclusions =
Some(vec!["**/.git".to_string(), "**/node_modules".to_string()]);
- settings.private_files = Some(vec!["**/.env".to_string()]);
+ settings.project.worktree.private_files = Some(vec!["**/.env".to_string()]);
});
});
});
@@ -421,13 +421,13 @@ mod tests {
// Configure settings explicitly
cx.update(|cx| {
SettingsStore::update_global(cx, |store, cx| {
- store.update_user_settings::<WorktreeSettings>(cx, |settings| {
- settings.file_scan_exclusions = Some(vec![
+ store.update_user_settings(cx, |settings| {
+ settings.project.worktree.file_scan_exclusions = Some(vec![
"**/.secretdir".to_string(),
"**/.mymetadata".to_string(),
"**/.hidden_subdir".to_string(),
]);
- settings.private_files = Some(vec![
+ settings.project.worktree.private_files = Some(vec![
"**/.mysecrets".to_string(),
"**/*.privatekey".to_string(),
"**/*.mysensitive".to_string(),
@@ -1445,8 +1445,8 @@ mod tests {
fn init_test_with_config(cx: &mut TestAppContext, data_dir: &Path) {
cx.update(|cx| {
- // Set custom data directory (config will be under data_dir/config)
paths::set_custom_data_dir(data_dir.to_str().unwrap());
+ // Set custom data directory (config will be under data_dir/config)
let settings_store = SettingsStore::test(cx);
cx.set_global(settings_store);
@@ -1537,15 +1537,11 @@ mod tests {
// First, test with format_on_save enabled
cx.update(|cx| {
SettingsStore::update_global(cx, |store, cx| {
- store.update_user_settings::<language::language_settings::AllLanguageSettings>(
- cx,
- |settings| {
- se
- settings.defaults.format_on_save = Some(FormatOnSave::On);
- settings.defaults.formatter =
- Some(language::language_settings::SelectedFormatter::Auto);
- },
- );
+ store.update_user_settings(cx, |settings| {
+ settings.project.all_languages.defaults.format_on_save = Some(FormatOnSave::On);
+ settings.project.all_languages.defaults.formatter =
+ Some(language::language_settings::SelectedFormatter::Auto);
+ });
});
});
@@ -1604,12 +1600,10 @@ mod tests {
// Next, test with format_on_save disabled
cx.update(|cx| {
SettingsStore::update_global(cx, |store, cx| {
- store.update_user_settings::<language::language_settings::AllLanguageSettings>(
- cx,
- |settings| {
- settings.defaults.format_on_save = Some(FormatOnSave::Off);
- },
- );
+ store.update_user_settings(cx, |settings| {
+ settings.project.all_languages.defaults.format_on_save =
+ Some(FormatOnSave::Off);
+ });
});
});
@@ -1680,12 +1674,13 @@ mod tests {
// First, test with remove_trailing_whitespace_on_save enabled
cx.update(|cx| {
SettingsStore::update_global(cx, |store, cx| {
- store.update_user_settings::<language::language_settings::AllLanguageSettings>(
- cx,
- |settings| {
- settings.defaults.remove_trailing_whitespace_on_save = Some(true);
- },
- );
+ store.update_user_settings(cx, |settings| {
+ settings
+ .project
+ .all_languages
+ .defaults
+ .remove_trailing_whitespace_on_save = Some(true);
+ });
});
});
@@ -1742,12 +1737,13 @@ mod tests {
// Next, test with remove_trailing_whitespace_on_save disabled
cx.update(|cx| {
SettingsStore::update_global(cx, |store, cx| {
- store.update_user_settings::<language::language_settings::AllLanguageSettings>(
- cx,
- |settings| {
- settings.defaults.remove_trailing_whitespace_on_save = Some(false);
- },
- );
+ store.update_user_settings(cx, |settings| {
+ settings
+ .project
+ .all_languages
+ .defaults
+ .remove_trailing_whitespace_on_save = Some(false);
+ });
});
});
@@ -314,7 +314,7 @@ mod tests {
use gpui::{AppContext, TestAppContext, UpdateGlobal};
use language::{Language, LanguageConfig, LanguageMatcher};
use language_model::fake_provider::FakeLanguageModel;
- use project::{FakeFs, Project, WorktreeSettings};
+ use project::{FakeFs, Project};
use serde_json::json;
use settings::SettingsStore;
use unindent::Unindent;
@@ -849,15 +849,14 @@ mod tests {
cx.update(|cx| {
use gpui::UpdateGlobal;
- use project::WorktreeSettings;
use settings::SettingsStore;
SettingsStore::update_global(cx, |store, cx| {
- store.update_user_settings::<WorktreeSettings>(cx, |settings| {
- settings.file_scan_exclusions = Some(vec![
+ store.update_user_settings(cx, |settings| {
+ settings.project.worktree.file_scan_exclusions = Some(vec![
"**/.secretdir".to_string(),
"**/.mymetadata".to_string(),
]);
- settings.private_files = Some(vec![
+ settings.project.worktree.private_files = Some(vec![
"**/.mysecrets".to_string(),
"**/*.privatekey".to_string(),
"**/*.mysensitive".to_string(),
@@ -1158,10 +1157,10 @@ mod tests {
// Set global settings
cx.update(|cx| {
SettingsStore::update_global(cx, |store, cx| {
- store.update_user_settings::<WorktreeSettings>(cx, |settings| {
- settings.file_scan_exclusions =
+ store.update_user_settings(cx, |settings| {
+ settings.project.worktree.file_scan_exclusions =
Some(vec!["**/.git".to_string(), "**/node_modules".to_string()]);
- settings.private_files = Some(vec!["**/.env".to_string()]);
+ settings.project.worktree.private_files = Some(vec!["**/.env".to_string()]);
});
});
});
@@ -230,7 +230,7 @@ mod tests {
use gpui::{AppContext, TestAppContext, UpdateGlobal};
use indoc::indoc;
use language_model::fake_provider::FakeLanguageModel;
- use project::{FakeFs, Project, WorktreeSettings};
+ use project::{FakeFs, Project};
use serde_json::json;
use settings::SettingsStore;
use util::path;
@@ -507,13 +507,13 @@ mod tests {
// Configure settings explicitly
cx.update(|cx| {
SettingsStore::update_global(cx, |store, cx| {
- store.update_user_settings::<WorktreeSettings>(cx, |settings| {
- settings.file_scan_exclusions = Some(vec![
+ store.update_user_settings(cx, |settings| {
+ settings.project.worktree.file_scan_exclusions = Some(vec![
"**/.secretdir".to_string(),
"**/.mymetadata".to_string(),
"**/.hidden_subdir".to_string(),
]);
- settings.private_files = Some(vec![
+ settings.project.worktree.private_files = Some(vec![
"**/.mysecrets".to_string(),
"**/*.privatekey".to_string(),
"**/*.mysensitive".to_string(),
@@ -698,10 +698,10 @@ mod tests {
// Set global settings
cx.update(|cx| {
SettingsStore::update_global(cx, |store, cx| {
- store.update_user_settings::<WorktreeSettings>(cx, |settings| {
- settings.file_scan_exclusions =
+ store.update_user_settings(cx, |settings| {
+ settings.project.worktree.file_scan_exclusions =
Some(vec!["**/.git".to_string(), "**/node_modules".to_string()]);
- settings.private_files = Some(vec!["**/.env".to_string()]);
+ settings.project.worktree.private_files = Some(vec!["**/.env".to_string()]);
});
});
});
@@ -299,7 +299,7 @@ mod test {
use gpui::{AppContext, TestAppContext, UpdateGlobal};
use language::{Language, LanguageConfig, LanguageMatcher};
use language_model::fake_provider::FakeLanguageModel;
- use project::{FakeFs, Project, WorktreeSettings};
+ use project::{FakeFs, Project};
use serde_json::json;
use settings::SettingsStore;
use util::path;
@@ -677,15 +677,14 @@ mod test {
cx.update(|cx| {
use gpui::UpdateGlobal;
- use project::WorktreeSettings;
use settings::SettingsStore;
SettingsStore::update_global(cx, |store, cx| {
- store.update_user_settings::<WorktreeSettings>(cx, |settings| {
- settings.file_scan_exclusions = Some(vec![
+ store.update_user_settings(cx, |settings| {
+ settings.project.worktree.file_scan_exclusions = Some(vec![
"**/.secretdir".to_string(),
"**/.mymetadata".to_string(),
]);
- settings.private_files = Some(vec![
+ settings.project.worktree.private_files = Some(vec![
"**/.mysecrets".to_string(),
"**/*.privatekey".to_string(),
"**/*.mysensitive".to_string(),
@@ -968,10 +967,10 @@ mod test {
// Set global settings
cx.update(|cx| {
SettingsStore::update_global(cx, |store, cx| {
- store.update_user_settings::<WorktreeSettings>(cx, |settings| {
- settings.file_scan_exclusions =
+ store.update_user_settings(cx, |settings| {
+ settings.project.worktree.file_scan_exclusions =
Some(vec!["**/.git".to_string(), "**/node_modules".to_string()]);
- settings.private_files = Some(vec!["**/.env".to_string()]);
+ settings.project.worktree.private_files = Some(vec!["**/.env".to_string()]);
});
});
});