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}