relay-knowledge 1.1.16

Graph-database-based knowledge graph project.
Documentation
use super::*;

#[test]
fn non_c_function_definitions_keep_generic_manual_fallback() {
    let content = r#"
def retry_policy():
    return 1
"#;
    let language = detect_language("src/app.py").expect("python should be configured");
    let parsed = parse_tree(language, content).expect("python should parse");
    let function_node = first_node_of_kind(parsed.root_node(), "function_definition")
        .expect("function node should be present");

    let definitions = manual_definitions(content, language.id, function_node);

    assert_eq!(definitions.len(), 1);
    assert_eq!(definitions[0].0, "retry_policy");
    assert_eq!(definitions[0].1, "function");
}

fn first_node_of_kind<'tree>(
    root: tree_sitter::Node<'tree>,
    kind: &str,
) -> Option<tree_sitter::Node<'tree>> {
    let mut stack = vec![root];
    while let Some(node) = stack.pop() {
        if node.kind() == kind {
            return Some(node);
        }
        push_children_reverse(node, &mut stack);
    }

    None
}