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
@@ -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);
|
||||
});
|
||||
},
|
||||
)
|
||||
|
||||
@@ -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())
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
|
||||
|
||||
@@ -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,
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user