settings.rs

 1use anyhow::Result;
 2use serde_json::Value;
 3
 4use crate::migrations::migrate_language_setting;
 5
 6pub fn make_auto_indent_an_enum(value: &mut Value) -> Result<()> {
 7    migrate_language_setting(value, migrate_auto_indent)
 8}
 9
10fn migrate_auto_indent(value: &mut Value, _path: &[&str]) -> Result<()> {
11    let Some(auto_indent) = value
12        .as_object_mut()
13        .and_then(|obj| obj.get_mut("auto_indent"))
14    else {
15        return Ok(());
16    };
17
18    *auto_indent = match auto_indent {
19        Value::Bool(true) => Value::String("syntax_aware".to_string()),
20        Value::Bool(false) => Value::String("none".to_string()),
21        Value::String(s) if s == "syntax_aware" || s == "preserve_indent" || s == "none" => {
22            return Ok(());
23        }
24        _ => anyhow::bail!("Expected auto_indent to be a boolean or valid enum value"),
25    };
26    Ok(())
27}