settings.rs

 1use std::ops::Range;
 2use tree_sitter::{Query, QueryMatch};
 3
 4use crate::MigrationPatterns;
 5use crate::patterns::SETTINGS_NESTED_KEY_VALUE_PATTERN;
 6
 7pub const SETTINGS_PATTERNS: MigrationPatterns = &[(
 8    SETTINGS_NESTED_KEY_VALUE_PATTERN,
 9    replace_preferred_completion_mode_value,
10)];
11
12fn replace_preferred_completion_mode_value(
13    contents: &str,
14    mat: &QueryMatch,
15    query: &Query,
16) -> Option<(Range<usize>, String)> {
17    let parent_object_capture_ix = query.capture_index_for_name("parent_key")?;
18    let parent_object_range = mat
19        .nodes_for_capture_index(parent_object_capture_ix)
20        .next()?
21        .byte_range();
22    let parent_object_name = contents.get(parent_object_range)?;
23
24    if parent_object_name != "agent" {
25        return None;
26    }
27
28    let setting_name_capture_ix = query.capture_index_for_name("setting_name")?;
29    let setting_name_range = mat
30        .nodes_for_capture_index(setting_name_capture_ix)
31        .next()?
32        .byte_range();
33    let setting_name = contents.get(setting_name_range)?;
34
35    if setting_name != "preferred_completion_mode" {
36        return None;
37    }
38
39    let value_capture_ix = query.capture_index_for_name("setting_value")?;
40    let value_range = mat
41        .nodes_for_capture_index(value_capture_ix)
42        .next()?
43        .byte_range();
44    let value = contents.get(value_range.clone())?;
45
46    if value.trim() == "\"max\"" {
47        Some((value_range, "\"burn\"".to_string()))
48    } else {
49        None
50    }
51}