Settings refactor (#38367)
Co-Authored-By: Ben K <ben@zed.dev> Co-Authored-By: Anthony <anthony@zed.dev> Co-Authored-By: Mikayla <mikayla@zed.dev> Release Notes: - settings: Major internal changes to settings. The primary user-facing effect is that some settings which did not make sense in project settings files are no-longer read from there. (For example the inline blame settings) --------- Co-authored-by: Ben Kunkle <ben@zed.dev> Co-authored-by: Mikayla Maki <mikayla.c.maki@gmail.com> Co-authored-by: Anthony <anthony@zed.dev>
This commit is contained in:
co-authored by
Ben Kunkle
Mikayla Maki
Anthony
parent
0a9023bce0
commit
fcdab160f9
@@ -614,7 +614,6 @@ pub fn main() {
|
||||
markdown_preview::init(cx);
|
||||
svg_preview::init(cx);
|
||||
onboarding::init(cx);
|
||||
settings_ui::init(cx);
|
||||
keymap_editor::init(cx);
|
||||
extensions_ui::init(cx);
|
||||
zeta::init(cx);
|
||||
|
||||
+23
-45
@@ -727,9 +727,10 @@ fn register_actions(
|
||||
let fs = app_state.fs.clone();
|
||||
move |_, action: &zed_actions::IncreaseUiFontSize, _window, cx| {
|
||||
if action.persist {
|
||||
update_settings_file::<ThemeSettings>(fs.clone(), cx, move |settings, cx| {
|
||||
update_settings_file(fs.clone(), cx, move |settings, cx| {
|
||||
let ui_font_size = ThemeSettings::get_global(cx).ui_font_size(cx) + px(1.0);
|
||||
let _ = settings
|
||||
.theme
|
||||
.ui_font_size
|
||||
.insert(theme::clamp_font_size(ui_font_size).0);
|
||||
});
|
||||
@@ -742,9 +743,10 @@ fn register_actions(
|
||||
let fs = app_state.fs.clone();
|
||||
move |_, action: &zed_actions::DecreaseUiFontSize, _window, cx| {
|
||||
if action.persist {
|
||||
update_settings_file::<ThemeSettings>(fs.clone(), cx, move |settings, cx| {
|
||||
update_settings_file(fs.clone(), cx, move |settings, cx| {
|
||||
let ui_font_size = ThemeSettings::get_global(cx).ui_font_size(cx) - px(1.0);
|
||||
let _ = settings
|
||||
.theme
|
||||
.ui_font_size
|
||||
.insert(theme::clamp_font_size(ui_font_size).0);
|
||||
});
|
||||
@@ -757,8 +759,8 @@ fn register_actions(
|
||||
let fs = app_state.fs.clone();
|
||||
move |_, action: &zed_actions::ResetUiFontSize, _window, cx| {
|
||||
if action.persist {
|
||||
update_settings_file::<ThemeSettings>(fs.clone(), cx, move |settings, _| {
|
||||
settings.ui_font_size = None;
|
||||
update_settings_file(fs.clone(), cx, move |settings, _| {
|
||||
settings.theme.ui_font_size = None;
|
||||
});
|
||||
} else {
|
||||
theme::reset_ui_font_size(cx);
|
||||
@@ -769,10 +771,11 @@ fn register_actions(
|
||||
let fs = app_state.fs.clone();
|
||||
move |_, action: &zed_actions::IncreaseBufferFontSize, _window, cx| {
|
||||
if action.persist {
|
||||
update_settings_file::<ThemeSettings>(fs.clone(), cx, move |settings, cx| {
|
||||
update_settings_file(fs.clone(), cx, move |settings, cx| {
|
||||
let buffer_font_size =
|
||||
ThemeSettings::get_global(cx).buffer_font_size(cx) + px(1.0);
|
||||
let _ = settings
|
||||
.theme
|
||||
.buffer_font_size
|
||||
.insert(theme::clamp_font_size(buffer_font_size).0);
|
||||
});
|
||||
@@ -785,10 +788,11 @@ fn register_actions(
|
||||
let fs = app_state.fs.clone();
|
||||
move |_, action: &zed_actions::DecreaseBufferFontSize, _window, cx| {
|
||||
if action.persist {
|
||||
update_settings_file::<ThemeSettings>(fs.clone(), cx, move |settings, cx| {
|
||||
update_settings_file(fs.clone(), cx, move |settings, cx| {
|
||||
let buffer_font_size =
|
||||
ThemeSettings::get_global(cx).buffer_font_size(cx) - px(1.0);
|
||||
let _ = settings
|
||||
.theme
|
||||
.buffer_font_size
|
||||
.insert(theme::clamp_font_size(buffer_font_size).0);
|
||||
});
|
||||
@@ -801,8 +805,8 @@ fn register_actions(
|
||||
let fs = app_state.fs.clone();
|
||||
move |_, action: &zed_actions::ResetBufferFontSize, _window, cx| {
|
||||
if action.persist {
|
||||
update_settings_file::<ThemeSettings>(fs.clone(), cx, move |settings, _| {
|
||||
settings.buffer_font_size = None;
|
||||
update_settings_file(fs.clone(), cx, move |settings, _| {
|
||||
settings.theme.buffer_font_size = None;
|
||||
});
|
||||
} else {
|
||||
theme::reset_buffer_font_size(cx);
|
||||
@@ -1944,7 +1948,7 @@ mod tests {
|
||||
};
|
||||
use language::{LanguageMatcher, LanguageRegistry};
|
||||
use pretty_assertions::{assert_eq, assert_ne};
|
||||
use project::{Project, ProjectPath, WorktreeSettings, project_settings::ProjectSettings};
|
||||
use project::{Project, ProjectPath};
|
||||
use serde_json::json;
|
||||
use settings::{SettingsStore, watch_config_file};
|
||||
use std::{
|
||||
@@ -2249,8 +2253,11 @@ mod tests {
|
||||
|
||||
cx.update(|cx| {
|
||||
SettingsStore::update_global(cx, |store, cx| {
|
||||
store.update_user_settings::<ProjectSettings>(cx, |settings| {
|
||||
settings.session.restore_unsaved_buffers = false
|
||||
store.update_user_settings(cx, |settings| {
|
||||
settings
|
||||
.session
|
||||
.get_or_insert_default()
|
||||
.restore_unsaved_buffers = Some(false)
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -2965,8 +2972,8 @@ mod tests {
|
||||
let app_state = init_test(cx);
|
||||
cx.update(|cx| {
|
||||
cx.update_global::<SettingsStore, _>(|store, cx| {
|
||||
store.update_user_settings::<WorktreeSettings>(cx, |project_settings| {
|
||||
project_settings.file_scan_exclusions =
|
||||
store.update_user_settings(cx, |project_settings| {
|
||||
project_settings.project.worktree.file_scan_exclusions =
|
||||
Some(vec!["excluded_dir".to_string(), "**/.git".to_string()]);
|
||||
});
|
||||
});
|
||||
@@ -4795,8 +4802,9 @@ mod tests {
|
||||
|
||||
// 3. Add .zed to file scan exclusions in user settings
|
||||
cx.update_global::<SettingsStore, _>(|store, cx| {
|
||||
store.update_user_settings::<WorktreeSettings>(cx, |worktree_settings| {
|
||||
worktree_settings.file_scan_exclusions = Some(vec![".zed".to_string()]);
|
||||
store.update_user_settings(cx, |worktree_settings| {
|
||||
worktree_settings.project.worktree.file_scan_exclusions =
|
||||
Some(vec![".zed".to_string()]);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -4856,34 +4864,4 @@ mod tests {
|
||||
"BUG FOUND: Project settings were overwritten when opening via command - original custom content was lost"
|
||||
);
|
||||
}
|
||||
|
||||
#[gpui::test]
|
||||
fn test_settings_defaults(cx: &mut TestAppContext) {
|
||||
cx.update(|cx| {
|
||||
settings::init(cx);
|
||||
workspace::init_settings(cx);
|
||||
title_bar::init(cx);
|
||||
editor::init_settings(cx);
|
||||
debugger_ui::init(cx);
|
||||
});
|
||||
let default_json =
|
||||
cx.read(|cx| cx.global::<SettingsStore>().raw_default_settings().clone());
|
||||
|
||||
let all_paths = cx.read(|cx| settings_ui::SettingsUiTree::new(cx).all_paths(cx));
|
||||
let mut failures = Vec::new();
|
||||
for path in all_paths {
|
||||
if settings_ui::read_settings_value_from_path(&default_json, &path).is_none() {
|
||||
failures.push(path);
|
||||
}
|
||||
}
|
||||
if !failures.is_empty() {
|
||||
panic!(
|
||||
"No default value found for paths: {:#?}",
|
||||
failures
|
||||
.into_iter()
|
||||
.map(|path| path.join("."))
|
||||
.collect::<Vec<_>>()
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user