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}