senior 0.1.1

A cli that summons an llm suggest improvements to given code
use tree_sitter::{Language, Node, Tree, TreeCursor};
use tree_sitter_traversal::{Order, traverse};

pub fn find_all_of_kind<'a>(cursor: TreeCursor<'a>, kind: &str) -> Vec<Node<'a>> {
    traverse(cursor, Order::Pre)
        .filter(|node| node.kind() == kind)
        .collect()
}

pub fn find_first_of_kind_with_field_value<'a>(
    source: &str,
    cursor: TreeCursor<'a>,
    kind: &str,
    field: &str,
    value: &str,
) -> Option<Node<'a>> {
    traverse(cursor, Order::Pre).find(|node| {
        if node.kind() == kind {
            if let Some(child) = node.child_by_field_name(field) {
                let nval = node_value(source, child);
                if nval == value {
                    return true;
                }
            }
        }

        false
    })
}

pub fn node_value<'a>(source: &'a str, node: Node<'a>) -> &'a str {
    return node.utf8_text(source.as_bytes()).unwrap();
}

#[allow(dead_code)]
pub fn parse_source_with_language(source: &str, language: Language) -> Tree {
    let mut parser = tree_sitter::Parser::new();
    parser.set_language(language).unwrap();

    return parser.parse(source.as_bytes(), None).unwrap();
}