relay-knowledge 1.1.6

Graph-database-based knowledge graph project.
Documentation
use super::code_query_excerpts::{call_excerpt, callee_excerpt, reference_excerpt};

#[test]
fn call_excerpt_prefers_actual_call_line_over_type_mentions() {
    let excerpt = call_excerpt(
        Some(
            r#"
const params = {} satisfies Parameters<typeof generateObject>[0]
return yield* Effect.promise(() => generateObject(params).then((r) => r.object))
"#,
        ),
        "generate",
        "generateObject",
    );

    assert_eq!(
        excerpt,
        "generate calls generateObject: return yield* Effect.promise(() => generateObject(params).then((r) => r.object))"
    );
}

#[test]
fn call_excerpt_requires_identifier_boundaries_for_call_sites() {
    let excerpt = call_excerpt(
        Some(
            r#"
int rk_dispatch_read(
    const struct rk_driver_ops *ops)
{
    int result = ops->read(dev, buffer, length);
}
"#,
        ),
        "rk_dispatch_read",
        "read",
    );

    assert_eq!(
        excerpt,
        "rk_dispatch_read calls read: int result = ops->read(dev, buffer, length);"
    );
}

#[test]
fn call_excerpt_prefers_local_callable_declaration_over_later_invocation() {
    let excerpt = call_excerpt(
        Some(
            r#"
auto append_event = [&cache, &pipeline](const PipelineEvent& event) {
    cache.Insert(event.key);
    return pipeline(event);
};
total += append_event(event);
"#,
        ),
        "RunPipeline",
        "append_event",
    );

    assert_eq!(
        excerpt,
        "RunPipeline calls append_event: auto append_event = [&cache, &pipeline](const PipelineEvent& event) {"
    );
}

#[test]
fn callee_excerpt_includes_inline_callable_body_context() {
    let excerpt = callee_excerpt(
        Some(
            r#"
auto append_event = [&cache, &pipeline](const PipelineEvent& event) {
    cache.Insert(event.key);
    return pipeline(event);
};
total += append_event(event);
"#,
        ),
        "RunPipeline",
        "append_event",
    );

    assert_eq!(
        excerpt,
        "RunPipeline calls append_event: auto append_event = [&cache, &pipeline](const PipelineEvent& event) { cache.Insert(event.key); return pipeline(event); };"
    );
    assert!(!excerpt.contains("total += append_event"));
}

#[test]
fn callee_excerpt_includes_bounded_execution_context_after_call_site() {
    let excerpt = callee_excerpt(
        Some(
            r#"
int rk_dispatch_read(struct rk_driver_ops *ops) {
    if (!rk_validate_device(dev)) {
        return -EINVAL;
    }
    if (ops->open(dev) < 0) {
        return -EIO;
    }
    if (rk_lock_device(dev) < 0) {
        return -EBUSY;
    }
    int result = ops->read(dev, buffer, length);
    rk_unlock_device(dev);
    return result;
}
"#,
        ),
        "rk_dispatch_read",
        "rk_validate_device",
    );

    assert!(excerpt.contains("rk_validate_device(dev)"));
    assert!(excerpt.contains("ops->open(dev)"));
    assert!(excerpt.contains("ops->read(dev, buffer, length)"));
    assert!(!excerpt.contains("rk_unlock_device(dev)"));
    assert!(!excerpt.contains("return result"));
}

#[test]
fn reference_excerpt_includes_matching_source_line() {
    let excerpt = reference_excerpt(
        Some(
            r#"
int rk_driver_read(struct rk_device *dev)
{
    buffer[0] = (char)RK_TRACE_VALUE(dev->fd);
}
"#,
        ),
        "call",
        "RK_TRACE_VALUE",
    );

    assert_eq!(
        excerpt,
        "call reference to RK_TRACE_VALUE: buffer[0] = (char)RK_TRACE_VALUE(dev->fd);"
    );
}