settings: Remove auxiliary Content types where possible (#16744)

Release Notes:

- N/A
This commit is contained in:
Piotr Osiewicz 2024-09-10 22:59:10 -04:00 committed by GitHub
parent 8f28445612
commit ccf6f27b8f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
49 changed files with 843 additions and 696 deletions

View file

@ -46,6 +46,8 @@ use crate::state::ReplayableAction;
/// Whether or not to enable Vim mode.
///
/// Default: false
#[derive(Copy, Clone, Default, Deserialize, Serialize, JsonSchema)]
#[serde(default, transparent)]
pub struct VimModeSetting(pub bool);
/// An Action to Switch between modes
@ -99,7 +101,7 @@ pub fn init(cx: &mut AppContext) {
let fs = workspace.app_state().fs.clone();
let currently_enabled = Vim::enabled(cx);
update_settings_file::<VimModeSetting>(fs, cx, move |setting, _| {
*setting = Some(!currently_enabled)
*setting = VimModeSetting(!currently_enabled);
})
});
@ -1068,12 +1070,10 @@ impl Vim {
impl Settings for VimModeSetting {
const KEY: Option<&'static str> = Some("vim_mode");
type FileContent = Option<bool>;
type FileContent = Self;
fn load(sources: SettingsSources<Self::FileContent>, _: &mut AppContext) -> Result<Self> {
Ok(Self(sources.user.copied().flatten().unwrap_or(
sources.default.ok_or_else(Self::missing_default)?,
)))
Ok(sources.user.copied().unwrap_or(*sources.default))
}
}
@ -1089,7 +1089,8 @@ pub enum UseSystemClipboard {
OnYank,
}
#[derive(Deserialize)]
#[derive(Clone, Serialize, Deserialize, JsonSchema)]
#[serde(default)]
struct VimSettings {
pub toggle_relative_line_numbers: bool,
pub use_system_clipboard: UseSystemClipboard,
@ -1098,19 +1099,22 @@ struct VimSettings {
pub custom_digraphs: HashMap<String, Arc<str>>,
}
#[derive(Clone, Default, Serialize, Deserialize, JsonSchema)]
struct VimSettingsContent {
pub toggle_relative_line_numbers: Option<bool>,
pub use_system_clipboard: Option<UseSystemClipboard>,
pub use_multiline_find: Option<bool>,
pub use_smartcase_find: Option<bool>,
pub custom_digraphs: Option<HashMap<String, Arc<str>>>,
impl Default for VimSettings {
fn default() -> Self {
Self {
toggle_relative_line_numbers: false,
use_system_clipboard: UseSystemClipboard::Always,
use_multiline_find: false,
use_smartcase_find: false,
custom_digraphs: Default::default(),
}
}
}
impl Settings for VimSettings {
const KEY: Option<&'static str> = Some("vim");
type FileContent = VimSettingsContent;
type FileContent = Self;
fn load(sources: SettingsSources<Self::FileContent>, _: &mut AppContext) -> Result<Self> {
sources.json_merge()