codetether-rlm 0.1.0

Recursive Language Model processing for CodeTether
Documentation
use anyhow::Result;
use std::collections::HashMap;

use super::AstMatch;

pub(crate) fn build(
    query: &tree_sitter::Query,
    match_: &tree_sitter::QueryMatch<'_, '_>,
    source: &[u8],
) -> Result<AstMatch> {
    let mut captures = HashMap::new();
    let mut first = None;
    for capture in match_.captures {
        let node = capture.node;
        let name = query.capture_names()[capture.index as usize].to_string();
        let text = node.utf8_text(source)?.to_string();
        first.get_or_insert((text.clone(), node.start_position()));
        captures.insert(name, text);
    }
    let (text, point) = first.unwrap_or_default();
    Ok(AstMatch {
        line: point.row + 1,
        column: point.column + 1,
        captures,
        text,
    })
}