settings.rs

 1use std::ops::Range;
 2use tree_sitter::{Query, QueryMatch};
 3
 4use crate::MigrationPatterns;
 5use crate::patterns::SETTINGS_ROOT_KEY_VALUE_PATTERN;
 6
 7pub const SETTINGS_PATTERNS: MigrationPatterns = &[(
 8    SETTINGS_ROOT_KEY_VALUE_PATTERN,
 9    migrate_drag_and_drop_selection,
10)];
11
12fn migrate_drag_and_drop_selection(
13    contents: &str,
14    mat: &QueryMatch,
15    query: &Query,
16) -> Option<(Range<usize>, String)> {
17    let name_ix = query.capture_index_for_name("name")?;
18    let name_range = mat.nodes_for_capture_index(name_ix).next()?.byte_range();
19    let name = contents.get(name_range)?;
20
21    if name != "drag_and_drop_selection" {
22        return None;
23    }
24
25    let value_ix = query.capture_index_for_name("value")?;
26    let value_node = mat.nodes_for_capture_index(value_ix).next()?;
27    let value_range = value_node.byte_range();
28    let value = contents.get(value_range.clone())?;
29
30    match value {
31        "true" | "false" => {
32            let replacement = format!("{{\n    \"enabled\": {}\n  }}", value);
33            Some((value_range, replacement))
34        }
35        _ => None,
36    }
37}