migrator: Add migration for settings changed prior to migrator-introduction (#27375)

This PR updates two existing settings to use the settings migrator
instead of a manually implemented visitor. Both of these settings were
changed prior to the introduction of automatic migrations and the
visitor ensured that the settings were kept backwards compatible. See
https://github.com/zed-industries/zed/pull/22200 and
https://github.com/zed-industries/zed/pull/22364 respectively.

WIth this change, existing user configurations are updated accordingly
and the corresponding settings can derive `Deserialize` again.

I also added tests for the replacement of settings values, as there was
no test for this behaviour. Additionally, I added a seperate test for
the existing migration of `always_show_close_button`, since that
migration updated both the key and value.

Release Notes:

- N/A
This commit is contained in:
Finn Evers 2025-03-25 00:05:01 +01:00 committed by GitHub
parent 46d67a33c7
commit be83c5e1c5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 128 additions and 95 deletions

View file

@ -104,6 +104,10 @@ pub fn migrate_keymap(text: &str) -> Result<Option<String>> {
pub fn migrate_settings(text: &str) -> Result<Option<String>> {
let migrations: &[(MigrationPatterns, &Query)] = &[
(
migrations::m_2025_01_02::SETTINGS_PATTERNS,
&SETTINGS_QUERY_2025_01_02,
),
(
migrations::m_2025_01_29::SETTINGS_PATTERNS,
&SETTINGS_QUERY_2025_01_29,
@ -166,6 +170,10 @@ define_query!(
);
// settings
define_query!(
SETTINGS_QUERY_2025_01_02,
migrations::m_2025_01_02::SETTINGS_PATTERNS
);
define_query!(
SETTINGS_QUERY_2025_01_29,
migrations::m_2025_01_29::SETTINGS_PATTERNS
@ -461,4 +469,54 @@ mod tests {
),
)
}
#[test]
fn test_replace_settings_value() {
assert_migrate_settings(
r#"
{
"scrollbar": {
"diagnostics": true
},
"chat_panel": {
"button": true
}
}
"#,
Some(
r#"
{
"scrollbar": {
"diagnostics": "all"
},
"chat_panel": {
"button": "always"
}
}
"#,
),
)
}
#[test]
fn test_replace_settings_name_and_value() {
assert_migrate_settings(
r#"
{
"tabs": {
"always_show_close_button": true
}
}
"#,
Some(
r#"
{
"tabs": {
"show_close_button": "always"
}
}
"#,
),
)
}
}