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:
Conrad Irwin
2025-09-18 16:47:23 +00:00
committed by GitHub
co-authored by Ben Kunkle Mikayla Maki Anthony
parent 0a9023bce0
commit fcdab160f9
219 changed files with 11697 additions and 11894 deletions
+2 -2
View File
@@ -264,8 +264,8 @@ pub(crate) fn render_ai_setup_page(
);
let fs = <dyn Fs>::global(cx);
update_settings_file::<DisableAiSettings>(fs, cx, move |ai_settings, _| {
ai_settings.disable_ai = Some(enabled);
update_settings_file(fs, cx, move |settings, _| {
settings.disable_ai = Some(enabled);
});
},
)
+2 -2
View File
@@ -186,8 +186,8 @@ impl PickerDelegate for BaseKeymapSelectorDelegate {
value = base_keymap.to_string()
);
update_settings_file::<BaseKeymap>(self.fs.clone(), cx, move |setting, _| {
setting.base_keymap = Some(base_keymap)
update_settings_file(self.fs.clone(), cx, move |setting, _| {
setting.base_keymap = Some(base_keymap.into())
});
}
+18 -12
View File
@@ -194,27 +194,27 @@ fn render_theme_section(tab_index: &mut isize, cx: &mut App) -> impl IntoElement
fn write_mode_change(mode: ThemeMode, cx: &mut App) {
let fs = <dyn Fs>::global(cx);
update_settings_file::<ThemeSettings>(fs, cx, move |settings, _cx| {
settings.set_mode(mode);
update_settings_file(fs, cx, move |settings, _cx| {
theme::set_mode(settings, mode);
});
}
fn write_theme_change(theme: impl Into<Arc<str>>, theme_mode: ThemeMode, cx: &mut App) {
let fs = <dyn Fs>::global(cx);
let theme = theme.into();
update_settings_file::<ThemeSettings>(fs, cx, move |settings, cx| {
update_settings_file(fs, cx, move |settings, cx| {
if theme_mode == ThemeMode::System {
let (light_theme, dark_theme) =
get_theme_family_themes(&theme).unwrap_or((theme.as_ref(), theme.as_ref()));
settings.theme = Some(ThemeSelection::Dynamic {
settings.theme.theme = Some(settings::ThemeSelection::Dynamic {
mode: ThemeMode::System,
light: ThemeName(light_theme.into()),
dark: ThemeName(dark_theme.into()),
});
} else {
let appearance = *SystemAppearance::global(cx);
settings.set_theme(theme, appearance);
theme::set_theme(settings, theme, appearance);
}
});
}
@@ -247,10 +247,13 @@ fn render_telemetry_section(tab_index: &mut isize, cx: &App) -> impl IntoElement
ToggleState::Indeterminate => { return; },
};
update_settings_file::<TelemetrySettings>(
update_settings_file(
fs.clone(),
cx,
move |setting, _| setting.metrics = Some(enabled),
move |setting, _| {
setting.telemetry.get_or_insert_default().metrics = Some(enabled);
}
,
);
// This telemetry event shouldn't fire when it's off. If it does we'll be alerted
@@ -286,10 +289,13 @@ fn render_telemetry_section(tab_index: &mut isize, cx: &App) -> impl IntoElement
ToggleState::Indeterminate => { return; },
};
update_settings_file::<TelemetrySettings>(
update_settings_file(
fs.clone(),
cx,
move |setting, _| setting.diagnostics = Some(enabled),
move |setting, _| {
setting.telemetry.get_or_insert_default().diagnostics = Some(enabled);
},
);
// This telemetry event shouldn't fire when it's off. If it does we'll be alerted
@@ -358,8 +364,8 @@ fn render_base_keymap_section(tab_index: &mut isize, cx: &mut App) -> impl IntoE
fn write_keymap_base(keymap_base: BaseKeymap, cx: &App) {
let fs = <dyn Fs>::global(cx);
update_settings_file::<BaseKeymap>(fs, cx, move |setting, _| {
setting.base_keymap = Some(keymap_base);
update_settings_file(fs, cx, move |setting, _| {
setting.base_keymap = Some(keymap_base.into());
});
telemetry::event!("Welcome Keymap Changed", keymap = keymap_base);
@@ -387,7 +393,7 @@ fn render_vim_mode_switch(tab_index: &mut isize, cx: &mut App) -> impl IntoEleme
return;
}
};
update_settings_file::<VimModeSetting>(fs.clone(), cx, move |setting, _| {
update_settings_file(fs.clone(), cx, move |setting, _| {
setting.vim_mode = Some(vim_mode);
});
+31 -36
View File
@@ -34,13 +34,13 @@ fn write_show_mini_map(show: ShowMinimap, cx: &mut App) {
curr_settings.minimap.show = show;
EditorSettings::override_global(curr_settings, cx);
update_settings_file::<EditorSettings>(fs, cx, move |editor_settings, _| {
update_settings_file(fs, cx, move |settings, _| {
telemetry::event!(
"Welcome Minimap Clicked",
from = editor_settings.minimap.unwrap_or_default(),
from = settings.editor.minimap.clone().unwrap_or_default(),
to = show
);
editor_settings.minimap.get_or_insert_default().show = Some(show);
settings.editor.minimap.get_or_insert_default().show = Some(show);
});
}
@@ -58,86 +58,80 @@ fn write_inlay_hints(enabled: bool, cx: &mut App) {
curr_settings.defaults.inlay_hints.enabled = enabled;
AllLanguageSettings::override_global(curr_settings, cx);
update_settings_file::<AllLanguageSettings>(fs, cx, move |all_language_settings, cx| {
all_language_settings
update_settings_file(fs, cx, move |settings, _cx| {
settings
.project
.all_languages
.defaults
.inlay_hints
.get_or_insert_with(|| {
AllLanguageSettings::get_global(cx)
.clone()
.defaults
.inlay_hints
})
.enabled = enabled;
.get_or_insert_default()
.enabled = Some(enabled);
});
}
fn read_git_blame(cx: &App) -> bool {
ProjectSettings::get_global(cx).git.inline_blame_enabled()
ProjectSettings::get_global(cx).git.inline_blame.enabled
}
fn write_git_blame(enabled: bool, cx: &mut App) {
let fs = <dyn Fs>::global(cx);
let mut curr_settings = ProjectSettings::get_global(cx).clone();
curr_settings
.git
.inline_blame
.get_or_insert_default()
.enabled = enabled;
curr_settings.git.inline_blame.enabled = enabled;
ProjectSettings::override_global(curr_settings, cx);
update_settings_file::<ProjectSettings>(fs, cx, move |project_settings, _| {
project_settings
update_settings_file(fs, cx, move |settings, _| {
settings
.git
.get_or_insert_default()
.inline_blame
.get_or_insert_default()
.enabled = enabled;
.enabled = Some(enabled);
});
}
fn write_ui_font_family(font: SharedString, cx: &mut App) {
let fs = <dyn Fs>::global(cx);
update_settings_file::<ThemeSettings>(fs, cx, move |theme_settings, _| {
update_settings_file(fs, cx, move |settings, _| {
telemetry::event!(
"Welcome Font Changed",
type = "ui font",
old = theme_settings.ui_font_family,
old = settings.theme.ui_font_family,
new = font
);
theme_settings.ui_font_family = Some(FontFamilyName(font.into()));
settings.theme.ui_font_family = Some(FontFamilyName(font.into()));
});
}
fn write_ui_font_size(size: Pixels, cx: &mut App) {
let fs = <dyn Fs>::global(cx);
update_settings_file::<ThemeSettings>(fs, cx, move |theme_settings, _| {
theme_settings.ui_font_size = Some(size.into());
update_settings_file(fs, cx, move |settings, _| {
settings.theme.ui_font_size = Some(size.into());
});
}
fn write_buffer_font_size(size: Pixels, cx: &mut App) {
let fs = <dyn Fs>::global(cx);
update_settings_file::<ThemeSettings>(fs, cx, move |theme_settings, _| {
theme_settings.buffer_font_size = Some(size.into());
update_settings_file(fs, cx, move |settings, _| {
settings.theme.buffer_font_size = Some(size.into());
});
}
fn write_buffer_font_family(font_family: SharedString, cx: &mut App) {
let fs = <dyn Fs>::global(cx);
update_settings_file::<ThemeSettings>(fs, cx, move |theme_settings, _| {
update_settings_file(fs, cx, move |settings, _| {
telemetry::event!(
"Welcome Font Changed",
type = "editor font",
old = theme_settings.buffer_font_family,
old = settings.theme.buffer_font_family,
new = font_family
);
theme_settings.buffer_font_family = Some(FontFamilyName(font_family.into()));
settings.theme.buffer_font_family = Some(FontFamilyName(font_family.into()));
});
}
@@ -153,8 +147,9 @@ fn write_font_ligatures(enabled: bool, cx: &mut App) {
let fs = <dyn Fs>::global(cx);
let bit = if enabled { 1 } else { 0 };
update_settings_file::<ThemeSettings>(fs, cx, move |theme_settings, _| {
let mut features = theme_settings
update_settings_file(fs, cx, move |settings, _| {
let mut features = settings
.theme
.buffer_font_features
.as_mut()
.map(|features| features.tag_value_list().to_vec())
@@ -166,7 +161,7 @@ fn write_font_ligatures(enabled: bool, cx: &mut App) {
features.push(("calt".into(), bit));
}
theme_settings.buffer_font_features = Some(FontFeatures(Arc::new(features)));
settings.theme.buffer_font_features = Some(FontFeatures(Arc::new(features)));
});
}
@@ -180,8 +175,8 @@ fn read_format_on_save(cx: &App) -> bool {
fn write_format_on_save(format_on_save: bool, cx: &mut App) {
let fs = <dyn Fs>::global(cx);
update_settings_file::<AllLanguageSettings>(fs, cx, move |language_settings, _| {
language_settings.defaults.format_on_save = Some(match format_on_save {
update_settings_file(fs, cx, move |settings, _| {
settings.project.all_languages.defaults.format_on_save = Some(match format_on_save {
true => FormatOnSave::On,
false => FormatOnSave::Off,
});