in src/utilities/tree_sitter_utilities.rs [163:196]
fn get_range_for_replace_node(
query: &Query, query_matches: &[Vec<tree_sitter::QueryCapture>], replace_node_name: &String,
replace_node_idx: Option<u8>,
) -> Option<Range> {
let tag_names_by_index: HashMap<usize, &String> =
query.capture_names().iter().enumerate().collect();
// Iterate over each tag name in the query
for tag_name in query.capture_names().iter() {
// Iterate over each query match for this range of code snippet
for captures in query_matches.iter().cloned() {
// Iterate over each capture
for capture in captures {
if tag_names_by_index[&(capture.index as usize)].eq(tag_name)
&& tag_name.eq(replace_node_name)
{
if let Some(child_index) = replace_node_idx {
let c_usize = child_index as usize;
if c_usize >= capture.node.named_child_count() {
return None;
}
return Some(capture.node.named_child(c_usize).unwrap().range().into());
}
return Some(capture.node.range().into());
}
}
}
}
panic!(
"Could not fetch range or node for replace_node {}. Context: {:?}",
replace_node_name,
query.capture_names()
);
}