From 174a0b1517f2afd77e838fcabef0c84e98d0043f Mon Sep 17 00:00:00 2001 From: Ben Kunkle Date: Fri, 12 Sep 2025 14:55:19 -0500 Subject: [PATCH] Fix line indicator format setting (#38071) Closes #ISSUE Release Notes: - Fixed an issue where the `line_indicator_format` setting would not update based on the value in `settings.json` --- crates/go_to_line/src/cursor_position.rs | 25 ++++++++----- crates/project/src/project.rs | 2 ++ .../vim_mode_setting/src/vim_mode_setting.rs | 36 ++++++++++++------- 3 files changed, 42 insertions(+), 21 deletions(-) diff --git a/crates/go_to_line/src/cursor_position.rs b/crates/go_to_line/src/cursor_position.rs index 6af8c79fe9cc4ed0be0d7cb466753fa939355eec..5d7e0d27d362f8b6245d8ce25774342495a90427 100644 --- a/crates/go_to_line/src/cursor_position.rs +++ b/crates/go_to_line/src/cursor_position.rs @@ -293,7 +293,7 @@ impl StatusItemView for CursorPosition { } } -#[derive(Clone, Copy, Default, PartialEq, JsonSchema, Deserialize, Serialize)] +#[derive(Clone, Copy, Default, PartialEq, Debug, JsonSchema, Deserialize, Serialize)] #[serde(rename_all = "snake_case")] pub(crate) enum LineIndicatorFormat { Short, @@ -301,10 +301,13 @@ pub(crate) enum LineIndicatorFormat { Long, } -#[derive(Clone, Copy, Default, JsonSchema, Deserialize, Serialize, SettingsUi, SettingsKey)] -#[serde(transparent)] -#[settings_key(key = "line_indicator_format")] -pub(crate) struct LineIndicatorFormatContent(LineIndicatorFormat); +#[derive( + Clone, Copy, Default, Debug, JsonSchema, Deserialize, Serialize, SettingsUi, SettingsKey, +)] +#[settings_key(None)] +pub(crate) struct LineIndicatorFormatContent { + line_indicator_format: Option, +} impl Settings for LineIndicatorFormat { type FileContent = LineIndicatorFormatContent; @@ -312,14 +315,18 @@ impl Settings for LineIndicatorFormat { fn load(sources: SettingsSources, _: &mut App) -> anyhow::Result { let format = [ sources.release_channel, - sources.operating_system, + sources.profile, sources.user, + sources.operating_system, + Some(sources.default), ] .into_iter() - .find_map(|value| value.copied()) - .unwrap_or(*sources.default); + .flatten() + .filter_map(|val| val.line_indicator_format) + .next() + .ok_or_else(Self::missing_default)?; - Ok(format.0) + Ok(format) } fn import_from_vscode(_vscode: &settings::VsCodeSettings, _current: &mut Self::FileContent) {} diff --git a/crates/project/src/project.rs b/crates/project/src/project.rs index b39e84e7c0816e944fb6d97ead9015b796dc1aef..db19aed6135f9de13e83fe07cbbf3c7186c0c603 100644 --- a/crates/project/src/project.rs +++ b/crates/project/src/project.rs @@ -1012,6 +1012,8 @@ impl settings::Settings for DisableAiSettings { .iter() .chain(sources.user.iter()) .chain(sources.server.iter()) + .chain(sources.release_channel.iter()) + .chain(sources.profile.iter()) .any(|disabled| disabled.disable_ai == Some(true)); Ok(Self { disable_ai }) diff --git a/crates/vim_mode_setting/src/vim_mode_setting.rs b/crates/vim_mode_setting/src/vim_mode_setting.rs index 660520a307dbef1e73174aa5449417d766c04235..7d0f8aa7fe3766f18ef163ce882e55ebb73aa03a 100644 --- a/crates/vim_mode_setting/src/vim_mode_setting.rs +++ b/crates/vim_mode_setting/src/vim_mode_setting.rs @@ -43,12 +43,18 @@ impl Settings for VimModeSetting { fn load(sources: SettingsSources, _: &mut App) -> Result { Ok(Self( - sources - .user - .and_then(|mode| mode.vim_mode) - .or(sources.server.and_then(|mode| mode.vim_mode)) - .or(sources.default.vim_mode) - .ok_or_else(Self::missing_default)?, + [ + sources.profile, + sources.release_channel, + sources.user, + sources.server, + Some(sources.default), + ] + .into_iter() + .flatten() + .filter_map(|mode| mode.vim_mode) + .next() + .ok_or_else(Self::missing_default)?, )) } @@ -86,12 +92,18 @@ impl Settings for HelixModeSetting { fn load(sources: SettingsSources, _: &mut App) -> Result { Ok(Self( - sources - .user - .and_then(|mode| mode.helix_mode) - .or(sources.server.and_then(|mode| mode.helix_mode)) - .or(sources.default.helix_mode) - .ok_or_else(Self::missing_default)?, + [ + sources.profile, + sources.release_channel, + sources.user, + sources.server, + Some(sources.default), + ] + .into_iter() + .flatten() + .filter_map(|mode| mode.helix_mode) + .next() + .ok_or_else(Self::missing_default)?, )) }